2014-03-13 105 views
0

我需要在java中創建一個平面文件。在這個平面文件中,我寫了插入語句,其中數據來自oracle表。 以下是我的Java代碼從oracle導出表數據

stmtSQL="SELECT * FROM Table1"; 
resultSQL=null; 
resultSQL=myCreateStmt.executeQuery(stmtSQL); 
strSQLIns=""; 
while(resultSQL.next()) 
{ 
strSQLIns=strSQLIns+"INSERT INTO Table1 VALUES ('"; 
for(int iLoopCtr=0;iLoopCtr<27;iLoopCtr++) 
{ 
    if(iLoopCtr==26) 
     strSQLIns=strSQLIns+resultSQL.getString(iLoopCtr+1)+"'"; 
    else 
     strSQLIns=strSQLIns+resultSQL.getString(iLoopCtr+1)+"','"; 
} 
strSQLIns=strSQLIns+");\n"; 
} 

當我運行這段代碼系統生成這樣

INSERT INTO Table1 VALUES ('80896948  ','gMWcjDMPXox4LVyrXGw0Ok+4SQI='); 
INSERT INTO Table1 VALUES ('39454249  ','z+5fkcA+7wrZrF2455kngiTdYU4='); 
INSERT INTO Table1 VALUES ('52167960  ','+N55nru+ewwhKPJygW99T8yEQXg='); 

插入語句現在我不想使用while循環,使代碼生成上述INSERT語句。我想要一些快捷方式,所以我生成這種格式化的SQL查詢。

INSERT INTO Table1 (c1,c2) (SELECT '1', 'first row' FROM dual UNION SELECT '2', 'second row' FROM dual); 
+1

問題是什麼? –

+0

有沒有什麼辦法可以像這樣在一次運行中以格式化的方式提供表格的數據「INSERT INTO Table1(c1,c2)(SELECT'1','first row'FROM dual UNION SELECT'2','second row' FROM dual);「所以我們可以用單個插入語句插入多行。 – Prem

+0

@prem你解決了這個問題嗎? – quento

回答

0

如果你是在生產環境中:做你所需要的最快的方法是如果你有一個學術問題,使用導入/導出工具甲骨文給你

http://docs.oracle.com/cd/B10501_01/server.920/a96652/ch01.htm

或這樣做是爲了它:

你的程序是一個很好的開始。我會讀ResultSetMetadata,所以你可以從你的代碼中刪除這個神奇的'26'。只需將其全部存儲在List<String[]>中,然後通過在該列表上迭代來構建INSERT-SELECT命令。要注意的是例子是過於簡單化了,你會用一些問題上運行:

  • 隨着一些數據類型日期和數字,你就必須要額外小心,它們格式化爲正確的字符串
  • 隨着一些數據類型爲BLOB,您的想法不太可能工作
+0

我正在處理生產環境數據。我的代碼將生成如示例中所示的插入語句的長列表,但我想,是否有任何方法來創建格式化單插入語句與多個表中的表在oracle中。預期的例子顯示在第二個列表中。當文件被創建時,這些數據將被上傳到其他數據庫以遠程工作 – Prem