0

我正在通过我编写的 java 程序运行一个大型数据集,以将数据从一种模式转换为另一种模式。该程序成功迁移了 97% 的记录,但未能迁移 3% 的记录。

3% 的失败率似乎是由于两种异常类型的组合,这两种异常类型似乎都发生在相同的记录中。每条失败的记录似乎都会在一个或多个字段上引发 Invalid Precision Value 异常,同时还会引发 COUNT Field Incorrect 异常。我知道这一点,因为我在每一行代码周围放置了 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 负责几乎所有 Invalid Precision Value 异常。每当抛出 Invalid Precision Value 时,strAgent 和 strTreatment 都为 null。但是,它们在不引发任何异常的其他记录中也经常为空。

可以简单地将 strAgent 和 strTreatment 都设置为 null 并将它们作为 null 值插入到目标数据库中。这样的解决方案将使我们能够保留其他变量的数据,为了简洁起见,我没有在上面列出。

4

0 回答 0