`
robinsoncrusoe
  • 浏览: 737054 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

JDBC笔记

    博客分类:
  • JAVA
阅读更多
好久没博一把了,今天总结一下这两天学习JDBC的内容吧!
JDBC API包含在JDK中,被分为两个包:java.sql和javax.sql。java.sql包定义了访问数据库的接口和类,其中一些接口由驱动程序提供商来实现。

1、Driver接口

jdbc.sql.Driver是所有JDBC驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同的厂商实现该接口的类名是不同的,下面列出主要数据库的JDBC驱动的类名。

    * com.microsoft.jdbc.sqlserver.SQLServerDriver,这是sqlserver2000的JDBC驱动类名,它要单独下载,安装完毕后会看到三个包:msbase.jar包,mssqlserver.jar包和 msutil.jar包。
    * orcle.jdbc.driver.OracleDriver,Oracle的JDBC驱动不需要单独下载,在Oracle数据库产品的安装目录下就可以找到。具体在%oracle_home%\ora92\jdbc\lib目录下就可以找到。
    * com.mysql.jdbc.Driver,以前的Mysql驱动类是:org.gjt.mm.mysql.Driver,新的MySql JDBC驱动程序版本为了向后兼容,保留了这个类,这个驱动也需要单独下载。

在具体的程序中不需要直接去访问这些实现了Driver接口的类,而是由驱动程序管理器去调用这些驱动。我们通过JDBC驱动管理器注册每个驱动程序,使用驱动程序管理器类提供的方法来建立数据库的连接,而驱动程序管理器类的连接方法则调用驱动程序类的连接方法connect()来建立数据库的连接。

加载JDBC驱动是调用Class类的静态方法forname(),向其传递要加载的JDBC驱动的类名。在运行时,类加载器从classpath环境变量中定位和加载JDBC驱动类。

2 、建立到数据库的连接

DriverManager类的getConnection()方法建立到数据库的连接,返回一个Connection对象。在DriverManager类中提供了3个重载的getConnection()方法。

    * public static Connection getConnection(String url) throws SQLException
    * public static Connection getConnection(String url,String urer,String password) throws SQLException
    * public static Connection getConnection(String url,Properties) throws SQLException  ,该方法需要数据库的URL和java.util.Properties对象。Properties包含了用于特定数据库所需要的参数,以键-值对的方式指定连接参数。通常情况下,至少需要指定user和password属性。

数据库URL用于标示一个被注册的驱动程序,驱动程序管理器通过这个URL选择正确的驱动程序,从而建立到数据库的连接,jdbc URL的语法如下:

jdbc:subprotocol:subname,整个URL分为三个部分:协议(只有jdbc一种):子协议:子名称。下面给出常用数据库的JDBC URL的形式。

    * SQL Server200

     jdbc:microsoft:sqlserver://localhost:1433;database=数据库名

    * Oracle

    jdbc:oracle:thin:@localhost:1521:ORCL

    * MySql

    jdbc:mysql://localhost:3306/datasource_name

  书接上文。上篇说到与数据库建立连接了。下面是之后的工作。数据库连接被用于向数据库服务器发送命令和SQL语句,在建立连接之后,需要对数据库进行访问,执行SQL语句。在java.sql包中给我们提供了三个接口,分别定义了对数据库调用的不同方式,这三个接口是:Statement、 PreparedStatement和CallableStatement。
访问数据库
1、Statement

    得到Connection对象后,该对象调用它的createStatement()方法创建了一个Statement对象。Statement对象用于执行静态SQL语句,返回执行的结果。Statement接口中定义了下列方法用于执行SQL语句。

   (1)ResultSet executeQuery(String sql) throws SQLException

   (2)int extcuteUpdate(String sql) throws SQLException ,该方法用于执行参数指定的SQL语句:INSERT、UPDATE或者DELETE语句。另外,该方法也可以执行SQL DDL语句,例如:create table

    (3)boolean execute(String sql) throws SQLException ,该方法用于执行多个结果集的SQL语句。

     (4)int [] executeBatch() throws SQLExecption ,该方法允许我们向数据库提交一批命令,然后一起执行。如果执行成功,返回值是一个更新行数的数组。可以通过Statement对象的addBatch()方法将Sql语句加入到命令列表中。如:

Statement stmt=conn.createStatement();

stmt.addBatch("具体的sql语句1");

stmt.addBatch("具体的sql语句2");

stmt.addBatch("具体的sql语句3");......

stmt.addBatch("具体的sql语句n");

stmt.executeBatch();

2、ResultSet

   Statement中的方法返回ResultSet对象。ResultSet对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet接口由数据库厂商实现。ResultSet对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过ResultSet对象的next方法移动到下一行。该方法为:

boolean next() throws SQLException ,ResultSet接口中定义了很多方法来获得当前行中列的数据,根据字段类型的不同,采用不同的方法来获取数据。如:getArray(),getString(),getInt,getObject().....

这些方法中,又提供了两种形式的调用,一种是以列的索引作为参数(从1开始),一种是以列名作为参数,例如,对于getString()方法,两种形式为:

1 、 String getString(int columnIndex) throws SQLException

2 、 String getString(String columnName) throws SQLException

如果不知道要获取的列的数据类型,可以一律采用getString()方法来得到String类型的数据。

3、PreparedStatement

  该接口用于执行不同参数,同一个SQL语句的情况。PreparedStatement接口从Statement接口继承而来。调用Connection 对象的prepareStatement方法得到PreparedStatement对象。PreparedStatement对象所代表的sql语句中的参数用问号(?)来表示,调用PreparedStatement对象的setXXX方法来设置这些参数。该方法有两个参数,第一个要设置的是参数的索引(从1开始),第二个参数要设置是参数的值。看下面一段代码:

  String sql="select * from student where stuID=? and stuname=?";

  conn=DriverManager.getConnection(url);

  PreparedStatement pstmt=cnn.prepareStatement(sql);

  pstmt.setInt(1,2067502009);

  pstmt.setString(2,"liwei");

  stmt.executeUpdate();

4、CallableStatement

该接口对象用于执行SQL存储过程。CallableStatement接口从 PreparedStatement接口继承而来,可以通过调用Connection对象的prepareCall()方法来得到 CallableStatement对象。在执行存储过程前,凡是存储过程中类型为OUT的参数必须注册,可以通过CallableStatement对象的registerOutParameter()方法来完成。对于类型为IN的参数,可以利用setXXX()方法来设置参数的值,我们看下面这段代码:

CallableStatement cstmt=conn.prepareCall("call 存储过程名a(?,?)");

cstmt.registerOutParameter(2,java.sql.Types.INTEGER);

cstmt.setInt(1,2563);

cstmt.execute();

int param =cstmt.getInt(2);

存储过程名a有两个参数,第一个为IN类型,第二个参数为OUT类型。因为有一个OUT类型的参数,所以在执行这个存储过程之前,我们调用 registerOutParameter()方法注册存储过错的第二个参数。registerOutParameter()方法的第二个参数用于指定存储过程参数的JDBC类型,该类型在java.sql.Types中定义。在执行存储过程后,可以直接调用CallableStatement对象的 getXXX()方法取出OUT参数的值。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics