zoukankan      html  css  js  c++  java
  • JDBC的几个步骤

    JDBC:JAVA访问数据库的解决方案。
    几个步骤:1.加载驱动类;
         2.与数据库建立连接;
               3.执行SQL语句
           4.处理结果集
         5.关闭连接
    1. 第一步:加载驱动类:
      需要注意:不同的数据库,参照的字符串不同,ORACLE的连接为:Class.forName("oracle.jdbc.driver.OracleDriver"); 这一步执行后,程序可能会抛出: ClassNotFoundException,原因一般有:
    a. 数据库的驱动jar包没有导入到环境变量中
    b. Class.forName中的字符串拼写不正确

    2. 第二步:通过DriverManager与数据库建立连接:
    其静态方法getConnection用来获取连接。通常需要传入三个参数
    参数1:数据库的地址及端口(不同数据库字符串内容不相同)
    oracle的地址:jdbc:oracle:thin:@host:port:sid
    参数2:数据库的用户名
    参数3:数据库对应用户名的密码
    Connection conn = DriverManager.getConnect
    ("jdbc:oracle:thin:@host:port:oracle","user", "psd");

    3.第三步:java.sql.Statement 执行SQL语句并获取结果
    Statement state = conn.createStatement();
    String sql="/*这里面是SQL语句*/  ";
    Statement针对不同的SQL语句提供了不同的执行方法:
    ResultSet executeQuery(String sql)
      * 该方法专门用来执行DQL语句,返回的ResultSet表示查询出来的结果集
    int executeUpdate(String sql)
      * 该方法专门用来执行DML语句,返回的数字表示执行该语句影响了表中多少条数据
    boolean execute(String sql)
      * 该方法理论上什么语句都可以执行了,但是由于DQL,DML都有专门的方法执行了,所以该方法通常用来执行DDL语句
    ResultSet rs = state.executeQuery(sql);
    输出查询结果:while(rs.next())

            { 输出语句 }
    ResultSet提供用于遍历结果集的方法:
    boolean next()
      *该方法有两个作用,首先当我们查询出结果集后rs的指针指向第一条数据之上,所以我们需要先调用一次next()使其指针移动到第一条数据上并表示该条数据。 第二个作用是看返回值,若指针向下移动后,发现没有数据了,会返回false,若有则返回true,所以我们只有在该方法返回true的情况下才获取当前记录的各个字段对应的值
    RS还提供了若干个getXXX(String fieldName)方法:
      *这一系列方法是用来获取RS表示的当前记录中给定字段对应的值。不同的字段由于类型不同需要调用相对应的方法

    第4步:关闭连接,写在finally块中
    finally{
    if(conn!=null){
    try {
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }

    将数据库的连接放在一个工具类里面,达到重用的效果
    由于访问数据库是经常要用到的操作,所以在工程中,通常编写一个访问数据库的工具类,此后所有访问数据库的操作,都从工具类中获取连接,实现工具类的两种方式:
    1.直接把数据配置写在工具类DBUtil中
    2.把数据库配置写在一个properties属性文件里,工具类读入属性文件,逐行获取数据库参数(一般使用第二种)
    若使用第一种方法,在后期需要修改所使用的数据库或者说修改host、端口、数据库连接名、密码等等时,就需要修改源代码里面的数据,不便于系统的维护,故一般使用第二种方法
    数据库连接工具类DBUtil.java以及连接池的主要步骤:
    Properties prop = new Properties();
    prop.load(new FileInputStream("config.properties"));
    //根据配置项初始化
    String driverName = prop.getProperty("driverName");
    String url = prop.getProperty("url");
    String username = prop.getProperty("username");
    String password = prop.getProperty("password");
    //最大连接数
    int maxActive = Integer.parseInt(prop.getProperty("maxActive"));
    //最大等待时间
    int maxWait = Integer.parseInt(prop.getProperty("maxWait"));
    //初始化连接池
    cp = new BasicDataSource();
    //相当与是Class.forName()中的内容
    cp.setDriverClassName(driverName);
    cp.setUrl(url);
    cp.setUsername(username);
    cp.setPassword(password);
    cp.setMaxActive(maxActive);
    cp.setMaxWait(maxWait);
    public static Connection getConnection() throws Exception{
    return cp.getConnection();
    }

  • 相关阅读:
    usaco PROB Checker Challenge 搜索
    usaco Superprime Rib 搜索
    hdu_1056_HangOver_201311071354
    hdu_1049_Climbing Worm_201311061331
    hdu_1048_The Hardest Problem Ever_201311052052
    hdu_1041_Computer Transformation_201311051648
    hdu_1039_Easier Done Than Said_201311051511
    hdu_1038_Biker's Trip Odometer_201311021643
    hdu_1037_Keep on Truckin'_201311021600
    hdu_1036_Average is not Fast Enough_201311021335
  • 原文地址:https://www.cnblogs.com/xuzhuteng/p/4662916.html
Copyright © 2011-2022 走看看