JDBC(2)SUN的JDBC教程学习体会

5、使用预备语句

   PreparedStatement对象是包含一条预编译过的SQL语句。DBMS不必编译就可直接运行PreparedStatement的SQL语句。所以代替Statement对象一般会缩短执行时间。尽管paredStatement对象可用于不带参数的SQL语句,但在多数场合是用于带参数的SQL语句。其用法如下:

   String strUpdateSales="UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?";

   PreparedStatement updateSales = con.prepareStatement(strUpdateSales);
   updateSales.setInt(1, 75);//给上面的SQL语句的第一个问号付值
   updateSales.setString(2, "Colombian");//给上面的SQL语句的第二个问号付值
   updateSales.executeUpdate();//执行UPDATE COFFEES SET SALES = 75 WHERE COF_NAME LIKE ‘Colombian’
因此,可用该对象制作成模板实现一次构造多条带参数的SQL语句,简化编码。
 
6、executeUpdate方法的返回值
   executeQuery返回一个ResultSet对象,但executeUpdate返回的是一个整数值,指出了表中已更新的行数
如果executeUpdate的返回值为0表明如下两种情况:(1) 执行的语句是一不影响任何行的更新语句;(2) 执行的是一DLL语句。
 
 7、使用事务
   一个事务是作为一个单元执行的一组语句(一条或多条语句),因此它们要么全部执行,要么全部不执行。要让两条或更多条语句组成
一个事务就要禁用自动提交模式,具体用方法con.setAutoCommit(false);一旦禁用了自动提交模式,就没有SQL语句会提交了,
除非您显式调用con.commit()方法,实现提交事务。
   使用事务可以保持数据完整性。调用rollback方法可取消一个事务,将修改的任何数据返还到以前的值。如果在执行一个事务
中的一条或多条语句时得到了SQLException。就应该调用rollback方法取消事务,从头开始整个事务。一般要在catch块中调用
rollback,以避免可能使用不正确的数据。
 
8、检索警告
   SQLWarning对象是SQLException的子类,用于处理数据库访问警告。就像异常一样,警告并不终止程序的执行;它们只是提醒
用户——发生了一些未预料的事情。Connection对象、Statement对象(包括PreparedStatement和CallableStatement对象)
或ResultSet对象都会报告警告。这些类都有getWarnings方法,为查看调用对象报告的第一个警告,就必须调用该方法。如果
getWarnings返回一个警告,就可在其上调用SQLWarning方法getNextWarning取得其他警告。自动执行一条语句会清除前一条语句
的警告,因此警告不会迭加。但这也表明提取一条语句报告的警告必须在执行下一语句之前进行。
 
9、存储过程
   存储过程是一组SQL语句组成的逻辑单元,用于执行特定的任务。存储过程用于封装数据库服务器上执行的一组操作或查询。
存储过程可以编译,然后使用不同的参数和结果执行,这些参数和结果可以是输入、输出和输入/输出参数的任意组合。
   1)用SQL语句创建存储过程
   如下所示,其方法同其他的DDL语句相同:
   String createProcedure = "create procedure SHOW_SUPPLIERS " +
       "as " +"select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME " + 
       "from SUPPLIERS, COFFEES " +"where SUPPLIERS.SUP_ID = COFFEES.SUP_ID " +
       "order by SUP_NAME"; 
   Statement stmt = con.createStatement();
   stmt.executeUpdate(createProcedure);
   2)从JDBC调用存储过程
   第一步是创建一个CallableStatement对象。CallableStatement对象包含了存储过程的一个调用;但它不包含存储过程
本身。接着使用连接con创建了存储过程的一个调用。花括号内的那部分就是存储过程的转义语法。当驱动程序碰到
“{call SHOW_SUPPLIERS}”时,它将把这个转义语法转换成数据库使用的本地SQL,以调用call 后面的的存储过程。
如下所示:
   CallableStatement cs = con.prepareCall("{call SHOW_SUPPLIERS}"); 
   ResultSet rs = cs.executeQuery();
   注意,用于执行cs的方法是executeQuery,因为cs调用的存储过程包含一个查询,执行后产生一个结果集。如果存储过程
包含一条更新或一条DLL语句,那就要使用executeUpdate方法。但有时一个存储过程包含多条SQL语句,因而它产生的不只是
一个结果集、不只是一个更新计数或产生一些结果集和更新计数的组合。这样就有多个结果集,这时就应该使用execute方法
来执行CallableStatement。 CallableStatement类是PreparedStatement的子类,因此CallableStatement对象可与
PreparedStatement对象一样带有输入参数。此外,CallableStatement对象还可带输出参数或输入/输出参数。 
 
 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
Sun公司的示例程序可在http://java.sun.com/products/jdbc/codeExamples_3.0.zip 下载并阅读。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值