使用JDBC存取数据库

使用JDBC来存取数据库通常包含以下几个步骤:

  • 载入JDBC driver
  • 在客户程序与数据库之间建立连接
  • 通过数据库连接将SQL语句从Java程序传到数据库
  • 通过数据库返回的记录集得到所需的数据
  • 如需要,再用修改后的数据更新数据库
  • 操作结束,关闭连接

前面讲过,JDBC API作为java核心类库的一部分,直接包含在JDK软件包中,其对应的包为java.sql,要使用JDBC,必须在程序开始import这个包:

import java.sql.*;

以下分别来说明使用JDBC来存取数据库的几个步骤。

 

  1.  

  2. 载入JDBC driver

     

    1. 使用类型1的driver(JDBC-ODBC bridge driver)
      类型1的driver直接包含在JDBC软件中,只要在客户端安装好数据库对应的ODBC driver即可使用。
      程序中可使用下列语句载入类型1的driver:
      Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
      
    2. 使用类型2和类型4的JDBC driver
      针对不同类型的数据库,首先要从厂家那里获取相应数据库的JDBC driver,再按说明将它载入到程序中。下面以oracle的JDBC driver为例说明。
      先从oracle的网站下载指定数据库版本的JDBC driver,然后将该driver的存放路径加入CLASSPATH,最后在程序中使用以下语句载入driver:
      Class.forName("oracle.JDBC.driver.OracleDriver");
      
      如需要,程序员还可以建立一个driver的实例并利用DriverManager类将它登记到系统中:
      DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
      

     

     

  3. 与数据库建立连接

     

    使用JDBC DriverManager类getConnection()方法可以与指定的数据库建立连接。如:
    Connection con = DriverManager.getConnection (url, db_username, db_password);
    
    其中的db_username和db_password分别对应所连数据库的用户名和口令。url与网络中的URL有所不同,它给出了要连数据库的有关信息。不同类型的JDBC driver对应不同格式的url。即使是同一类型的JDBC driver,不同厂家的数据库其格式也有所不同。这里类型2和类型4的driver均以oracle为例。
    1.  

    2. 类型1的driver的url的格式
      jdbc:odbc:dsn_name 
      
      其中,dsn_name为数据库对应的ODBC driver的DSN名

       

       

    3. 类型4的Oracle driver (the thin driver) 的格式
      jdbc:oracle:thin@database_name:port_no:SID 
      
      其中,database_name为数据库服务器的名字或IP地址,port_no为数据库listener的端口号,Oracle缺省为1521,SID为数据库的SID。如:
      String url   = "jdbc:oracle:thin:@192.168.0.150:1521:ora816";
      

       

       

    4. 类型2的Oracle driver (the OCI driver) 的格式
      jdbc:oracle:oci8@database_name 
      
      该database_name或者是SQL*Net中的name- value对(pair), 或者,如果你使用Oracle Name server, 也可以使用tnsname.ora文件中的name。

     

     

  4. 建立Statement对象

     

    使用Connection对象createStatement()方法建立一个Statement对象: 如:
    Statement stmt = conn.createStatement ();
    

     

     

  5. 执行SQL查询语句

     

    一旦建立了Statement对象后,就可以利用该对象的executeQuery()方法让数据库执行指定的SQL语句,SQL语句是作为方法的参数传入并递交数据库去执行,执行后的结果放在一个ResultSet类型的对象中作为方法的返回值。如:
    ResultSet rset = stmt.executeQuery (SELECT ename from emp where empno = 7900);
    

     

     

  6. 获取数据库查询结果

     

    调用ResultSet对象的next()方法得到该集合中新的一行。如果ResultSet集合多于一行,可以用一个循环将它取出。如:
    。。。。。。。。。
    boolean more=rset.next();
    while (more) {
    	    String ename = rset.getString("ename"))
    	    System.out.println(ename);
        more=rset.next();
    }
    
    其中,ResultSet的getXXX()方法用于获取该行中指定列的值。通常如对应的SQL类型为字符串或文字类型,可使用getString()方法。如rset中每一行第一列的列名为ename, 其数据库中的SQL类型为VARCHAR,就可以用rset.getString("ename"))获得该列对应的值。如对应的SQL类型为数值类型,如INTEGER, FLOAT, NUMBER等,则可使用getInt(), getFloat()等方法。另外,getXXX()方法的参数也可以是列号,假如上述ename为ResultSet中的第一列,则getString(1)与getString("ename")效果一样。

     

     

  7. 更新数据库

     

    有时不仅要从数据库中检索数据,还需更新数据库的内容。前面介绍的executeQuery()方法主要用于执行静态的SQL语句(通常为select语句),它返回的是一个ResultSet类型的对象。而对数据库的更新操作通常使用executeUpdate()方法,它通常用来执行CREATE, INSERT, UPDATE 或DELETE等操作,该方法的返回值为int类型的数值,代表数据库中已更新的行数,如没什么可返回的,返回值为0。如:
    创建表:
    
    String createTableCoffees = "CREATE TABLE COFFEES " +
    		"(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " +
    		"SALES INTEGER, TOTAL INTEGER)";
    stmt.executeUpdate(createTableCoffees);
    
    在表中插入记录:
    
    stmt.executeUpdate(
        "INSERT INTO COFFEES " + 
    "VALUES ('Colombian', 101, 7.99, 0, 0)");
    
    更新记录:
    
    String updateString = "UPDATE COFFEES " +
    	"SET SALES = 75 " + 
    	"WHERE COF_NAME LIKE 'Colombian'";
    stmt.executeUpdate(updateString);
    

     

     

  8. 关闭数据库连接

     

    对数据库操作结束后,通常要依次关闭打开的ResultSet, Statement和Connection对象。
    如:
    rset.close();
    stmt.close();
    conn.close();
    
    要注意的是,前面介绍的许多方法如createStatement(), executeQuery()和executeUpdate()等方法均会产生一个SQLException的例外,所以使用这些语句时要作相应的例外处理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值