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


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



精华贴数 0
个人空间 0
技术积分 298 (6472)
社区积分 0 (82961)
注册日期 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
技术积分 2338 (661)
社区积分 70 (4032)
注册日期 2007-3-29
论坛徽章:4
现任管理团队成员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()
看是否更新到记录....从中找下问题吧


__________________
.....做人做事尽心尽力,做学问谦虚求根问底.......

.....专业的综合布线、安防公司........................
......www.showgold.cn..............................
......上海亮金信息技术有限公司.......................
只看该作者    顶部
离线 sky000
一般会员



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

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

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


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


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

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


只看该作者    顶部
离线 albert_deng


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

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


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


精华贴数 1
个人空间 10
技术积分 37821 (19)
社区积分 9721 (155)
注册日期 2005-6-10
论坛徽章:242
现任管理团队成员ITPUB元老NBA2008季后赛纪念徽章欧洲冠军杯纪念徽章NBA常规赛纪念章管理团队2007贡献徽章
参与2007年甲骨文全球大会(中国上海)纪念ITPUB北京香山2007年会纪念徽章2008北京奥运纪念徽章:排球2008北京奥运纪念徽章:跳水2008北京奥运纪念徽章:摔跤2008北京奥运纪念徽章:游泳

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


__________________
Go to Hell
大家一起BS以下菠菜作弊者

| EPS2008          |        35201 | 2008-08-17 22:18:17     |
| missingsky       |        22300 | 2008-08-17 22:19:17     |
| wws8875          |        10000 | 2008-08-17 22:25:54     |
| renxiang         |        23332 | 2008-08-17 22:28:15     |
只看该作者    顶部
离线 horizon
消逝的地平线


精华贴数 1
个人空间 136
技术积分 6503 (193)
社区积分 22340 (53)
注册日期 2002-7-18
论坛徽章:48
NBA常规赛纪念章嫦娥2008北京奥运纪念徽章:自行车2008北京奥运纪念徽章:射箭2008年新春纪念徽章操作系统板块每日发贴之星
      

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


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


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

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


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



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

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


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



精华贴数 0
个人空间 0
技术积分 4 (149536)
社区积分 0 (1317603)
注册日期 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号 联系我们 法律顾问