2013-08-21 103 views
0

我正在通過SQL查詢('SELECT_PROCESS_INITIAL_REQUEST')創建結果集,它基本上只是抓取了SQL數據庫表中的所有內容。如何將結果集數據轉儲到數據庫表

Statement stmt = conn.createStatement(); 
String sql = SQLDataAdaptor.SELECT_PROCESS_INITIAL_REQUEST; 
ResultSet rsRequest = stmt.executeQuery(sql); 

然後我想將該數據轉儲到與原始數據庫相同的表中,但在不同的數據庫中。我會怎麼做?

+0

使用2種不同'Connections',一個指向源數據庫和其他定位到目標數據庫,並使用批量插入來處理工作。無論如何,如果可以的話,最好使用像Pentaho這樣的ETL工具 –

+0

您應該執行類似於[this(using MySQL)]中給出的語句(http://www.tech-recipes.com/rx/) 1487 /複製一個存在的MySQL的表到一個新表/)。因爲你沒有修改任何數據。 –

回答

0

將它轉儲到另一個數據庫中意味着Java將不得不處理您的結果集。所以我很害怕你必須以編程的方式做到這一點。

想想「準備好的語句」,「添加批處理方法」,並且不要忘記每n條記錄執行插入操作。

0

使用的Java教程網站 - 的例子

public static void viewTable(Connection con, String dbName) 
throws SQLException { 

    //Modify this code according to 2nd database vendor and credentials- 
      String url = "jdbc:sqlserver://MYPC\\SQLEXPRESS;databaseName=MYDB;integratedSecurity=true"; 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      Connection conn2 = DriverManager.getConnection(url); 

    Statement stmt = null; 
    Statement insertStmt = null; 
    String query = "select COF_NAME, SUP_ID, PRICE, " + 
       "SALES, TOTAL " + 
       "from " + dbName + ".COFFEES"; 
    try { 
     stmt = con.createStatement(); 
     insertStmt = conn2.createStatement(); 
     ResultSet rs = stmt.executeQuery(query); 
     while (rs.next()) { 
      String coffeeName = rs.getString("COF_NAME"); 
      int supplierID = rs.getInt("SUP_ID"); 
      float price = rs.getFloat("PRICE"); 
      int sales = rs.getInt("SALES"); 
      int total = rs.getInt("TOTAL"); 

      String insertQuery = "INSERT INTO COFFEES (COF_NAME, SUP_ID, PRICE, sales, total) VALUES (coffeeName,supplierID, proce, sales, total); 

      try{ 
       insertStmt.execute(insertQuery); 

      }catch(SQLExeption e){ 
       e.printStackTrace(); 
      } 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } finally { 
     if (stmt != null) { stmt.close();} 
     if(insertStmt != null) {insertStmt.close();} 
    } 
} 
+0

你應該把負責連接的代碼放在循環之外,因爲在你的情況下,每一行都會建立一個新的連接到數據庫,這是巨大的! –

+0

@ alaeddine.nasri - 絕對!....感謝您指出! – Aniket

相關問題