2011-10-04 30 views
1

我有一個表,其中一列是以分號分隔的元素的字符串。在每一行中都有K個元素。表1中有一個例子。MySQL從csv字符串提取數據並插入到第二個表中

我必須提取分號之間的值並將它們插入到每個元素都有其列的新表中,如表2所示。

我的第一種方法是在Java中創建一個例程來完成它(該數據庫已被我正在編寫的程序用於執行分析),但是有沒有一種方法僅在MySQL中執行? 我發現了這兩個例子(1,2),但我的問題有點不同。我正在考慮從第一個表中提取一組值並將其插入到第二個表中,但我不知道這是否可行。

任何建議高度讚賞,


Table1 
***************************** 
* ID * Col1     * 
***************************** 
* 1 * abc;def;ghi;lmn;opq * 
* 2 * agf;hdgk;jsud;  * 
* *      * 
* n * jd;l;qpekd;kdh;  * 
***************************** 

Table2 
***************************************** 
* ID * Col1 * Col2 * Col3 *  * ColK * 
***************************************** 
* 1 * abc * def * ghi *  *  * 
* 2 * agf * hdgk * jsud *  *  * 
* *  *  *  *  *  * 
* n * jd * l * qpekd*  *  * 
***************************************** 

1)Insert data from another table with a loop in mysql

2)mysql :: insert into table, data from another table?


不幸的是我不得不做在Java中的工作,我離開解決方案,如果有人會發現同樣的問題。但在如何做到這一點在MySQL的問題仍然是開放的

public void analyse_Logs(Connection as DB_Connection) { 
    String MySQL_String, messageString; 
    Long nInitial, nFinal, iRow; 

    try{ // begin try-catch for Query_Connection 
     this.checkConnection(); 
     Statement MySQL_Statement = DB_Connection.createStatement(); 

       try { // begin try-finally for Query_Statement 
        MySQL_String = "SELECT message FROM logs"; 
        ResultSet MySQL_ResultSet = MySQL_Statement.executeQuery(MySQL_String); 
        try { // begin try-finally for Query_ResultSet 

         iRow = Long.Valueof(0); 
         while (MySQL_ResultSet.next()) { 
          messageString = MySQL_ResultSet.getString("message"); //for each row, extract log message 
          this.logMessageAnalysis(iRow, messageString);   //call log analysis routine 
          iRow = iRow+1; 
         } 

        } finally { 
         try { MySQL_ResultSet.close(); } 
         catch (SQLException ex) { System.out.println("Error - " + ex.toString()); } 
        } // end try-finally for Query_ResultSet 

       } finally { 
        try { MySQL_Statement.close(); } 
        catch (SQLException ex) { System.out.println("Error - " + ex.toString()); } 
       } // end try finally for Query_Statement 

      } catch(SQLException ex) { 
        System.out.println("Error - " + ex.toString()); 
      } // end try-catch for Query_Connection 
} 

public void logMessageAnalysis(Long iRow, String logMessage, Connection DB_Connection){ 
    //split string in array 
    String inputArray[] = logMessage.split(";"); 
    String[] outputArray = new String[16]; 

    outputArray[0] = String.valueOf(iRow); 
    for(int i=1; i<inputArray.length; i=i+1){ 
     if (inputArray[i].length() > 45) { 
      inputArray[i] = inputArray[i].substring(0, 45); 
     } 
     outputArray[i] = inputArray[i]; 
    } 

    try{ // begin try-catch for Query_Connection 
     this.checkConnection(); 
     Statement MySQL_Statement = DB_Connection.createStatement(); 

     try { // begin try-finally for Query_Statement 
      String Query_String = "INSERT INTO logs_2 VALUES ('"; 

      for (int i=0; i<15; i=i+1) { 
       Query_String = Query_String + outputArray[i] + "','"; 
      } 

      Query_String = Query_String + outputArray[15] + "')"; 

      MySQL_Statement.executeUpdate(Query_String); 
     } finally { 
      try { MySQL_Statement.close(); } 
      catch (SQLException ex) { System.out.println("Error - " + ex.toString()); } 
     } // end try finally for Query_Statement 

    } catch(SQLException ex) { 
      System.out.println("Error - " + ex.toString()); 
    } // end try-catch for Query_Connection 

} 

回答

相關問題