使用JDBC 高级功能创建应用程序
课前评估
1.______________ 层表示通过JDBC API 与JDBC驱动程序交互的Java 应用程序。
a.JDBC 应用程序层
b.JDBC 驱动程序层
c.JDBC 驱动管理器层
d.JDBC API 层
2.JDBC __________是Java 应用程序用于访问数据库的软件。
a.驱动管理器
b.驱动程序
c.DSN
d.CLI
使用JDBC 高级功能创建应用程序
课前评估(续)
3.哪个JDBC 驱动程序扮演着JDBC 应用程序和ODBC 驱动程序之间接口的角色?
a.Native-API 部分Java 驱动程序
b.Native Protocol 纯Java 驱动程序
c.JDBC-ODBC 桥接驱动程序
d.JDBC-Net 纯Java 驱动程序
4.哪个JDBC 驱动程序将JDBC 调用映射为本机方法调用?哪些被传递到本地本机调用级
接口(CLI)??
a.Native-API 部分Java 驱动程序
b.JDBC-ODBC 桥接驱动程序
c.Native Protocol 纯Java 驱动程序
d.JDBC-Net 纯Java 驱动程序
使用JDBC 高级功能创建应用程序课前评估(续)
5.哪个接口可以建立Java 应用程序和数据库间的连接?
a.Statement接口
b.ResultSet接口
c.DriverManager接口
d.Connection接口
使用JDBC 高级功能创建应用程序课前评估答案
1. a. Java 应用程序层
2. b. 驱动程序
3. c. JDBC-ODBC 桥接驱动程序
4. a. Native-API 部分Java 驱动程序
5. d. Connection接口
使用JDBC 高级功能创建应用程序目标
在本节中,你将学习到:
?使用PreparedStatement对象创建应用程序
?管理数据库事务
?执行批处理更新
?在JDBC 中创建并调用存储过程
?在JDBC 中使用元数据
使用JDBC 高级功能创建应用程序
使用PreparedStatement 对象查询和修改数据
?PreparedStatement接口派生自Statement接口,位于java.sql包中。
?PreparedStatement 对象:
?可以传递运行时参数到SQL 语句以查询和修改表中数据。
?只需被JDBC 编译准备一次,以后调用PreparedStatement对象无需重新编译SQL 语句。
?帮助减少数据库服务器负荷,从而提高应用程序的性能。
使用JDBC 高级功能创建应用程序
使用PreparedStatement 对象查询和修改数据(续)
?PreparedStatement 接口的方法
?PreparedStatement接口继承以下方法来执行Statement接口中的SQL 语句:?ResultSet executeQuery(): 执行SELECT语句并返回ResultSet对象的结果。
?int executeUpdate(): 执行SQL 语句INSERT, UPDATE或DELETE并返回受影响的行数。
?boolean execute(): 执行SQL 语句并返回一个boolean值。
使用JDBC 高级功能创建应用程序
使用PreparedStatement 对象查询和修改数据(续)
?Connection对象的prepareStatement()方法用于向数据库提交参数化查询。
?SQL 语句可以包含‘?’这一占位符,在运行时可替换为输入参数。例如:
stat=con.prepareStatement("SELECT * FROM authors WHERE au_id
= ?");
?每个‘?’参数的值是通过调用相应的setXXX()方法设置的,其中XXX 是参数的数据类型。例如:
stat.setString(1,"1001");
ResultSet result=stat.executeQuery();
使用JDBC 高级功能创建应用程序
使用PreparedStatement 对象查询和修改数据(续)
?检索数据行
?以下是使用PreparedStatement 对象从titles表中检索某位作者所写的书的代码片断:
String str = "SELECT * FROM titles WHERE au_id = ?";
PreparedStatement ps= con.prepareStatement(str);
ps.setString(1, "1001");
ResultSet rs=ps.executeQuery();
使用JDBC 高级功能创建应用程序
使用PreparedStatement 对象查询和修改数据(续)
?插入数据行
?以下是通过在运行时传递作者数据,创建一个可向authors表插入数据行的PreparedStatement对象的代码片断:
String str = "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();
使用JDBC 高级功能创建应用程序
使用PreparedStatement 对象查询和修改数据(续)
?更新和删除数据行
?以下是使用PreparedStatement对象将authors表中city为Oakland改为CA 的代码片断:
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();
使用JDBC 高级功能创建应用程序
使用PreparedStatement 对象查询和修改数据(续)
?以下是使用PreparedStatement对象删除authors表中作者名为Abraham的数据行的代码片断:
String str = "DELETE FROM authors WHERE au_fname= ? ";
PreparedStatement ps = con.prepareStatement(str);
ps.setString(1, "Abraham");
int rt=ps.executeUpdate();
使用JDBC 高级功能创建应用程序
演示-使用PreparedStatement 对象创建应用程序
?问题陈述
?百货公司的管理人员决定要用程序来管理存货。你被要求创建产品信息应用程序,此程序要有交互式的用户界面,允许用户添加、更新和删除product表的产品信息。
使用JDBC 高级功能创建应用程序
演示-使用PreparedStatement 对象创建应用程序(续)
?问题陈述(续)
?应用程序的用户界面应按下图设计:
使用JDBC 高级功能创建应用程序
演示-使用PreparedStatement 对象创建应用程序(续)
?解决方案
?使用java.swing包创建应用程序的GUI。使用PreparedStatement对象执行数据库操作。
?要解决上述问题,需要执行以下任务:
1.编写应用程序。
2.编译并执行应用程序。
使用JDBC 高级功能创建应用程序
管理数据库事务
?事务:
?作为一个独立单元执行的一组一个或多个SQL 语句。
?只有成功地执行一个事务中所有SQL 语句时才算完成。
?可以保持数据库中数据的一致性。
使用JDBC 高级功能创建应用程序
管理数据库事务(续)
?JDBC API 支持事务管理。
?在JDBC 应用程序中有以下两种提交数据库事务的方法:
?隐式:Connection对象使用自动提交模式,隐式执行SQL 语句。
?显式:设置自动提交模式为否,从而显式提交事务语句。设置自动提交模式为否的方法调用为:
con.setAutoCommit(false);
使用JDBC 高级功能创建应用程序
管理数据库事务(续)
?提交事务
?commit()方法是用来反映数据库中事务所作的更改。
?rollback()方法是撤销最后一次提交操作后数据库的更改。
?需要显式调用commit()和rollback()方法。
使用JDBC 高级功能创建应用程序
执行批处理更新
?批处理:
?是一组传递到数据库中作为一个独立单元执行的更新语句。
?可减少应用程序和数据库间的网络调用。
?与一个单独SQL语句的处理相比更加有效。
使用JDBC 高级功能创建应用程序
执行批处理更新(续)
?在JDBC 中执行批处理更新
?Statement 或PreparedStatement 接口提供以下方法创建和执行批量SQL 语句:
?void addBatch(): 向批处理中添加SQL 语句。
?int executeBatch(): 向数据库发送批量SQL 语句进行处理并返回更新
的总行数。
?void clearBatch(): 从批处理中删除SQL 语句。