JAVA学习使用JDBC的高级特征创建应用程序课件_第1页
JAVA学习使用JDBC的高级特征创建应用程序课件_第2页
JAVA学习使用JDBC的高级特征创建应用程序课件_第3页
JAVA学习使用JDBC的高级特征创建应用程序课件_第4页
JAVA学习使用JDBC的高级特征创建应用程序课件_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Page 1使用 PreparedStatement 对象创建应用程序管理数据库事务执行批量更新在 JDBC 中创建并调用存储过程在 JDBC 中使用元数据目标第1页,共39页。Page 2PreparedStatement 接口是从 Statement 接口派生的,并且在 java.sql 包中。PreparedStatement 对象:使您能够将运行时参数传递给 SQL 语句以查询和修改表中的数据。由 JDBC 编译并准备一次。以后调用 PreparedStatement 对象不会重新编译 SQL 语句。帮助减少数据库服务器上的负载,因此提高了应用程序的性能。 使用 PreparedSta

2、tement对象查询并修改数据第2页,共39页。Page 3PreparedStatement 接口继承以下方法,从 Statement 接口执行 SQL 语句:使您能够将运行时参数传递给 SQL 语句以查询和修改表中的数据。int executeUpdate():执行 SQL 语句、INSERT、UPDATE或 DELETE 并返回受影响的行数。boolean execute():执行 SQL 语句并返回布尔值。PreparedStatement 接口的方法第3页,共39页。Page 4Connection 对象的 prepareStatement() 方法用于将参数化的查询提交给数据库。S

3、QL 语句能够使用 ? 符号作为占位符,在运行时由输入参数来替代。例如: stat=con.prepareStatement(SELECT * FROM score WHERE number = ?); PreparedStatement 接口的方法(续)第4页,共39页。Page 5每个 ? 参数的值是通过调用适当的 setXXX() 方法设置的,其中 xxx 是参数的数据类型,例如: stat.setString(1,“200306); ResultSet result=stat.executeQuery(); PreparedStatement 接口的方法(续)第5页,共39页。Page

4、 6以下代码段使用PreparedStatement 对象从标题表检索作者编写的书籍: String str = SELECT * FROM titles WHERE au_id = ?; PreparedStatement ps= con.prepareStatement(str); ps.setString(1, 1001); ResultSet rs=ps.executeQuery(); 检索行 TestPre.Java第6页,共39页。Page 7以下代码段创建一个PreparedStatement 对象,通过在运行时传递作者的数据在 authors 表中插入一行: String st

5、r = INSERT INTO authors(au_id, au_fname, au_lname) VALUES (?, ?, ?); PreparedStatement ps = con.prepareStatement(str); ps.setString(1, 1001); ps.setString(2, Abraham); ps.setString(3, White); int rt=ps.executeUpdate(); 插入行TestDML3.java第7页,共39页。Page 8以下代码段使用 PreparedStatement 对象将 state 修改成 CA,在 autho

6、rs 表中,CA 的 city 是 Oakland:String str = UPDATE authors SET state= ? WHERE city= ? ;PreparedStatement ps = con.prepareStatement(str);ps.setString(1, CA);ps.setString(2, Oakland);int rt=ps.executeUpdate(); 更新和删除行TestPS.java第8页,共39页。Page 9以下代码段使用 PreparedStatement 对象,从 author 表中作者的姓是 Abraham 开始删除一行:Stri

7、ng str = DELETE FROM authors WHERE au_fname= ? ;PreparedStatement ps = con.prepareStatement(str);ps.setString(1, Abraham);int rt=ps.executeUpdate(); 更新和删除行(续)第9页,共39页。Page 10事务:是一组一条或多条 SQL 语句,它们作为一个单元执行。仅当事务中的所有 SQL 语句成功执行后才完成。维护数据库中数据的一致性。管理数据库事务第10页,共39页。Page 11JDBC API 为事务管理提供支持。在JDBC 应用程序中,可以用两

8、种方法提交数据库事务:隐式:Connection 对象使用自动提交方式隐式地执行 SQL 语句。显式:自动提交方式设置成 false 以显式地提交事务语句。将自动提交方式设置成 false 的方法调用是con.setAutoCommit(false);管理数据库事务(续)第11页,共39页。Page 12提交事务:commit() 方法用来反映数据库中事务所作的更改。rollback() 方法用于撤销最后一次提交操作之后数据库中所作的更改。您需要显式调用 commit() 和 rollback() 方法。关联数据库事务(续)TestTransaction.java第12页,共39页。Page

