您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 使用JDBC(JAVA)
PartIX使用JDBC对数据库进行操作2JDBC的工作原理JDBC是支持基本SQL数据库功能的一系列抽象的接口,最重要的接口包括:Java.sql.DriverManager:处理驱动的调入并且对产生新的数据库连接提供支持Java.sql.Connection:代表对特定数据库的连接Java.sql.Statement:代表一个特定的容器,对一个特定的数据库执行SQL语句Java.sql.ResultSet:控制对一个特定语句的行数据的存取这些接口在不同的数据库功能模块的层次上提供了一个统一的用3户界面,使得独立于数据库的Java应用程序开发成为可能,同时提供了多样化的数据库连接方式。图1为JDBC的工作原理。与Microsoft的ODBC(OpenDataBaseConnectivity)方式一样,JDBC在客户端和服务器端都需要JDBC驱动器(JDBCDriver)来完成相关的连接操作。ODBC是建立在X/OpenSQLCLI(CallLevelInterface)基础上的,JDBC也是建立在此基础上的,它定义了一个友好的Java界面与X/OpenSQLCLI中定义的基本抽象层和基本概念进行连接。这个连接就是JDBC/ODBC桥接,这样可以使用JDBC通过ODBC驱动器4(OCBCDriver)与数据库进行连接,如图2所示。建立数据库连接要建立一个使用DBMS的连接包括两个步骤:加载驱动程序;创建连接。5(1)加载驱动程序加载驱动程序是一件非常简单的事情,只需要一行代码。例如,想要使用JDBC-ODBCBridge,就可用下面代码加载它:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);驱动程序文档会给您需要使用的类名。例如,假设类名是jdbc.DriverXYZ,就可用如下代码行加载驱动程序:Class.forName(jdbc.DriverXYZ);不需要创建驱动程序的实例,然后再用DriverManager注册它,因为调用Class.forName将会自动处理这些事情。如果要创建自己的实例,就会创建一个不必要的副本,但这并没有害处。6加载驱动程序之后,就可用于创建DBMS连接。(2)创建连接创建连接的第二步是使用合适的驱动程序连接到DBMS。如下代码行示范了一般的用法:Connectioncon=DriverManager.getConnection(url,myLogin,myPassword);该向url提供什么?如果使用JDBC-ODBCBridge驱动程序,JDBCURL将以jdbc:odbc:开始。URL的其余部分一般是数据源名称或数据库系统。因此,假设您要用ODBC访问称为Fred的ODBC数据源,您的JDBCURL可能就是jdbc:odbc:Fred。在myLogin处,输入要登录到DBMS的用户名称;在7myPassowrd处,输入DBMS的用户密码。假设使用登录名Fernanda、密码J8登录到DBMS,只要用如下两行代码即可建立连接:Stringurl=jdbc:odbc:Fred;Connectioncon=DriverManager.getConnection(url,Fernanda,J8);如果使用第三方开发的JDBC驱动程序,文档会告诉您使用的子协议,也就是在JDBCURL中放在jdbc:之后的东西。例如,假设驱动程序开发人员将名称acme注册为子协议,JDBCURL的第一、二部分将会是jdbc:acme:。驱动程序文档也将给出JDBCURL其余部分的说明。JDBCURL最后一部分提供了标识数据源的信息。如果加载的驱动程序之一识别了提供给方法DriverManger.getConnection的JDBCURL,那个驱动程序将建立到JDBCURL指定的DBMS的连接。8DriverManager类在幕后处理建立连接的各种细节。除非您自己编写驱动程序,否则就不会用到接口Driver中的任何方法,您真正需要知道的唯一一个DriverManager方法是DriverManager.getConnection。方法DriverManager.getConnection返回的连接是一个开放连接,可用于创建JDBC语句,将SQL语句传递给DBMS。在前面的例子中,con是一个开放连接。以下代码是通常情况下用驱动程序(例如JDBC-ODBC桥驱动程序)建立连接所需所有步骤的示例:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);//加载驱动程序Stringurl=jdbc:odbc:db2006_odbc;DriverManager.getConnection(url,userID,passwd);9一个完整的简单实例(JBuilderCode:JDBC)importjava.sql.*;publicclassSybaseTest{//JDBC连接参数privatefinalStringsybaseDriverName=com.sybase.jdbc2.jdbc.SybDriver;privatefinalStringsybaseUrlToConnect=jdbc:sybase:Tds:WAN:5000/db2006?charset=eucgb&jconnect_version=2;/*ODBC连接参数:privatefinalStringsybaseDriverName=sun.jdbc.odbc.JdbcOdbcDriver;privatefinalStringsybaseUrlToConnect=jdbc:odbc:db2006_odbc;*/privateConnectionmyConnection=null;10publicSybaseTest(){try{//取得所配置的SybaseJDBC类库在运行时的类库名Class.forName(sybaseDriverName);}catch(ClassNotFoundExceptionex){System.out.println(getErrorMessage(ex,数据库驱动加载错误!).toString());}}publicStringBuffergetErrorMessage(Exceptionex,StringalarmMessage){StringBuffererrorStringBuffer=newStringBuffer();errorStringBuffer.append(alarmMessage);errorStringBuffer.append(ex.getMessage());returnerrorStringBuffer;}publicConnectiongetConnection(){11try{this.myConnection=DriverManager.getConnection(sybaseUrlToConnect,sa,);}catch(Exceptionex){System.out.println(getErrorMessage(ex,数据库连接失败!).toString());}returnthis.myConnection;}publicstaticvoidmain(String[]args){SybaseTestmySybaseTest=newSybaseTest();try{ConnectionmyConnection=mySybaseTest.getConnection();System.out.println(现在开始执行查询,请稍候.......);PreparedStatementmyPreparedStatement=12myConnection.prepareStatement(select*fromspp);ResultSetmyResultSet=myPreparedStatement.executeQuery();StringBuffermyStringBuffer=newStringBuffer();while(myResultSet.next()){myStringBuffer.append(myResultSet.getInt(1)+);myStringBuffer.append(myResultSet.getString(2)+);myStringBuffer.append(myResultSet.getString(3)+);myStringBuffer.append(myResultSet.getString(4)+);myStringBuffer.append(myResultSet.getInt(5)+);myStringBuffer.append(myResultSet.getInt(6)+\n);}System.out.println(newString(myStringBuffer.toString().getBytes(UTF8),UTF8));}catch(Exceptionex){System.out.println(mySybaseTest.getErrorMessage(ex,13应用程序错误!).toString());}}}Statement对象Statement对象用于将SQL语句发送到数据库中。共有三种statement对象,它们都作为在给定的连接上执行SQL语句的包容器:statement:用于执行不带参数的简单的SQL语句,它提供了执行语句和获取结果的基本方法。preparedStatement:从statement继承而来,用于执行带或不带IN参数的预编译SQL语句。callableStatement:从preparedStatement继承而来,用于执行对数据库已保存的存储过程的调用,它含有处理OUT参数的方法。141.创建Statement对象建立了到特定数据库的连接之后,就可用该连接发送SQL语句。Statement对象用Connection的方法createStatement创建,如下列代码段中所示:Connectioncon=DriverManager.getConnection(url,wan,);Statementstmt=con.createStatement();为了执行Statement对象,被发送到数据库的SQL语句将被作为参数提供给Statement的方法:ResultSetrs=stmt.executeQuery(SELECTprd_id,prd_name,prd_colorFROMproducts);2.使用Statement对象执行语句Statement接口提供了三种执行SQL语句的方法:15executeQueryexecuteUpdateexecute使用哪一个方法由SQL语句所产生的内容决定。方法executeQuery用于产生单个结果集的语句,例如SELECT语句。方法executeUpdate用于执行INSERT、UPDATE或DELETE语句以及SQLDDL(数据定义语言)语句,例如CREATETABLE和DROPTABLE。INSERT、UPDATE或DELETE语句的效果是修改表中零行或多行中的一列或多列。executeUpdate的返回值是一个整数,指示受影响的行16数(即更新计数)。对于CREATETABLE或DROPTABLE等不操作行的语句,executeUpdate的返回值总为零。方法execute用于执行返回多个结果集、多个更新计数或二者组合的语句。执行语句的所有方法都将关闭所调用的Statement对象的当前打开结果集(如果存在)。这意味着在重新执行Statement对象之前,需要完成对当前ResultSet对象的处理。提示:继承了Statement接口中所有方法的PreparedStatement接口都有自己的executeQuery、execu
本文标题:使用JDBC(JAVA)
链接地址:https://www.777doc.com/doc-1908411 .html