2014-10-09 101 views
0

我想用一組數值列表中的一組值來構建一條SQL語句。我會從頭開始。java打印出陣列列表來建立一個sql sting

定義我的ArrayList

ArrayList<String[]> myRecords = new ArrayList<String[]>(); 

定義我的數組字符串:

String[] record = new String[2]; 

然後我循環,雖然一個文件,並拆分上逗號和記錄添加到myRecords

while(scan.hasNext()) 
     { 
      record = scan.nextLine().split(","); 
      myRecords.add(record); 
     } 

所以現在我需要創建一個SQL導入語句並在arraylist中使用thoes值。例如。

String sql = "insert into table (parm1, parm2) Values "; 

現在我想循環雖然陣列,並把填寫參數1 & param2的。

for(String[] list : myRecords) 
    { 
     sqlString +=("("); 
     for(String list1 : list) 
     { 
      sqlString +=("'"+ list1+ "',"); 
     } 
     sqlString+=("),"); 
    } 
     sqlString += ';'; 

    logger.info(sqlString); 

現在的問題是,當我打印出它看起來像這樣的SQL字符串。

insert into table (parm1, parm2) Values ('value1','value2',),('value3','value4',),; 

等等等等。

所以問題是在value2和value4的末尾有一個額外的逗號。之前的最後一個托架;我已經切換它等,但我似乎無法弄清楚如何我可以得到一個正確的格式化的SQL字符串。

這是它應該看起來。

insert into table (parm1, parm2) Values ('value1','value2'),('value3','value4'); 

也許這是我形成我的循環的方式。任何建議都會很棒!

+1

我建議看在[PreparedStatement](http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html)。假設你最終將這個SQL應用到數據庫中,它可以讓你用很少的代碼完成你想要實現的內容。 – Grice 2014-10-09 18:55:34

回答

1

添加一個計數器並將其初始化爲0,在添加一個值後遞增計數器。只有追加逗號當計數器大於0

int recCount = 0; 
for(String[] list : myRecords) 
{ 
    if (recCount > 0) 
    { 
     sqlString += ","; 
    } 
    sqlString +=("("); 
    int count = 0 
    for(String list1 : list) 
    { 
     if (count > 0) 
     { 
      sqlString += ","; 
     } 
     sqlString += "'"+ list1+ "'"; 
     count++; 
    } 
    sqlString+=(")"); 
    recCount++; 
} 
一般

構建SQL字符串不是一個偉大的想法,是一個重大的安全隱患

+0

這一個似乎工作最好。唯一的問題是在最後有一個額外的逗號。所以它),;這是一個無效的sql語句。我如何擺脫最後的額外逗號 – user1158745 2014-10-09 19:57:38

+0

O,我看到問題......你需要另一個標誌高於 – Leon 2014-10-09 20:14:22

+0

你看過@ jean-logeart解決方案嗎?他使用布爾標誌而不是計數器。 – Leon 2014-10-09 20:17:14

1

簡單:

boolean first = true; 
for(String[] list : myRecords) { 
    if(first) { 
     first = false; 
    } else { 
     sqlString += ','; 
    } 
    sqlString +=("("); 
    for(String list1 : list) { 
     sqlString +=("'"+ list1+ "',"); 
    } 
    sqlString+=(")"); // no more "'" 
} 
sqlString += ';'; 
+0

我對這個問題有',),'(當它應該是'),('和在聲明結尾時顯示爲');何時應該是'); – user1158745 2014-10-09 20:04:06