JAVA学习--第17章 使用JDBC的高级特征创建应用程序.ppt

上传人:qwe****56 文档编号:70106318 上传时间:2023-01-16 格式:PPT 页数:40 大小:234.50KB
返回 下载 相关 举报
JAVA学习--第17章 使用JDBC的高级特征创建应用程序.ppt_第1页
第1页 / 共40页
JAVA学习--第17章 使用JDBC的高级特征创建应用程序.ppt_第2页
第2页 / 共40页
点击查看更多>>
资源描述

《JAVA学习--第17章 使用JDBC的高级特征创建应用程序.ppt》由会员分享,可在线阅读,更多相关《JAVA学习--第17章 使用JDBC的高级特征创建应用程序.ppt(40页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、江苏大学计算机学院江苏大学计算机学院Version 2.0第第第第1717章章章章 使用使用使用使用JDBCJDBC的高级特征创的高级特征创的高级特征创的高级特征创建应用程序建应用程序建应用程序建应用程序1江苏大学软件工程课程组江苏大学软件工程课程组使用 PreparedStatement 对象创建应用程序管理数据库事务执行批量更新在 JDBC 中创建并调用存储过程在 JDBC 中使用元数据目标目标2江苏大学软件工程课程组江苏大学软件工程课程组PreparedStatement 接口是从 Statement 接口派生的,并且在 java.sql 包中。PreparedStatement 对象:

2、使您能够将运行时参数传递给 SQL 语句以查询和修改表中的数据。由 JDBC 编译并准备一次。以后调用 PreparedStatement 对象不会重新编译 SQL 语句。帮助减少数据库服务器上的负载,因此提高了应用程序的性能。使用使用 PreparedStatement对象查询并修改数据对象查询并修改数据3江苏大学软件工程课程组江苏大学软件工程课程组PreparedStatement 接口继承以下方法,从 Statement 接口执行 SQL 语句:使您能够将运行时参数传递给 SQL 语句以查询和修改表中的数据。int executeUpdate():执行 SQL 语句、INSERT、UPD

3、ATE或 DELETE 并返回受影响的行数。boolean execute():执行 SQL 语句并返回布尔值。PreparedStatement 接口的方法接口的方法4江苏大学软件工程课程组江苏大学软件工程课程组Connection 对象的 prepareStatement()方法用于将参数化的查询提交给数据库。SQL 语句能够使用?符号作为占位符,在运行时由输入参数来替代。例如:stat=con.prepareStatement(SELECT*FROM score WHERE number=?);PreparedStatement 接口的方法(接口的方法(续续)5江苏大学软件工程课程组江苏

4、大学软件工程课程组每个?参数的值是通过调用适当的 setXXX()方法设置的,其中 xxx 是参数的数据类型,例如:stat.setString(1,“200306);ResultSet result=stat.executeQuery();PreparedStatement 接口的方法(接口的方法(续续)6江苏大学软件工程课程组江苏大学软件工程课程组以下代码段使用PreparedStatement 对象从标题表检索作者编写的书籍:String str=SELECT*FROM titles WHERE au_id=?;PreparedStatement ps=con.prepareStatem

5、ent(str);ps.setString(1,1001);ResultSet rs=ps.executeQuery();检检索行索行 TestPre.Java7江苏大学软件工程课程组江苏大学软件工程课程组以下代码段创建一个PreparedStatement 对象,通过在运行时传递作者的数据在 authors 表中插入一行:String str=INSERT INTO authors(au_id,au_fname,au_lname)VALUES(?,?,?);PreparedStatement ps=con.prepareStatement(str);ps.setString(1,1001);

6、ps.setString(2,Abraham);ps.setString(3,White);int rt=ps.executeUpdate();插入行插入行TestDML3.java8江苏大学软件工程课程组江苏大学软件工程课程组以下代码段使用 PreparedStatement 对象将 state 修改成 CA,在 authors 表中,CA 的 city 是 Oakland:String str=UPDATE authors SET state=?WHERE city=?;PreparedStatement ps=con.prepareStatement(str);ps.setString(

7、1,CA);ps.setString(2,Oakland);int rt=ps.executeUpdate();更新和更新和删删除行除行TestPS.java9江苏大学软件工程课程组江苏大学软件工程课程组以下代码段使用 PreparedStatement 对象,从 author 表中作者的姓是 Abraham 开始删除一行:String str=DELETE FROM authors WHERE au_fname=?;PreparedStatement ps=con.prepareStatement(str);ps.setString(1,Abraham);int rt=ps.executeU

8、pdate();更新和更新和删删除行(除行(续续)10江苏大学软件工程课程组江苏大学软件工程课程组事务:是一组一条或多条 SQL 语句,它们作为一个单元执行。仅当事务中的所有 SQL 语句成功执行后才完成。维护数据库中数据的一致性。管理数据管理数据库库事事务务11江苏大学软件工程课程组江苏大学软件工程课程组JDBC API 为事务管理提供支持。在JDBC 应用程序中,可以用两种方法提交数据库事务:隐式:Connection 对象使用自动提交方式隐式地执行 SQL 语句。显式:自动提交方式设置成 false 以显式地提交事务语句。将自动提交方式设置成 false 的方法调用是con.setAut

9、oCommit(false);管理数据管理数据库库事事务务(续续)12江苏大学软件工程课程组江苏大学软件工程课程组提交事务:commit()方法用来反映数据库中事务所作的更改。rollback()方法用于撤销最后一次提交操作之后数据库中所作的更改。您需要显式调用 commit()和 rollback()方法。关关联联数据数据库库事事务务(续续)TestTransaction.java13江苏大学软件工程课程组江苏大学软件工程课程组批量:是一组更新语句,它们被发送到数据库作为一个单元来执行。减少应用程序和数据库之间的网络调用。与单条 SQL 语句相比,它更加有效。执执行批量更新行批量更新14江苏

10、大学软件工程课程组江苏大学软件工程课程组在 JDBC 中执行批量更新:Statement 或 PreparedStatement 接口提供了以下方法来创建和执行批量的 SQL 语句:void addBatch():将 SQL 语句添加到一个批量。int executeBatch():将批量的 SQL 语句发送到数据库以进行处理并返回已更新的行的总数。.void clearBatch():从批量中除去 SQL 语句。执执行批量更新(行批量更新(续续)TestBatch.java15江苏大学软件工程课程组江苏大学软件工程课程组当创建了 Statement 对象来执行批量更新时,一个空的数组会与该对

11、象相关联。多条 SQL 语句可以添加到该空数组以作为一个批量来执行。在 JDBC 中使用批量更新时,您还需要使用setAutoCommit(false)禁用自动提交方式。executeBatch()方法返回一个整数数组,该数组存储更新计数值。更新计数是当处理批量中的 SQL 语句时受影响的行的总数。执执行批量更新(行批量更新(续续)16江苏大学软件工程课程组江苏大学软件工程课程组以下代码段创建批量的 SQL 语句:con.setAutoCommit(false);Statement stmt=con.createStatement();stmt.addBatch(INSERT INTO pro

12、duct(p_id,p_desc)VALUES(1001,Printer);stmt.addBatch(INSERT INTO product(p_id,p_desc)VALUES(1002,Scanner);批量中的 SQL 语句按照这些语句在批量中出现的顺序执行。执行批量 SQL 语句的方法调用是:int updcount=state.executeBatch();执执行批量更新(行批量更新(续续)17江苏大学软件工程课程组江苏大学软件工程课程组批量更新中的异常处理:批量更新操作会抛出两种类型的异常:SQLExceptionBatchUpdateExceptionBatchUpdateEx

13、ception 类是从SQLException 类派生的。执执行批量更新(行批量更新(续续)18江苏大学软件工程课程组江苏大学软件工程课程组访问数据库时如果发生了问题,则 JDBC API 方法 addBatch()或 executeBatch()会抛出 SQLException。当批量中的SQL语句由于以下原因不能执行时,会抛出 BatchUpdateException 异常:SQL 语句中有非法变量。不存在您要从中检索数据的数据库表。BatchUpdateException 使用更新计数数组来识别抛出异常的 SQL 语句。执执行批量更新(行批量更新(续续)19江苏大学软件工程课程组江苏大学

14、软件工程课程组java.sql 包提供 CallableStatement 接口,它包含各种方法,使你能够从数据库调用存储过程。CallableStatement 接口是从 PreparedStatement 接口派生的。创建存储过程:可以在 JDBC 应用程序中使用 CREATE PROCEDURE SQL 语句来创建。两种类型是:参数化非参数化在在 JDBC 中创建和调用存储过程中创建和调用存储过程20江苏大学软件工程课程组江苏大学软件工程课程组一个参数化的存储过程可以接受一个或多个参数。存储过程的参数可以是以下任何一种形式:IN:使用该参数可以将自变量传递给存储过程OUT:使用该参数可以

15、传递存储过程的返回值。INOUT:组合了 IN 和 OUT 参数的功能。INOUT 参数使您能够将自变量传递给存储过程,也可以使用该参数来存储存储过程的返回值。在在 JDBC 中创建和调用存储过程中创建和调用存储过程(续)续)21江苏大学软件工程课程组江苏大学软件工程课程组在在 JDBC 中创建和调用存储过程(续)中创建和调用存储过程(续)SQL create or replace procedure p(v_a in number,v_b number,v_ret out number,v_temp in out number)isbeginif(v_a v_b)thenv_ret:=v_a

16、;elsev_ret:=v_b;end if;v_temp:=v_temp+1;end;22江苏大学软件工程课程组江苏大学软件工程课程组不使用任何参数调用存储过程:Connection 接口提供 prepareCall()方法,使用该方法创建 CallableStatement 对象来调用存储过程。prepareCall()具有以下三种格式:CallableStatement prepareCall(String str)CallableStatement prepareCall(String str,int resSetType,int resSetConcurrency)CallableS

17、tatement prepareCall(String str,int resSetType,int resSetConcurrency,int resSetHoldability)不使用参数调用存储过程的语法是:call ;在在 JDBC 中创建和调用存储过程中创建和调用存储过程(续)续)23江苏大学软件工程课程组江苏大学软件工程课程组使用参数调用存储过程:SQL 转义语法是一种从关系数据库管理系统(RDBMS)中调用存储过程的标准方法,并且它独立于 RDBMS。有两种格式的 SQL 转义语法,一个包含结果参数,另一个不包含。SQL 转义语法的语法是:?=call ,.,在在 JDBC 中创

18、建和调用存储过程中创建和调用存储过程(续)续)24江苏大学软件工程课程组江苏大学软件工程课程组占位符用来表示过程调用中存储过程的 IN、OUT 和 INOUT 参数。使用参数调用存储过程的语法是:call(?);执行 CallableStatement 对象之前,要使用设置方法设置 IN 参数的值。设置 IN 参数值的语法是:.setInt();在在 JDBC 中创建和调用存储过程中创建和调用存储过程(续)续)25江苏大学软件工程课程组江苏大学软件工程课程组如果存储过程包含 OUT 和 INOUT 参数,则这些参数应该与相应的 JDBC 类型一起注册。registerOut()方法用来注册这些

19、参数。registerOut()方法的原型是:registerOut(int index,int stype)registerOut(int index,int stype,int scale)在在 JDBC JDBC 中创建和调用存储过程中创建和调用存储过程(续)续)26江苏大学软件工程课程组江苏大学软件工程课程组例子例子public class TestProc public static void main(String args)throws Exception Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connection conn=Dr

20、iverManager.getConnection(jdbc:odbc:sun,);CallableStatement cstmt=conn.prepareCall(call p(?,?,?,?);cstmt.registerOutParameter(3,Types.INTEGER);cstmt.registerOutParameter(4,Types.INTEGER);cstmt.setInt(1,3);cstmt.setInt(2,4);cstmt.setInt(4,5);cstmt.execute();System.out.println(cstmt.getInt(3);System.o

21、ut.println(cstmt.getInt(4);cstmt.close();conn.close();27江苏大学软件工程课程组江苏大学软件工程课程组元数据是有关数据的信息,如表的结构和属性。Employee 表的元数据包括以下信息:列名。每列的数据类型。约束在表列中输入数据值。JDBC API 提供以下两个元数据接口以检索有关数据库和结果集的信息:DatabaseMetaData 接口ResultSetMetaData 接口 在在 JDBC JDBC 中使用元数据中使用元数据28江苏大学软件工程课程组江苏大学软件工程课程组使用 DatabaseMetaData 接口:DatabaseM

22、etaData 接口提供一些方法,使您能够确定数据库或 RDBMS 的属性。使用 Connection 接口的 getMetaData()方法创建DatabaseMetaData 的对象。创建 DatabaseMetaData 接口的对象的方法调用是:DatabaseMetaData dm=con.getMetaData();在在 JDBC 中使用元数据(续)中使用元数据(续)29江苏大学软件工程课程组江苏大学软件工程课程组下表列出一些常用的 DatabaseMetaData 接口的方法:方法方法描述描述ResultSet getColumns(String catalog,String sc

23、hema,String table_name,String column_name)检索有关数据库表的列的信息,检索有关数据库表的列的信息,该数据库表在指定的分类中。该数据库表在指定的分类中。Connection getConnection()获取创建获取创建 DatabaseMetaData 对对象的数据库连接。象的数据库连接。String getDriverName()获取获取DatabaseMetaData 对象的对象的 JDBC 驱动程序的名称。驱动程序的名称。String getDriverVersion()获取获取 JDBC 驱动程序的版本。驱动程序的版本。在在 JDBC 中使用元

24、数据(续)中使用元数据(续)30江苏大学软件工程课程组江苏大学软件工程课程组DatabaseMetaData 接口的方法(续):方法方法描述描述ResultSet getPrimaryKeys(String catalog,String schema,String table)获取有关数据库表的主键信息。获取有关数据库表的主键信息。String getURL()获取数据库的获取数据库的 URL。boolean isReadOnly()返回布尔值,表明数据库是否是返回布尔值,表明数据库是否是只读的。只读的。boolean supportsSavepoints()返回布尔值,表明数据库是否支返回布

25、尔值,表明数据库是否支持持savepoints.在在 JDBC 中使用元数据(续)中使用元数据(续)31江苏大学软件工程课程组江苏大学软件工程课程组使用 ReultSetMetaData 接口:ReultSetMetaData 接口包含各种方法,使您能够在结果集中检索有关数据的信息。ResultSet 接口提供 getMetaData()方法来创建 ResultSetMetaData 接口的对象。创建 ResultSetMetaData 接口的方法调用是:ResultSetMetaData rm=rs.getMetaData();在在 JDBC 中使用元数据(续)中使用元数据(续)32江苏大学

26、软件工程课程组江苏大学软件工程课程组下表列出 ResultSetMetaData 接口的常用方法:方法方法描述描述int getColumnCount()返回一个整数值,表明返回一个整数值,表明 ResultSet 对象的列对象的列总数。总数。String getColumnLabel(int column_index)获取表列的标题,该列与作为参数传递给该获取表列的标题,该列与作为参数传递给该方法的索引相对应。方法的索引相对应。String getColumnName(int column_index)获取与作为参数传递给该方法的索引相对应获取与作为参数传递给该方法的索引相对应的表列的名称。

27、的表列的名称。int getColumnType(int column_index)获取与作为参数传递的索引相对应的获取与作为参数传递的索引相对应的 SQL 数数据类型的表列。据类型的表列。在在 JDBC 中使用元数据(续)中使用元数据(续)33江苏大学软件工程课程组江苏大学软件工程课程组ResultSetMetaData 接口的方法(续):方法方法描述描述String getTableName(int column_index)获取数据库表的名称,该表包含与作为参数获取数据库表的名称,该表包含与作为参数传递的索引相对应的列。传递的索引相对应的列。boolean isAutoIncrement

28、(int column_index)返回一个布尔值,表明与作为参数传递的索返回一个布尔值,表明与作为参数传递的索引相对应的表列是否会自动增加。引相对应的表列是否会自动增加。boolean isCaseSensitive(int column_index)返回一个布尔值,表明与作为参数而传递的返回一个布尔值,表明与作为参数而传递的索引相对应的列是否是区分大小写的。索引相对应的列是否是区分大小写的。在在 JDBC 中使用元数据(续)中使用元数据(续)34江苏大学软件工程课程组江苏大学软件工程课程组ResultSetMetaData 接口的方法(续):方法方法描述描述boolean isReadOn

29、ly(int column_index)返回一个布尔值,表明返回一个布尔值,表明 ResultSet 中中与作为参数而传递的索引相对应的列与作为参数而传递的索引相对应的列是否是只读的。是否是只读的。boolean isWritable(int column_index)返回一个布尔值,表明与作为参数而返回一个布尔值,表明与作为参数而传递的索引相对应的传递的索引相对应的 ResultSet 列是列是否是可更新的。否是可更新的。在在 JDBC 中使用元数据(续)中使用元数据(续)35江苏大学软件工程课程组江苏大学软件工程课程组在本节课中,您学习了:Connection 接口的 PreparedSt

30、atement 对象使您能够使用占位符将运行时参数传递给 SQL 语句。在单个 SQL 语句中可以有多个占位符。根据 SQL 语句中占位符的位置,索引值与每个占位符相关联。占位符存储分配给它的值,直到该值被明确更改了。事务是作为一个单元执行的一条或多条 SQL 语句的集合。仅当事务中的所有 SQL 语句成功执行后事务才完成。小结小结36江苏大学软件工程课程组江苏大学软件工程课程组如果 setAutoCommit()方法设置成 true,则在数据库中自动提交 SQL 语句执行的数据库操作。commit()方法反映数据库中由 SQL 语句所作的永久更改。rollback()方法用于撤销最后一次提交

31、操作之后执行的所有 SQL 操作的影响。批量是一组发送到数据库作为一个单元执行的更新语句。使用同一个 Connection 对象将批量作为单个请求发送到数据库。executeBatch()方法返回一个整数数组,该数组存储批量中成功执行的所有 SQL 语句的更新计数。更新计数是受每个 SQL 语句执行的数据库操作影响的数据库的行数。小结(续)小结(续)37江苏大学软件工程课程组江苏大学软件工程课程组批量更新操作可以抛出两种类型的异常 SQLException 和 BatchUpdateException。发生数据库访问问题时会抛出 SQLException,当在批量中执行返回 ResultSet

32、 对象的 SELECT 语句时,也会抛出 SQLException。由于访问指定表时发生问题或 SQL 语句中有非法变量而不能执行批量中的 SQL 语句时,抛出 BatchUpdateException 异常。CallableStatement 接口包含各种方法,使您能够从数据库调用存储过程。小结(续)小结(续)38江苏大学软件工程课程组江苏大学软件工程课程组存储过程的参数可以有三种形式:IN:将参数传递到存储过程OUT:传递存储过程的返回值。INOUT:使您能够将参数传递到存储过程。也可以用来传递存储过程的返回值。元数据是有关数据的信息,如表的结构和属性。JDBC API 提供两种元数据接口

33、来检索有关数据库和结果集DatabaseMetaData和ResultSetMetaData的信息。DatabaseMetaData 接口声明一些方法,这些方法使您能够确定数据库或 RDBMS 的属性。小结(续)小结(续)39江苏大学软件工程课程组江苏大学软件工程课程组小结(续)小结(续)ResultSetMetaData 接口声明一些方法,这些方法使您能够确定结果集中有关数据的信息。Connection 接口的 getMetaData()方法使您能够声明 DatabaseMetaData 接口的对象。ResultSet 接口的 getMetaData()方法使您能够创建 ResultSetMetaData 接口的实例。40

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com