我通过我编写的java程序运行一个大型数据集,将数据从一个模式转换为另一个模式。该程序成功迁移了97%的记录,但无法迁移3%的记录。
3%的失败率似乎是由于两种异常类型的组合,这两种异常类型似乎都出现在同一记录中。每个失败的记录似乎在一个或多个字段上抛出无效精度值异常,同时抛出COUNT字段不正确的异常。我知道这是因为我在每行代码中放置了try catch块并计算结果。
有人可以告诉我如何处理这些例外,使其余3%的记录能够插入目标数据库吗?
以下是我的代码的相关概要:
try {
myPreparedStatememt = destinationConn.prepareStatement(
"INSERT INTO IntakeTable ("
+ "ClientNumber,Treatment,Agent)"
+ "VALUES (?, ?, ?)"
);
}
catch (Exception e) {e.printStackTrace();}
try {myPreparedStatememt.setInt(1, ClientNumber);} catch (Exception e) {e.printStackTrace();}
try {myPreparedStatememt.setString(2, strTreatment);}
catch (Exception e) {
System.out.println("ClientNumber, strTreatment are: "+ClientNumber+", "+strTreatment);
e.printStackTrace();}
try {myPreparedStatememt.setString(3, strAgent);}
catch (Exception e) {
System.out.println("ClientNumber, strAgent are: "+ClientNumber+","+strAgent);
e.printStackTrace();}
try {myPreparedStatememt.executeUpdate();}
catch (Exception e) {
System.out.println("ClientNumber is: "+ClientNumber);
e.printStackTrace();}
还有其他字段,但strAgent和strTreatment几乎负责所有无效精度值异常。无论何时抛出无效精度值,strAgent和strTreatment都为null。但是,在不抛出任何异常的其他记录中,它们通常也为null。
将strAgent和strTreatment都设置为null并将它们作为空值插入目标数据库是可以接受的。这样的解决方案将使我们能够保留来自上面未列出的其他变量的数据,以简洁起见。