插入大量数据其中一条记录出现异常导致其它语句不执行

zjlgigi 2008-10-08 04:53:42
各位高手,

小弟有如下语句:

//插入大量数据

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").
newInstance();
conn = DriverManager.getConnection(str_url, str_user, str_password);

//conn.setAutoCommit(false); //prepare for the commit

stmt = conn.createStatement();

int i = 0 ;
String[] sql = new String[list.size()];

//Just for insert
while (listit.hasNext())
{
OProduct op = (OProduct) listit.next() ;
sql[i] = " insert into t_product 。。。。。。。)" ;

stmt.executeUpdate(sql[i]);
i++ ;
}

在正常的情况是可以运行的,但是对于部份已插入的数据已存在 t_product 表中,由于主键的原因,导致程序抛出异常,但是我现在想他继续运行,把余下的记录都插入到表中,不知道有什么解决的方法?谢谢!

Carlos
...全文
287 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
DiscussQuestions 2008-10-09
  • 打赏
  • 举报
回复
你做一个异常处理就好了,捕获到异常的时候就不去处理,
让它继续插入不就好了嘛!~!
dujun3245350 2008-10-09
  • 打赏
  • 举报
回复
接分
jinsu_st 2008-10-08
  • 打赏
  • 举报
回复
捕获异常不就完了么?
zjlgigi 2008-10-08
  • 打赏
  • 举报
回复
想到另一个办法 :

sql[i] = " if exists (select pcode from t_product where pcode='"+op.pcode+"') begin insert into t_product (pcode,faccode,pdesc1,pdesc2,baseum,oldpcode,picture,phierarchy,matlgrp,gweight,nweight,weightum,volume,volumeum,crtdate,chgdate,ctrlactive)"+
" values ( '"+op.pcode+"','"+op.faccode+"','"+op.pdesc1+"','"+op.pdesc2+"','"+op.baseum+"','"+op.oldpcode+"','"+op.picture+"','"+op.phierarchy+"','"+op.matlgrp+"',"+op.gweight+","+op.nweight+",'"+op.weightum+"',"+op.volume+",'"+op.volumeum+"',getdate()"+",getdate(),1 )"+
" end " +
" else " +
" begin " +
" update t_product set faccode = '"+op.faccode+"',pdesc1='"+op.pdesc1+"',pdesc2='"+op.pdesc2+"',baseum='"+op.baseum+"',oldpcode='"+op.oldpcode+"',picture='"+op.picture+"',phierarchy='"+op.phierarchy+"',matlgrp='"+op.matlgrp+"',gweight="+op.gweight+",nweight="+op.nweight+",weightum='"+op.weightum+"',volume="+op.volume+",volumneum='"+op.volumeum+"',chgdate=getdate()"+
" where pcode = '"+op.pcode+"'" +
" end" ;
呵呵....

本人比较笨....
Landor2004 2008-10-08
  • 打赏
  • 举报
回复
try{
stmt.executeUpdate(sql[i]); ;
}catch(Exception e){
continue;
}
zjlgigi 2008-10-08
  • 打赏
  • 举报
回复
To xblue3 :

能具体一点吗?我是用SQL2000,你是指在SQL语句中加入SELECT语句检查记录是否存在?
还是额外多一条SELECT语句检查?

谢谢!!!
zjlgigi 2008-10-08
  • 打赏
  • 举报
回复
如果不用 hibernate 呢?
meadking 2008-10-08
  • 打赏
  • 举报
回复
3,每次insert的时候,select数据,判断数据库中是否有重复!
meadking 2008-10-08
  • 打赏
  • 举报
回复
1,用hibernate的merge
2,用抓住异常,进行处理,这样就继续跑下去啦
try{
stmt.executeUpdate(sql[i]);
}catch(Exception e){
out.print("重复数据");
}
3,每次insert的时候,select数据,判断!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