2011-07-21 98 views
0

Java應用程序向mysql插入數據使用加載數據infile查詢。在csv文件中,一些錯誤的格式化值,如缺少行,不正確的字段(整數值的字符串值)。如果文件上存在不正確的記錄(行),Java應用程序會拋出異常並且不會添加任何都會記錄更正的行。如果使用heidi sql程序(sql客戶端程序)對同一個文件執行相同的查詢,則添加所有記錄,甚至是不正確的行(對於缺少字段等,將null值)。我只想讓我的java應用程序像sql客戶端一樣行事,把所有行至少插入正確格式的行。java加載數據infile查詢丟棄錯誤行

謝謝。

SQL

load data infile '/a.txt' into table test_data fields terminated by ',' 

代碼片段

public void query(String query, Connection conn) throws SQLException { 

     PreparedStatement ps = null; 
     try { 
      ps = conn.prepareStatement(query); 
      ps.executeUpdate(); 
     } catch (MySQLTransactionRollbackException e) { 
      logger.error("", e); 
      throw new MySQLTransactionRollbackException(); 
     } catch (SQLException e) { 
      logger.error("", e); 
      throw new SQLException(e); 
     } finally { 

      if (ps != null) { 
       try { 
        ps.close(); 
       } catch (Exception e) { 
        logger.error("", e); 
       } 
      } 

      try { 
       conn.close(); 
      } catch (SQLException e) { 
       logger.error("", e); 
      } 

     } 
    } 

回答

0

忽略關鍵字是解決方案。

load data infile '/a.txt' **ignore** into table test_data fields terminated by ',' 
0

它不能放棄錯誤路線,因爲它們可能導致分析的整個file.With很好的算法是可以做到的失敗,但我不認爲將有100%的準確性。

0

忽視的是正確的,但是假如你需要知道的下跌記錄的詳細..

一個漫長而乏味的解決方案是轉儲文件後負荷和用提取物比較PK值從你的infile使用diff說。

雖然這不會將關鍵違規與參照完整性違規區分開來。