《Java程序设计 14 JDBC》由会员分享,可在线阅读,更多相关《Java程序设计 14 JDBC(22页珍藏版)》请在金锄头文库上搜索。
1、第第1414章章 JDBCJDBC技术技术主要内容主要内容14.1 JDBC概述概述14.2 通过通过JDBC建立连接建立连接14.3了解数据库的信息了解数据库的信息14.4 查询数据库查询数据库14.5 检索结果集检索结果集14.6 更新数据库更新数据库14.7 JDBC案例案例14.1 JDBC14.1 JDBC概述概述将将Java语言和语言和Sql结合的一个很好的编程接结合的一个很好的编程接口。口。支持基本支持基本SQL功能的一个通用低层的应用功能的一个通用低层的应用程序编程接口,在不同的数据库功能模块程序编程接口,在不同的数据库功能模块上提供了一个统一的用户界面。上提供了一个统一的用户
2、界面。是为是为Java语言定义的一个语言定义的一个SQL调用级调用级(CLI)界面。)界面。SQLSQL语言语言SQL,Structured Query Language,结构化查询语言,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。除了 SQL 标准之外,大部分 SQL 数据库程序都拥有它们自己的私有扩展。如: T-SQL, PL/SQL使用使用Transact-SQL 查询及执行语句查询及执行语句查询:Select top 2 * from users where id=beamingorder by id更新:Update users se
3、t psw=123 where id=beaming插入:Insert into users (id,psw) values (abc,123)删除:Delete from users where id=abcJDBCJDBC的结构的结构Jdbc有两种接口,分别是面向开发人员的有两种接口,分别是面向开发人员的JDBC API和面向低层的和面向低层的JDBC Driver API,Java 应用程序JDBC APIJDBC ManagerJDBC Drvier APIJDBC-NetDriverJDBC-ODBCBridge DriverODBC andDB DriverDriver A Dri
4、ver BPulblishedprotocolProprietaryDatabase accessprotocol。JDBCJDBC的结构的结构JDBC API 是一系列的接口,他使得应用程序能够是一系列的接口,他使得应用程序能够进行数据库联接,执行进行数据库联接,执行SQL语句,并且得到返回语句,并且得到返回结果。结果。JDBC JDBC 的结构的结构Java.sql.DriverManager用来装载驱动程序,并且用来装载驱动程序,并且为创建新的数据库联接提供支持。为创建新的数据库联接提供支持。Java.sql.Connection完成对某一指定数据库的联接完成对某一指定数据库的联接Jav
5、a.sql.Statement在一个给定的连接中作为在一个给定的连接中作为SQL执行声明的容器,包含两个重要的子类。执行声明的容器,包含两个重要的子类。Java.sql.PreparedSatement用于执行预编译的sql声明Java.sql.CallableStatement用于执行数据库中存储过程的调用Java.sql.ResultSet取得取得SQL执行结果执行结果JDBC Driver interfaceJDBC Driver interface是面向驱动程序开发商的接口,每一个驱动程序都必须是面向驱动程序开发商的接口,每一个驱动程序都必须提供对于提供对于java.sql.Conne
6、ction, java.sql.Statement, java.sql.PreparedStatement , java.sql .ResultSet等主要接口的实现方法。Java.sql.DriverManager需要装载驱动程序时,每个驱动程需要装载驱动程序时,每个驱动程序需要提供一个能实现序需要提供一个能实现java.sql.Driver接口的类。接口的类。例如:sun.jdbc.odbc.JdbcOdbcDrivercom.microsoft.jdbc.sqlserver.SQLServerDriver JDBCJDBC驱动程序的类型驱动程序的类型Jdbc-odbc桥桥Native-a
7、pi partly java driver本地api驱动直接把jdbc调用转变为数据库的标准调用再去访问数据库 Net-protocol all-java Driver(Jdbc proxy)是一种完全利用Java编写的JDBC驱动,这种驱动程序将JDBC转换为与DBMS无关的网络协议,然后将这种协议通过网络服务器转换为DBMS协议。Native-protocol all-java driver是一种完全利用Java编写的JDBC驱动,这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。14.2 14.2 通过通过JDBCJDBC建立连接建立连接所有所有Jdbc程序的第一步都是
8、与数据库建立连接,得到一程序的第一步都是与数据库建立连接,得到一个个java.sql.Connection的对象,包括两个步骤:的对象,包括两个步骤:(1) 加载驱动程序加载驱动程序通过设置Java属性中的sql.driver来制定驱动程序列表。这个属性是一系列的用冒号隔开的Driver类的名称。驱动程序所在的包存在于驱动程序所在的包存在于构建路径构建路径。使用Class.forName()显式加载驱动程序。例如 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); 加载了sun公司提供的jdbcodbc桥驱动程序,在数据库连接时,DriverManag
9、er将试图使用此驱动程序;Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”); 加载SqlServer的驱动程序通过通过JDBCJDBC建立连接建立连接(2) 建立连接建立连接指定数据库连接的指定数据库连接的url,数据源的位置数据源的位置使用使用DriverManager.getConnection(url)例如:String url“jdbc:odbc:datasource”; 或者“jdbc:microsoft:sqlserver:/server_name:1433” Connection conn=DriverMa
10、nager.getConnection(url);或者:Connection conn=DriverManager.getConnection(String url , String user , String password)Connection con = DriverManager.getConnection (jdbc:microsoft:sqlserver:/localhost:1433; DatabaseName=学生学生“;,sa,123456);14.3 14.3 了解数据库中的信息了解数据库中的信息在和数据库建立连接后,就可以获得有关数据源在和数据库建立连接后,就可以获得有
11、关数据源的各种信息:表,列,数据类型,存储过程等。的各种信息:表,列,数据类型,存储过程等。这些信息通过这些信息通过DatabaseMetaData类的对象上实现类的对象上实现的。的。 DatabaseMetaData dbma=conn.getMetaData();DatabaseMetaDataDatabaseMetaData主要方法主要方法基本信息基本信息getURL();getUserName()isReadOnly()getDatabaseProduceName()j;getDriverName();getDriverVersion();其他其他getTables(),getColu
12、mns(),getIndexInfo();实例实例14.414.4查询数据库查询数据库 (Statement)(Statement)(1)创建创建StatementStatement stmt=conn.createStatement();(2)执行查询语句执行查询语句String sql=“select * from customer”ResultSet rs=stmt.executeQuery(sql);executeQuery()一般用于执行一个sql语句,返回一个结果集,execute()方法返回多个结果集,一个Statement对象在同一时间只能打开一个结果集,对第二个结果集的打开隐
13、含着对第一个结果集的关闭.(3)关闭关闭Statement stmt.close()查询数据库查询数据库 (PreparedStatement)(PreparedStatement)Statement对象在每次执行对象在每次执行sql语句时都将语语句时都将语句传给数据库,在多次执行同一个语句时句传给数据库,在多次执行同一个语句时,效率比较低效率比较低.可以使用可以使用PreparedStatement,使用数据库的使用数据库的预编译功能预编译功能,速度可以提高很多速度可以提高很多.PreparedStatement对象的对象的sql语句可以接受语句可以接受参数参数,每次执行时可以传递不同的参数
14、每次执行时可以传递不同的参数.查询数据库查询数据库 (PreparedStatement)(PreparedStatement)(1)创建创建String sql=“select * from customer where age=?”PreparedStatement pstmt=conn.prepareStatement(sql);(2)执行执行pstmt.setInt(1,30);/指定第1个参数值为30ResultSet=pstmt.executeQuery();(3)关闭关闭Pstmt.close();查询数据库查询数据库 (CallableStatement)(CallableSt
15、atement)用于执行存储过程用于执行存储过程(1)通过通过Connection的对象的的对象的prepareCall()创建一创建一个个CallableStatement对象对象,格式为:格式为: call procedureName, procedureName是存储过程名是存储过程名. CallableStatement cstmt=conn.prepareCall(“call Query1()”);(2)执行执行 ResultSet rs=cstmt.executeQuery();(3)关闭关闭 cstmt.close();14.5 14.5 检索结果集检索结果集ResultSet对
16、象包括一个由查询语句返回的一个表对象包括一个由查询语句返回的一个表,这个表中包含所有的查询结果,按照行和列进行这个表中包含所有的查询结果,按照行和列进行处理。处理。ResultSet对象维持一个指向当前行的指针对象维持一个指向当前行的指针.最初最初,这个指针指向第一行之前这个指针指向第一行之前.ResultSet类的类的next()方方法使这个指针移向下一行。法使这个指针移向下一行。 next方法的返回值是方法的返回值是一个一个boolean值值,若为若为true,则成功移向下一行。若则成功移向下一行。若返回返回false则没有下一行。则没有下一行。getXXX()方法可以从某一列中获得结果方
17、法可以从某一列中获得结果.其中其中XXX是是JDBC中的中的java数据类型数据类型.如如getInt(参数参数);需要指需要指定检索的列名或定检索的列名或index值(值(index从从1开始)开始)检索结果集检索结果集Statement stmt=conn.createStatement();String sql=“select a,b,c from mytable”;ResultSet rs=stmt.executeQuery(sql);While (rs.next()int i=rs.getInt(2); String s=rs.getString(“a”);byte b=rs.get
18、Bytes(3); int crow=rs.getrow()/获取当前行号获取当前行号14.6 14.6 更新数据库更新数据库包括修改包括修改,更新和删除记录更新和删除记录, 对应于数据库的对应于数据库的insert,update ,delete等等.对数据库的更新操作也是通过对数据库的更新操作也是通过Statement对象完成对象完成的的.不使用不使用executeQuery()方法方法,使用使用executeUpdate()方法方法.executeUpdate的返回值是它影响的记录的行数的返回值是它影响的记录的行数.更新数据库更新数据库String sql=“update Customer set address =Peking where lastname=Li”int i=Stmt.executeUpdate(sql)String sql=“update table3 set m=? Where x=?”;pstmt.setString(1,”test”);for(int i=0;i10;i+)pstmt.setInt(2,i);pstmt.executeUpdate();14.7 JDBC14.7 JDBC案例演示案例演示数据库查询案例数据库查询案例数据库更新案例数据库更新案例