解决方案 »
- HTTP Status 500 -
- java.lang.Exception: No tests found matching Method main
- 求大侠们“救命”啊!
- com.sun.jdi.InvocationException occurred invoking method.
- 求救,针对JPA的问题!
- JB2005 + WebLogic8.1部署问题,请各位指点
- 高分请求: 怎样将 oracle 的 blob 字段内容,读到 byte[] 数组中??
- 数组求和的问题(求帮忙)
- 为什么我的weblogic700\server\lib目录下没有weblogic_sp.jar?
- java垃圾收集日志 Allocation Failure
- 图形读取问题
- 急求帮助!怎样在jsp中用方法使前台显示出数据库中的某几条数据
String curFieldValue="xxx";//当前要插入到数据库中的关键字的字段值
String strQuerySql = "select crad_id from IOAS_CAPITALASSETS";
//从数据库中查询出该关键字的所有字段值,下面的方法ExecuteDataTable()封装数据库查询,并返回一个包含结果的DataTable
DataTable queryResultDT = DataBase.ExecuteDataTable(strQuerySql,DataBase.Config);
//利用DataTable的Select方法找出相同字段值的记录
DataRow[] dr= queryResultDT.Select("FnshChartNo ='"+curFieldValue+"'");//如果为整形等则不需要单引号
if (dr != null && dr.Length > 0)
{//当查询出来的行数组不为空,并且至少有一行,则说明数据库中已经存在该关键字的记录,不能插入
System.out.println("数据库中已经存在相同字段值的记录,不能插入");
return;
}
else
{
//执行插入等后续工作
}
我这样的方法行不行,有错的地方可以帮忙看下嘛?谢谢
NoNoNo,我是问数据库中的数据量大不大,而不是导入量。导入量越小,数据库数据量越大,这种情况下就越没有必要优化;
直接在insert失败的时候输出crad_id就行了。如果数据库表已有数据量很小,而导入量很大,才有优化必要;但你二楼代码不是我说的那个意思,你是每次导入一行数据前,去数据库里面做个查询,不过也能解决问题。我的原意是:
Result rs = stmt.executeQuest("select crad_id from IOAS_CAPITALASSETS");
HastSet ids = new HashSet();
while (rs.next()) ids.add(rs.getString(1)); // 这样就把所有id都拿到了。
后面处理Excel记录时可以直接判断:
if (ids.contains(xxxooo)) continue; // 跳过该行的导入
不过总的来说,我还是觉得,每次只导入30行,没必要特殊处理,就判断insert失败的时候,提示下就行了。
那如果导入文件里本身就用重复的crad_id呢?总不能插入每一条之前都就重新查询数据库吧。
最好catch下,如果返回的是主键冲突的key值,就输出“该条数据信息已经存在”,然后continue执行。