日期:2014-05-19  浏览次数:20556 次

导入时需要判断重复的数据. 根据编号唯一判断.提示哪些编号导入失败,重复的不能导入.
import java.io.File;
import java.io.IOException;
  import jxl.Workbook;
import jxl.Sheet;
import jxl.Cell;
  import jxl.read.biff.BiffException;
public class ReadExcel {
public static void main(String[] args) throws Exception {
Workbook workbook=null;

try {
workbook = Workbook.getWorkbook(new File("D:\\abc.xls"));
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Sheet sheet=workbook.getSheet(0);
Cell[] cell=sheet.getRow(0);
StringBuffer s=new StringBuffer("");
s.append("insert into IOAS_CAPITALASS(crad_id,institutions_1,asset_category)values(");
int row=sheet.getRows();
for(int i=2;i<row;i++){
StringBuffer r=new StringBuffer(s);
Cell[] cell2=sheet.getRow(i);
for(int j=0;j<cell2.length;j++){
if(j<cell2.length-1){
r.append("'"+cell2[j].getContents().trim()+"',");
}else{
r.append("'"+cell2[j].getContents().trim()+"'");
}
  }
r.append(")");
 
System.out.println(r.toString());
//WorkConnection workconn=new WorkConnection();
//workconn.insert(r.toString());
 
}
}



}


这个是导入d盘下abc.xls,现在要判断导入的xls里是否有重复数据(重复数据通过crad_id判断),有的话把crad_id输出,代码应该怎么改,希望高手能说下。谢谢


------解决方案--------------------
目标表的数据量大么?如果不是很大,考虑先把所有crad_id选择出来,放入 Set 中,那么导入时就可以比对下再进行导入了。

如果数据量很大,就只能靠数据库关于crad_id的唯一索引来处理了;那么执行insert时要1条条执行,不要放在一个事务中。insert失败是可以利用返回值来判断的。
------解决方案--------------------
JDBC 在insert的时候提供的返回值的,根据返回值判断是否成功了
------解决方案--------------------
你的意思是导入文件里的crad_id和数据库的crad_id重复?那你可以这样处理。
那如果导入文件里本身就用重复的crad_id呢?总不能插入每一条之前都就重新查询数据库吧。
最好catch下,如果返回的是主键冲突的key值,就输出“该条数据信息已经存在”,然后continue执行。

探讨

我开始是这么想的,我的SQL语句是组装的嘛,在组装前,我先把数据库里面的crad_id的值都取出来,然后在for循环之后把这一条要插入的crad_id跟已有的crad_id比较,if相同就输出“该条数据信息已经存在”,else就执行插入语句。这样行不行?