2013-01-01 34 views
-2

我有一個代碼:字符串在Java中

for(int i=0;i<fList.size();i++){ 
    String targets=""; 
    String values=""; 
    String sql="INSERT INTO "+tableName+"("+targets+") VALUES("+values+")"; 
    Map<Column, String> attrs=fList.get(i).getAttributes(); 
    for(int j=0;j<columns.size();j++){ 
     if(columns.get(j).getName().equalsIgnoreCase("kadnum")){ 
      targets=targets+"kadnum,"; 
      System.out.println("targets:"+targets); 
      values=values+attrs.get(columns.get(j))+","; 
      System.out.println("values:"+values); 
     } 
     if(columns.get(j).getName().equalsIgnoreCase("support_num")){ 
      targets=targets+"support_num"; 
      values=values+attrs.get(columns.get(j))+","; 
     } 
    } 
    System.out.println("sql="+sql); 
} 

,快出來放:

INSERT INTO parcels() VALUES() 

但如果ü改變System.out.println("sql="+sql);System.out.println("targets="+targets);我得到:targets=kadnum, 爲什麼SQL字符串不會改變?

+1

您有一個SQL注入漏洞。 – SLaks

+1

千萬不要這樣做。使用框架連接到你的db – iwein

+0

JDBC不能在db中插入? –

回答

2

你加入任何東西到targets字符串之前創建sql字符串。因此,在創建字符串sql時,targets字符串仍爲空。最後在末尾創建sql字符串以解決此問題。

1

將sql的聲明在println之前結束。

String sql="INSERT INTO "+tableName+"("+targets+") VALUES("+values+")"; 
System.out.println("sql="+sql); 
+0

所以我只會在我想使用它時才建立'sql'? –

+0

是的。此外,在多線程應用程序中使用'StringBuilder'或'StringBuffer'時,建議在對Java中的字符串進行concatenating時。 – Srinivas

+0

@KliverMax,只有當你有其他變量'targets'和'values'準備好時,你需要構造'sql',或者說我需要用所需的值初始化。 – Srinivas

0
String sql="INSERT INTO "+tableName+"("+targets+") VALUES("+values+")"; 

應該來略高於

System.out.println("sql="+sql);