ResultSet rs = (ResultSet) getResults getObject( );while (rs next()){ String name = rs getString( ); int age = rs getInt( ); out println(name + was + age + years old );}rs close(); } catch (SQLException e) {// We should protect these calls toesUp close();con close(); }}
因为JDBC并不直接支持从存储过程中返回游标 我们使用Types OTHER来指示存储过程的返回类型 然后调用getObject()方法并对返回值进行强制类型转换
这个调用存储过程的Java方法是mapping的一个好例子 Mapping是对一个集上的操作进行抽象的方法 不是在这个过程上返回一个集 我们可以把操作传送进去执行 本例中 操作就是把ResultSet打印到一个输出流 这是一个值得举例的很常用的例子 下面是调用同一个存储过程的另外一个方法实现
public class ProcessPoetDeaths{ public abstract void sendDeath(String name int age);}
static void mapEarlyDeaths(ProcessPoetDeaths mapper){ Connection con = null; CallableStatement toesUp = null; try {con = ConnectionPool getConnection();con setAutoCommit(false);
CallableStatement toesUp= connection prepareCall( { ? = call list_early_deaths () } );toesUp registerOutParameter( Types OTHER);getResults execute();
ResultSet rs = (ResultSet) getResults getObject( );while (rs next()){ String name = rs getString( ); int age = rs getInt( ); mapper sendDeath(name age);}rs close(); } catch (SQLException e) {// We should protect these calls toesUp close();con close(); }}
这允许在ResultSet数据上执行任意的处理 而不需要改变或者复制获取ResultSet的方法
static void sendEarlyDeaths(final PrintWriter out){ ProcessPoetDeaths myMapper = new ProcessPoetDeaths() {public void sendDeath(String name int age){ out println(name + was + age + years old );} }; mapEarlyDeaths(myMapper);}
这个方法使用ProcessPoetDeaths的一个匿名实例调用mapEarlyDeaths 该实例拥有sendDeath方法的一个实现 和我们上面的例子一样的方式把结果写入到输出流 当然 这个技巧并不是存储过程特有的 但是和存储过程中返回的ResultSet结合使用 是一个非常强大的工具
结论
存储过程可以帮助你在代码中分离逻辑 这基本上总是有益的 这个分离的好处有
快速创建应用 使用和应用一起改变和改善的数据库模式
数据库模式可以在以后改变而不影响Java对象 当我们完成应用后 可以重新设计更好的模式
存储过程通过更好的SQL嵌入使得复杂的SQL更容易理解
编写存储过程比在Java中编写嵌入的SQL拥有更好的工具——大部分编辑器都提供语法高亮!
存储过程可以在任何SQL命令行中测试 这使得调试更加容易
并不是所有的数据库都支持存储过程 但是存在许多很棒的实现 包括免费/开源的和非免费的 所以移植并不是一个问题 Oracle PostgreSQL和DB 都有类似的存储过程语言 并且有在线的社区很好地支持
存储过程工具很多 有像TOAD或TORA这样的编辑器 调试器和IDE 提供了编写 维护PL/SQL或pl/pgsql的强大的环境
lishixinzhi/Article/program/Java/hx/201311/25906
关于java代码用数据库存储和用java写数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- sap中810是什么意思,sap中ab08
- c语言加减乘除代码用if语句,c语言加减乘除代码怎么写
- 联通dns江苏服务器,江苏DNS首选服务器
- win7全屏游戏弹回桌面,win7玩游戏弹出桌面
- linux命令中出现>> linux命令ll显示的内容
- 平果手机id怎么登录,苹果手机的appleid怎么登录
- cgis相交,gis中相交
- 冒险岛2游戏网名,冒险岛好听的两字名字
- c语言中的exec族函数 ex c语言