ITPUB??ì3
ITPUB论坛 » Java web开发及框架技术 » 急,非常急,插入一批数据,只有最后一条数据库中显示?

新一届的微软MVP评选已经开始,欢迎各位推荐!

标题: 急,非常急,插入一批数据,只有最后一条数据库中显示?
  本主题由 yueliangdao0608 于 2008-6-5 16:11 移动 
离线 keri_syml
一般会员



精华贴数 0
个人空间 0
技术积分 298 (6591)
社区积分 0 (84058)
注册日期 2003-4-30
论坛徽章:0
      
      

发表于 2008-6-4 09:42 
急,非常急,插入一批数据,只有最后一条数据库中显示?

我用的是Mysql数据库,在Java中进行数据的插入更新,我的操作是每更新一条数据(事务)提交一下,然后再更新一条数据。可是当我如此连续更新N条数据,用SQLyog查看mysql数据库,却发现只有最后一条数据显示更新成功,前面的N-1条数据都没有更新。在这过程中不回报错。我的Java是这样写的:返回true表示成功。

        public boolean saveCpxx(UserLoginBean ulb, UserInputBean ui)
                throws SQLException
        {
                String nowDate=csInput.StrNow();
                Connection db = DbPool.getConnection();
                String cmd1 = "update z_cpbjxx set scpbm='"+ui.get("i_cpbm").trim()+"',sbjzt='04' where slcpbm='"+ui.get("i_lcpbm").trim()+"'";
                String cmd2 = "update z_cpjbxx set scpbm='"+ui.get("i_cpbm").trim()+"',scpmc='"+ui.get("i_cpbm").substring(0,8).trim()+"',"
                                         +"sbbbm='"+ui.get("i_bbbm").trim()+"',scpzt='02',szjrkrq='"+nowDate+"',szjrkczy='"+ulb.getUID()+"'"
                                         +" where slcpbm='" + ui.get("i_lcpbm") + "'";
                int f1=0;
                int f2=0;
                try{
                        Statement sql = db.createStatement();
                        db.setAutoCommit(false);
                        f1=sql.executeUpdate(cmd1);
                        f2=sql.executeUpdate(cmd2);
                        db.commit();
                        if(f1!=0&&f2!=0)
                    {
                            return true;
                    }
                    else
                    {
                            return false;
                    }
                }catch(Exception e){
                        e.printStackTrace();
                    try{
                            db.rollback();
                            return false;
                    }
                    catch(Exception ex)
                    {
                            ex.printStackTrace();
                    }
                        return false;
                }
                finally
                {
                        db.close();
                }


只看该作者    顶部
离线 jinguanding
Eugene


来自 上海
精华贴数 1
个人空间 70
技术积分 2401 (655)
社区积分 79 (3902)
注册日期 2007-3-29
论坛徽章:5
现任管理团队成员2008北京奥运纪念徽章:乒乓球2008北京奥运纪念徽章:柔道生肖徽章2007版:鼠ITPUB新首页上线纪念徽章 
      

发表于 2008-6-4 13:55 
我的操作是每更新一条数据(事务)提交一下,然后再更新一条数据。可是当我如此连续更新N条数据,用SQLyog查看mysql数据库,却发现只有最后一条数据显示更新成功,前面的N-1条数据都没有更新


对Java,我不懂,呵呵

                db.setAutoCommit(false);
                f1=sql.executeUpdate(cmd1);
                        f2=sql.executeUpdate(cmd2);
                        db.commit();

你使用的引擎支持事务吧,要是不 支持的也会执行的(也不会报错),建议你
每执行一次update后,立即执行下select row_count()
看是否更新到记录....从中找下问题吧


__________________
.....做人做事尽心尽力,做学问谦虚求根问底.......
......***寻MySQL方面的兼职***......
.....专业的综合布线、安防公司........................
......www.showgold.cn..............................
......上海亮金信息技术有限公司.......................
只看该作者    顶部
离线 sky000
一般会员



精华贴数 0
个人空间 0
技术积分 207 (9156)
社区积分 1 (34976)
注册日期 2004-3-3
论坛徽章:1
生肖徽章2007版:鸡     
      

发表于 2008-6-4 17:12 
你确定在循环更新的时候传入的对象不会都是最后那条记录么?

另外,在代码中建议时刻记住最后把statement也close掉


__________________
只看该作者    顶部
离线 ruian123456
One word one dream


精华贴数 1
个人空间 0
技术积分 443 (4387)
社区积分 16 (8558)
注册日期 2007-3-27
论坛徽章:1
2008北京奥运纪念徽章:举重     
      

发表于 2008-6-5 19:56 
同意楼上的意见


只看该作者    顶部
离线 albert_deng


来自 四川
精华贴数 0
个人空间 0
技术积分 161 (11372)
社区积分 16 (8582)
注册日期 2008-1-22
论坛徽章:0
      
      

发表于 2008-6-6 09:17 
建议把sql 输出来,这种情况一般不可能,除非你的sql 都是最后一条记录


__________________
珍爱生命、活在当下
只看该作者    顶部
离线 justforregister
SAP


精华贴数 1
个人空间 10
技术积分 41058 (18)
社区积分 11493 (135)
注册日期 2005-6-10
论坛徽章:86
开发板块每日发贴之星ERP板块每日发贴之星    
      

发表于 2008-6-6 23:22 
估计sql拼接出问题,


__________________
只看该作者    顶部
离线 horizon
消逝的地平线


精华贴数 1
个人空间 136
技术积分 6636 (197)
社区积分 22590 (56)
注册日期 2002-7-18
论坛徽章:48
NBA常规赛纪念章2008北京奥运纪念徽章:花样游泳2008北京奥运纪念徽章:射箭2008北京奥运纪念徽章:水球2008北京奥运纪念徽章:自行车2008年新春纪念徽章
操作系统板块每日发贴之星     

发表于 2008-6-6 23:54 
f1=sql.executeUpdate(cmd1);
                        f2=sql.executeUpdate(cmd2);
这样是不行地
你要用二个Statement变量
你执行了第一个,还未提交就执行第二个
所以第一条执行失效了
只有第二条更新数据有效


__________________
它可以让我冷静.
只看该作者    顶部
离线 Kenniu
中级会员


精华贴数 0
个人空间 9
技术积分 959 (1950)
社区积分 1903 (620)
注册日期 2002-11-29
论坛徽章:7
会员2006贡献徽章2008北京奥运纪念徽章:篮球    
      

发表于 2008-6-11 15:19 
Up楼上地...


__________________
只看该作者    顶部
离线 guguda1986
初级会员



精华贴数 0
个人空间 0
技术积分 3 (157292)
社区积分 0 (998210)
注册日期 2006-6-20
论坛徽章:0
      
      

发表于 2008-6-11 16:24 
是不是类的延迟问题啊,把类的lazy设成false试试


只看该作者    顶部
离线 flyraincn
初级会员



精华贴数 0
个人空间 0
技术积分 4 (152422)
社区积分 0 (1320178)
注册日期 2007-3-27
论坛徽章:0
      
      

发表于 2008-6-12 13:04 
批量更新用Batch不是更好

最严重的是使用拼接字符串


只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问