您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第9章Java数据库技术
第9章Java数据库技术9.1JDBC概述9.2使用JDBC9.3实例习题9.1JDBC概述JDBC(JavaDatabaseConnection,Java数据库连接)是一种用于执行SQL语句的JavaAPI(应用程序设计接口),它由一些Java语言写的类和界面组成。JDBC提供了一种标准的应用程序设计接口,使得开发人员使用Java语言开发完整的数据库应用程序变得极为简单。通过JDBC,开发人员几乎可以将SQL语句传递给任何一种数据库,而无需为各种数据库编写单独的访问程序。JDBC可以自动将SQL语句传递给相应的数据库管理系统。JDBC扩展了Java的功能,例如在Applet中应用JDBC,可以实现与远程数据库的连接,实现不同平台数据库之间的对话。简单地说,JDBC完成下面三个操作:(1)与一个数据库建立连接。Connectioncon=DriverManager.getConnection(jdbc:odbc:CallCenter,sa,);(2)向数据库发送SQL语句。stmt=con.createStatement();rs=stmt.executeQuery(SELECTCID,CPinfromtCustomerWHERECID='z1');(3)处理数据库返回的结果。while(rs.next()){StringtheInt=rs.getString(CID);Stringstr=rs.getString(CPin);...}9.2使用JDBCJDBC的接口分为两个层次:一个是面向程序开发人员的JDBCAPI;另外一个是底层的JDBCDriverAPI。JDBCAPI被描述成为一组抽象的Java接口,应用程序可以对某个数据库打开连接,执行SQL语句并且处理结果。最重要的接口如下:java.sql.DriverManager:处理驱动的调入并且对产生新的数据库连接提供支持。java.sql.Connection:代表对特定数据库的连接。java.sql.Statement:代表一个特定的容器,以对一个特定的数据库执行SQL语句。java.sql.ResultSet:控制对一个特定语句的行数据的存取。其中java.sql.Statement又有两个子类型:(1)java.sql.PreparedStatement:用于执行预编译的SQL语句。(2)java.sql.CallableStatement:用于执行对一个数据库内嵌过程的调用。JDBCDriverAPI是指java.sql.Driver接口,封装了不同数据库的驱动程序(像Access、Foxpro、SQLServer等)。由于它是数据库底层处理,所以必须提供对java.sql.Connection、java.sql.Statement、java.sql.PreparedStatement和java.sql.ResultSet的实现。如果目标DBMS提供有OUT参数的内嵌过程,那么还必须提供java.sql.CallableStatement接口。在java.sql.Driver接口中每个数据库驱动程序必须提供一个类,使得系统可以由java.sql.DriverManager来管理。一个比较好用的驱动程序是在ODBC之上提供对JDBC的实现,从而提供与ODBC接口的JDBC-ODBC桥。所谓JDBC-ODBC桥,是一个JDBC驱动程序,通过将JDBC操作转换为ODBC操作来实现JDBC操作。它由sun.jdbc.odbc包实现,包含一个用来访问ODBC的本地库,对所有ODBC可用的数据库实现JDBC。通过ODBC子协议,可以使用下面一行代码进行显示加载。Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);加载时,ODBC驱动程序将创建自己的实例,同时在JDBC驱动程序管理器中进行注册。由于JDBC放在ODBC之后,所以实现起来简单且高效。9.2.1DriverDriver接口是每个驱动器类都需要完成的。JavaSQL框架允许有多个数据库驱动器,每个驱动器应该提供一个类来实现驱动器接口,而驱动器的装载通过DriverManager实例实现。DriverManager将装载尽量多的驱动器,对每个给定的连接请求,将所有的驱动器依次连接到目标数据库上。当驱动器类装载后,Driver应该创建一个实例,然后注册到DriverManager上。9.2.2DriverManagerDriverManager管理一系列JDBC驱动器的基本服务。应用程序可以显式加载JDBC驱动器。例如下面代码显式加载my.sql.Driver。Class.forName(my.sql.Driver);显式加载JDBC-ODBC桥:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);它的较为重要的方法有:publicstaticConnectiongetConnection(Stringurl)throwsSQLExceptionpublicstaticConnectiongetConnection(Stringurl,Propertiesinfo)throwsSQLExceptionpublicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException这些方法的功能都是建立一个到给定数据库url的连接。DriverManager试图从注册的JDBC驱动器序列中选择合适的驱动器,返回到url的连接。其中:(1)url为数据库url,格式为jdbc:subprotocol:subname。(2)info以“标记/数值对”作为连接参数,至少应该包括user和password属性对。(3)user指数据库用户(连接以什么身份建立)。(4)password是用户的密码。例如:使用JDBC-ODBC桥建立到ODBC配置的数据库CallCenter的连接,访问CallCenter数据库的用户名为sa,密码无。语句行如下:Connectioncon=DriverManager.getConnection(jdbc:odbc:CallCenter,sa,);9.2.3Connection一个Connection(连接)就是一个与特定数据库的会话。在连接的上下文环境中才可以执行SQL语句和返回结果。Connection对象的数据库可以提供描述它的表、SQL语法和存储过程等的信息。它较为重要的方法有:publicStatementcreateStatement()throwsSQLException创建一个Statement对象,用于发送SQL语句到数据库。没有参数的SQL语句通常使用Statement对象执行。如果希望多次执行,使用PreparedStatement更为高效。publicPreparedStatementprepareStatement(Stringsql)throwsSQLException创建一个PreparedStatement对象,发送参数化SQL语句sql到数据库。SQL语句可以预先编译并存储到PreparedStatement语句中。这个对象可以用来高效地多次执行语句。其中:参数sql是包含多个“?”参数的SQL语句,“?”表示输入参数由用户进行设置。例如:创建Statement对象语句如下:stmt=con.createStatement();创建PreparedStatement对象语句如下:pstmt=con.prepareStatement(UPDATEXueshengSET班级=?WHERE班级=?);9.2.4StatementStatement对象用于执行一个静态的SQL语句并返回它产生的结果。在缺省情况下,任一时刻每个Statement对象只产生一个ResultSet集。对数据库希望有不同操作得到结果集时,需要创建不同的Statement对象。它的较为重要的方法有:publicResultSetexecuteQuery(Stringsql)throwsSQLException执行给定的sql语句,返回一个ResultSet对象。publicintexecuteUpdate(Stringsql)throwsSQLException执行给定的sql语句,可以是插入(INSERT)、更新(UPDATE)或者删除(DELETE)等,也可以是一个空语句,执行DDL语句。返回值是操作的记录个数。publicResultSetgetResultSet()throwsSQLException以ResultSet对象格式返回当前结果集,每个结果集只调用一次。例如:从表tCustomer中返回CID为z1的记录的CID(客户ID)和CPin(密码)列,语句行为:rs=stmt.executeQuery(SELECTCID,CPinfromtCustomerWHERECID='z1');9.2.5PreparedStatementPreparedStatement代表预编译的SQL语句的对象。一个SQL语句预编译后存储到PreparedStatement对象中,这个对象用来多次执行语句。PreparedStatement继承于Statement,扩展了Statement的用途,提高了Statement的执行效率。它与Statement对象有两点不同:(1)同一个对象可以多次使用。(2)它的SQL语句可以带输入(IN)参数。PreparedStatement在程序语句中的输入参数使用占位符“?”来实现。必须使用类提供的设置方法设置语句中占位符的具体值,才能执行语句。如下面的程序段,根据ID的取值更新EMPLOYEES表中SALARY字段的取值,将第一个占位符代表的参数设置为10000.00,将第二个占位符代表的参数设置为111,语句执行的结果是EMPLOYEES表中ID为111的记录的SALARY取值为10000.00。PreparedStatementpstmt=con.prepareStatement(UPDATEEMPLOYEESSETSALARY=?WHEREID=?);pstmt.setBigDecimal(1,10000.00)pstmt.setInt(2,111);pstmt.executeUpdate();类PreparedStatement提供的常用方法如下:publicbooleanexecute()throwsSQLException执行PreparedStatement对象中的任一类型的SQL语句。如果返回true,则调用getResultSet方法取得ResultSet集;如果返回false,则调用getUpdateCount方法获得更新数。publicResultSetexecuteQuery()throwsSQLException执行SQL查询,并返回查询产生的结果集。publicintexecuteUpdate()throwsSQLException执行对象中的SQL语句。如果是一些更新操作,如插入(INSERT)、修改(UPDATE)和删除(DELETE)等,则返回操作的个数。常用的设置方法为:publicvoidsetBigDecimal(intparameterIndex,BigDecimalx)throwsSQLException在第parameterIndex位置设置BigDecimal型x。publicvoidsetBoolean(intparameterIndex,booleanx)throwsSQLException在第parameterIndex位置设置布尔型x。publicvoidsetByte(intparameterIndex,bytex)throwsSQLException在第parameterIndex位置设置字节型x。publicvoidse
本文标题:第9章Java数据库技术
链接地址:https://www.777doc.com/doc-2113276 .html