9、13批量:是一组更新语句,它们被发送到数据库作为一个单元来执行。减少应用程序和数据库之间的网络调用。与单条 SQL 语句相比,它更加有效。执行批量更新第13页,共39页。Page 14在 JDBC 中执行批量更新:Statement 或 PreparedStatement 接口提供了以下方法来创建和执行批量的 SQL 语句:void addBatch():将 SQL 语句添加到一个批量。int executeBatch():将批量的 SQL 语句发送到数据库以进行处理并返回已更新的行的总数。. void clearBatch():从批量中除去 SQL 语句。执行批量更新(续)TestBatch

10、.java第14页,共39页。Page 15当创建了 Statement 对象来执行批量更新时,一个空的数组会与该对象相关联。多条 SQL 语句可以添加到该空数组以作为一个批量来执行。在 JDBC 中使用批量更新时,您还需要使用setAutoCommit(false) 禁用自动提交方式。executeBatch() 方法返回一个整数数组,该数组存储更新计数值。更新计数是当处理批量中的 SQL 语句时受影响的行的总数。执行批量更新(续)第15页,共39页。Page 16以下代码段创建批量的 SQL 语句:con.setAutoCommit(false);Statement stmt=con.cr

11、eateStatement();stmt.addBatch(INSERT INTO product (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();执行批量更新(续)第16页,共39页。Page 17批量更新中的异常处理:批量更新操作会抛出两种类型的异常:SQL

12、ExceptionBatchUpdateExceptionBatchUpdateException 类是从SQLException 类派生的。 执行批量更新(续)第17页,共39页。Page 18访问数据库时如果发生了问题,则 JDBC API 方法 addBatch()或 executeBatch() 会抛出 SQLException。当批量中的SQL语句由于以下原因不能执行时,会抛出 BatchUpdateException 异常:SQL 语句中有非法变量。不存在您要从中检索数据的数据库表。BatchUpdateException 使用更新计数数组来识别抛出异常的 SQL 语句。执行批量更

13、新(续)第18页,共39页。Page 19java.sql 包提供 CallableStatement 接口,它包含各种方法,使你能够从数据库调用存储过程。CallableStatement 接口是从 PreparedStatement 接口派生的。创建存储过程:可以在 JDBC 应用程序中使用 CREATE PROCEDURE SQL 语句来创建。两种类型是:参数化非参数化在 JDBC 中创建和调用存储过程第19页,共39页。Page 20一个参数化的存储过程可以接受一个或多个参数。存储过程的参数可以是以下任何一种形式:IN:使用该参数可以将自变量传递给存储过程OUT:使用该参数可以传递存储

14、过程的返回值。INOUT:组合了 IN 和 OUT 参数的功能。INOUT 参数使您能够将自变量传递给存储过程,也可以使用该参数来存储存储过程的返回值。在 JDBC 中创建和调用存储过程 (续)第20页,共39页。Page 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;elsev_ret := v_b;end if;v_temp :=

15、 v_temp + 1;end; 第21页,共39页。Page 22不使用任何参数调用存储过程:Connection 接口提供 prepareCall() 方法,使用该方法创建 CallableStatement 对象来调用存储过程。prepareCall() 具有以下三种格式:CallableStatement prepareCall(String str) CallableStatement prepareCall(String str, int resSetType, int resSetConcurrency) CallableStatement prepareCall(String

16、str, int resSetType, int resSetConcurrency, int resSetHoldability) 不使用参数调用存储过程的语法是: call ; 在 JDBC 中创建和调用存储过程 (续)第22页,共39页。Page 23使用参数调用存储过程:SQL 转义语法是一种从关系数据库管理系统 (RDBMS) 中调用存储过程的标准方法,并且它独立于 RDBMS。有两种格式的 SQL 转义语法,一个包含结果参数,另一个不包含。SQL 转义语法的语法是:? = call , ., 在 JDBC 中创建和调用存储过程 (续)第23页,共39页。Page 24占位符用来表示

17、过程调用中存储过程的 IN、OUT 和 INOUT 参数。使用参数调用存储过程的语法是: call (?) ;执行 CallableStatement 对象之前,要使用设置方法设置 IN 参数的值。设置 IN 参数值的语法是: .setInt();在 JDBC 中创建和调用存储过程 (续)第24页,共39页。Page 25如果存储过程包含 OUT 和 INOUT 参数,则这些参数应该与相应的 JDBC 类型一起注册。registerOut() 方法用来注册这些参数。registerOut() 方法的原型是:registerOut(int index, int stype) registerOu

18、t(int index, int stype, int scale) 在 JDBC 中创建和调用存储过程 (续)第25页,共39页。Page 26例子public class TestProc public static void main(String args) throws Exception Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection conn = DriverManager.getConnection(jdbc:odbc:sun,);CallableStatement cstmt = conn.prepareCall

19、(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.out.println(cstmt.getInt(4);cstmt.close();conn.close(); 第26页,共39页。Page 27元

20、数据是有关数据的信息,如表的结构和属性。Employee 表的元数据包括以下信息:列名。每列的数据类型。约束在表列中输入数据值。JDBC API 提供以下两个元数据接口以检索有关数据库和结果集的信息:DatabaseMetaData 接口ResultSetMetaData 接口 在 JDBC 中使用元数据第27页,共39页。Page 28使用 DatabaseMetaData 接口: DatabaseMetaData 接口提供一些方法,使您能够确定数据库或 RDBMS 的属性。使用 Connection 接口的 getMetaData() 方法创建DatabaseMetaData 的对象。创建

21、 DatabaseMetaData 接口的对象的方法调用是: DatabaseMetaData dm=con.getMetaData();在 JDBC 中使用元数据(续)第28页,共39页。Page 29下表列出一些常用的 DatabaseMetaData 接口的方法:方法描述ResultSet getColumns(String catalog, String schema, String table_name, String column_name)检索有关数据库表的列的信息,该数据库表在指定的分类中。Connection getConnection()获取创建 DatabaseMetaD

22、ata 对象的数据库连接。String getDriverName()获取DatabaseMetaData 对象的 JDBC 驱动程序的名称。String getDriverVersion()获取 JDBC 驱动程序的版本。在 JDBC 中使用元数据(续)第29页,共39页。Page 30DatabaseMetaData 接口的方法(续):方法描述ResultSet getPrimaryKeys(String catalog, String schema, String table)获取有关数据库表的主键信息。String getURL()获取数据库的 URL。boolean isReadOn

23、ly()返回布尔值,表明数据库是否是只读的。boolean supportsSavepoints()返回布尔值,表明数据库是否支持savepoints.在 JDBC 中使用元数据(续)第30页,共39页。Page 31使用 ReultSetMetaData 接口:ReultSetMetaData 接口包含各种方法,使您能够在结果集中检索有关数据的信息。ResultSet 接口提供 getMetaData() 方法来创建 ResultSetMetaData 接口的对象。创建 ResultSetMetaData 接口的方法调用是:ResultSetMetaData rm=rs.getMetaDat

24、a(); 在 JDBC 中使用元数据(续)第31页,共39页。Page 32下表列出 ResultSetMetaData 接口的常用方法:方法描述int getColumnCount()返回一个整数值,表明 ResultSet 对象的列总数。String getColumnLabel(int column_index)获取表列的标题,该列与作为参数传递给该方法的索引相对应。String getColumnName(int column_index)获取与作为参数传递给该方法的索引相对应的表列的名称。int getColumnType(int column_index)获取与作为参数传递的索引相

25、对应的 SQL 数据类型的表列。在 JDBC 中使用元数据(续)第32页,共39页。Page 33ResultSetMetaData 接口的方法(续):方法描述String getTableName(int column_index)获取数据库表的名称,该表包含与作为参数传递的索引相对应的列。boolean isAutoIncrement(int column_index)返回一个布尔值,表明与作为参数传递的索引相对应的表列是否会自动增加。boolean isCaseSensitive(int column_index)返回一个布尔值,表明与作为参数而传递的索引相对应的列是否是区分大小写的。在

26、 JDBC 中使用元数据(续)第33页,共39页。Page 34ResultSetMetaData 接口的方法(续):方法描述boolean isReadOnly(int column_index)返回一个布尔值,表明 ResultSet 中与作为参数而传递的索引相对应的列是否是只读的。boolean isWritable(int column_index)返回一个布尔值,表明与作为参数而传递的索引相对应的 ResultSet 列是否是可更新的。在 JDBC 中使用元数据(续)第34页,共39页。Page 35在本节课中,您学习了:Connection 接口的 PreparedStatement 对象使您能够使用占位符将运行时参数传递给 SQL 语句。在单个 SQL 语句中可以有多个占位符。根据 SQL 语句中占位符的位置,索引值与每个占位符相关联。占位符存储分配给它的值,直到该值被明确更改了。事务是作为一个单元执行的一条或多条 SQL 语句的集合。仅当事务中的所有 SQL 语句成功执行后事务才完成。小结第35页,共39页。Page 36如果 setAutoCommit() 方法设置成 true,则在数据库中自动提交 SQL 语句执行的数据库操作。commit() 方法反映数据库中由 SQL 语句所作的永久更改。rollback() 方法用于撤

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论