调用存储过程 笔记

前端之家收集整理的这篇文章主要介绍了调用存储过程 笔记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
操作就是把ResultSet打印到一个输出流。这是一个值得举例的很常用的例子,下面是调用同一个存储过程的另外一个方法实现:

  1. public class ProcessPoetDeaths{
  2.  
  3. public abstract void sendDeath(String name,int age);
  4.  
  5. }
  6.  
  7. static void mapEarlyDeaths(ProcessPoetDeaths mapper){
  8.  
  9. Connection con = null;
  10.  
  11. CallableStatement toesUp = null;
  12.  
  13. try {
  14.  
  15. con = ConnectionPool.getConnection();
  16.  
  17. con.setAutoCommit(false);
  18.  
  19. CallableStatement toesUp = connection.prepareCall("{ ? = call list_early_deaths () }");
  20.  
  21. toesUp.registerOutParameter(1,Types.OTHER);
  22.  
  23. toesUp.execute();
  24.  
  25. ResultSet rs = (ResultSet) toesUp.getObject(1);
  26.  
  27. while (rs.next()) {
  28.  
  29. String name = rs.getString(1);
  30.  
  31. int age = rs.getInt(2);
  32.  
  33. mapper.sendDeath(name,age);
  34.  
  35. }
  36.  
  37. rs.close();
  38.  
  39. } catch (sqlException e) { // We should protect these calls. toesUp.close();
  40.  
  41. con.close();
  42.  
  43. }
  44.  
  45. }

下面是调用该存储过程的Java方法,将结果输出到PrintWriter:

  1. PrintWriter:
  2.  
  3. static void sendEarlyDeaths(PrintWriter out){
  4.  
  5. Connection con = null;
  6.  
  7. CallableStatement toesUp = null;
  8.  
  9. try {
  10.  
  11. con = ConnectionPool.getConnection();
  12.  
  13. // Postgresql needs a transaction to do this... con.
  14.  
  15. setAutoCommit(false); // Setup the call.
  16.  
  17. CallableStatement toesUp = connection.prepareCall("{ ? = call list_early_deaths () }");
  18.  
  19. toesUp.registerOutParameter(1,Types.OTHER);
  20.  
  21. toesUp.execute();
  22.  
  23. ResultSet rs = (ResultSet) toesUp.getObject(1);
  24.  
  25. while (rs.next()) {
  26.  
  27. String name = rs.getString(1);
  28.  
  29. int age = rs.getInt(2);
  30.  
  31. out.println(name + " was " + age + " years old.");
  32.  
  33. }
  34.  
  35. rs.close();
  36.  
  37. }
  38.  
  39. catch (sqlException e) { // We should protect these calls. toesUp.close(); con.close();
  40.  
  41. }
  42.  
  43. }
  44.  
  45.  
  46.  


存储过程可以帮助你在代码中分离逻辑,这基本上总是有益的。这个分离的好处有:
1 快速创建应用,使用和应用一起改变和改善的数据库模式。
2 数据库模式可以在以后改变而不影响Java对象,当我们完成应用后,可以重新设计更好的模式。
3 存储过程通过更好的sql嵌入使得复杂的sql更容易理解。
4 编写存储过程比在Java中编写嵌入的sql拥有更好的工具--大部分编辑器都提供语法高亮!
5 存储过程可以在任何sql命令行中测试,这使得调试更加容易。

并不是所有的数据库支持存储过程,但是存在许多很棒的实现,包括免费/开源的和非免费的,所以移植并不是一个问题。Oracle、Postgresql和DB2都有类似的存储过程语言,并且有在线的社区很好地支持
存储过程工具很多,有像TOAD或TORA这样的编辑器、调试器和IDE,提供了编写、维护PL/sql或pl/pgsql的强大的环境。
存储过程确实增加了你的代码的开销,但是它们和大多数的应用服务器相比,开销小得多。如果你的代码复杂到需要使用DBMS,我建议整个采用存储过程的方式。


摘自:http://www.jb51.cc/article/p-ppktycqi-bko.html

猜你在找的Postgre SQL相关文章