首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • [讨论]java调用存储过程苦恼的朋友们 [已结贴,结贴人:sunyujia]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 20:02:03 楼主
        我本身特别痛恨存储过程,但是迫于无奈不得不用,我觉得存储过程最恶心的地方就是:在sqlserver上写完了还要在oracle上重写一遍,恶心至极,还好可以通过工具自动生成但是还是需要手工整理一遍,其实还有一件很恶心的事情就是用java调用存储过程的时候不能保证统一性,因为oracle中的结果集返回形式和sqlserver并不相同,为了解决这个问题,我曾经在spring的基础上搞了个通用的写法,但是觉得依赖spring太麻烦而且还不够灵活于是本周末在jdbc的基础上重写了一个,因为尚且没用在项目中使用不知道是否有其他问题,比如某些情况还没用覆盖到,bug是必然有的了呵呵。
    如果大家有感兴趣的话,可以下回去看看,希望大家广开言论。如果有更好想法的朋友们,请分享出来,共同学习进步。分享快乐!

    详细介绍
    http://blog.csdn.net/sunyujia/archive/2008/05/18/2456325.aspx

    下载地址(源码,eclipse工程附依赖包,junit测试和两个库的sql脚本)
    http://download.csdn.net/source/459115

    下面是一个简单的调用示例
    Java code
    public void test1() { ProcedureResult result = getSimpleJdbcTemplate().execProcedure("过程名", new ProcedureCallBack() {//执行返回结果集的过程 public Object mapRow(ResultSet rs, int rowNum) throws SQLException { return new Pepole(rs.getString(1));//行结果集的封装 } public void registerParameter() throws SQLException { registerOutParameter(1, Types.INTEGER);//out型参数 setInt(2, 9);//过程的参数 addOracleCursor(3); addOracleCursor(4); } }); TestUtil.println(result); } public class ProcedureResult { private List rs = new ArrayList();//一个过程不止可以返回一个ResultSet,这个值是过程返回的n个结果集,其中的每个对象又是一个list(一个ResultSet处理后的集合) private List output = new ArrayList();//过程的out参数输出值 private Object value;//过程本身的返回值 略 }


    另外来者皆有分。
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 20:16:091楼 得分:4
    支持搂主的精神
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 20:16:252楼 得分:4
    学习了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yaray
    • 等级:
    发表于:2008-05-18 20:17:543楼 得分:4
    不建议过多使用存储过程。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 20:40:414楼 得分:0
    引用 3 楼 yaray 的回复:
    不建议过多使用存储过程。


    没办法公司以前是用dephi写的,目前我们公司有的产品同时使用hibernate,ibatis,jdbc,存储过程,自行研究的db解决方案。
    你说多郁闷呵呵。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 20:58:125楼 得分:4
    不错.支持lz的这种创新精神
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 21:10:366楼 得分:0
    可能受公司文化影响。
    其实重新发明轮子没啥好的,我从2006开始不断的发明轮子,到目前为止只有一个大轮子即将走向商业应用,其他的像这种小轮子没什么太大的价值。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • anqini
    • 等级:
    发表于:2008-05-18 21:17:227楼 得分:3
    孙哥,我帮你顶!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 21:32:168楼 得分:3
    做个游戏,要记录分数(排行榜),这个需要用到存储过程吗。
    这算不算是用到数据库呢??
      什么都不会,说的不对之处,多多见谅。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 21:51:429楼 得分:0
    不需要
    我日常编程的选择准则是:
    对于复杂查询来说最坏的情况使用存储过程(非查询可选余地就比较少了),如果函数就可以搞定就用函数,如果sql搞不定函数能搞定的,一般ibatis能搞定,如果ibatis能搞定又不想用的,hibernate能搞定,如果太easy了就用jdbc搞定。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • anqini
    • 等级:
    发表于:2008-05-18 21:56:3410楼 得分:3
    其实很佩服孙哥的!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 22:05:3911楼 得分:0
    有啥可佩服啊,我负责的一个项目现在遭遇大范围严重性能问题,尽半年的心血出了这么大问题,现在都晕死了。嗨。。。要不是周末家里施工本来打算去公司加班的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 22:11:1712楼 得分:3
    帮顶了,项目中没怎么用存储过程,学习下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 22:59:4413楼 得分:0
    我在这也散分,分少的可以去接接分。
    http://topic.csdn.net/u/20080518/22/5a21ffa0-1b72-4298-ab7f-24e096ff86de.html
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 23:08:3914楼 得分:3
    新人,不太明白,但是还是继续顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 23:53:5415楼 得分:3
    一切都是为了兼容!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-19 00:20:4016楼 得分:3
    不熟悉SQLSERVER
    想知道 JDBC是怎么处理存储过程返回的数据的
    用OUT参数返回 在java代码调用后是怎么取得返回数据?
    能简单的说下吗?谢谢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-19 21:19:0117楼 得分:0
    楼上的我文章里面贴出的代码里面已经写了噢,仔细看就会看到

    CallableStatement cstm = conn.prepareCall(sql);

    boolean results = cstm.execute();

    cstm.getObject(1)就可以取到第一个out参数返回的值
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 01:03:3018楼 得分:3
    哈哈 很活跃啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 02:15:2319楼 得分:3
    jf
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 05:06:4020楼 得分:3
    支持一个,对了,楼主你在我的QQ群里吗?不在的话联系我!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 13:39:4621楼 得分:3
    关注
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 15:40:1422楼 得分:3
    我们现在老师也在将JDBC怎么调用存储过程.不是很懂!
    向孙大哥学习了...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 15:58:3723楼 得分:3
    我们现在做的项目也在用存储过程!和楼主一样我对存储过程也不感冒!!o(∩_∩)o...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bcsx_
    • 等级:
    发表于:2008-05-21 16:28:4724楼 得分:3
    来此学习~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 16:51:1625楼 得分:3
    up up up up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 17:35:5326楼 得分:3
    支持
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 17:49:4427楼 得分:3
    有些同感,我们写的时候不光要写oracle,sqlserver还要写mysql,崩溃了,公司要求.....
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 19:24:0128楼 得分:0
    引用 20 楼 java2000_net 的回复:
    支持一个,对了,楼主你在我的QQ群里吗?不在的话联系我!


    我不在qq群,不过在你论坛里面注册了噢呵呵,你应该知道我是第一批会员,偶尔去看看不过不常登录。我一会给你私信吧。
    我不常开qq,没有上班闲聊的习惯,周末有时会上。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 22:55:3729楼 得分:3
    以前学习过存储过程,但是一直都很少用.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 23:04:3130楼 得分:3
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-22 10:29:1331楼 得分:3
    不太喜欢用,呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-22 13:11:5532楼 得分:3
    引用 3 楼 yaray 的回复:
    不建议过多使用存储过程。

    这个嘛,没有什么一定之规吧!
    要看具体的情况。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xql80329
    • 等级:
    发表于:2008-05-22 13:30:3233楼 得分:3
    引用 1 楼 jdlsfl 的回复:
    支持搂主的精神
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xql80329
    • 等级:
    发表于:2008-05-22 13:30:4134楼 得分:3
    引用 2 楼 jdlsfl 的回复:
    学习了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-22 13:42:0035楼 得分:0
    该回复于2008-05-22 15:43:33被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    <