2014-11-04 30 views
1

我有一個@符號分隔一個輸入字符串如如何動態地形成插入查詢在這種情況下

[email protected] 

我有如圖所示

mysql> desc document; 
+-----------------+-------------+------+-----+---------+----------------+ 
| Field   | Type  | Null | Key | Default | Extra   | 
+-----------------+-------------+------+-----+---------+----------------+ 
| document_id  | int(11)  | NO | PRI | NULL | auto_increment | 
| T1    | varchar(50) | YES |  | NULL |    | 
| T2    | varchar(50) | YES |  | NULL |    | 
| T3    | varchar(50) | YES |  | NULL |    | 
| T4    | varchar(50) | YES |  | NULL |    | 
| T5    | varchar(50) | YES |  | NULL |    | 
| T6    | varchar(50) | YES |  | NULL |    | 
| T7    | varchar(50) | YES |  | NULL |    | 
| T8    | varchar(50) | YES |  | NULL |    | 
| T9    | varchar(50) | YES |  | NULL |    | 
| T10    | varchar(50) | YES |  | NULL |    | 
| vendor_brand_id | varchar(10) | YES |  | NULL |    | 
| vendor_id  | varchar(10) | YES |  | NULL |    | 
+-----------------+-------------+------+-----+---------+----------------+ 

根據輸入我試圖表以形成如圖所示的插入查詢

String reqstr = "[email protected]" 

String valuess[] = reqstr.split("@"); 

if (valuess.length == 1) { 

sql = "Insert into document (T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,vendor_brand_id,vendor_id) values ('"+valuess[0]+"',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"+vendor_brand_id+","+vendor_id+") "; 

} 
else if (valuess.length == 2) { 

sql = "Insert into document (T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,vendor_brand_id,vendor_id) values ('"+valuess[0]+"','"+valuess[1]+"',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"+vendor_brand_id+","+vendor_id+") "; 

} 

// Upto length 10 

我的問題是,我該如何形成這種動態?

+0

你能否詳細說明。你需要動態地形成值部分嗎? – 2014-11-04 11:00:35

+0

是的,我需要動態地形成查詢。 – Pawan 2014-11-04 11:02:15

+0

Btw你不需要提供NULL,因爲它是屬性的默認值。 sql =「INSERT INTO DOCUMENT(T1,vendor_brand_id,vendor_id)values('」+ valuess [0] +「',」+ vendor_brand_id +「,」+ vendor_id +「)」就足夠了。對於else塊中的sql也是如此。 – Willmore 2014-11-04 11:18:20

回答

1

怎麼這樣嘗試使用StringBuilder

StringBuilder sb = new StringBuilder(); 
    sb.append("Insert into document (T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,vendor_brand_id,vendor_id) values ("); 
    for (int i = 0; i < 10; i++) { 
     if (i < valuess.length) { 
      sb.append("'" + valuess[i] + "',"); 
     } else { 
      sb.append("NULL,"); 
     } 
    } 
    sb.append(vendor_brand_id+","+vendor_id+")"); 

    //now sb.toString() is ready for required sql 
    System.out.println(sb.toString()); 
1

我想你可以使用PreparedStatement來建立你的查詢。
檢查此link

建立查詢後,您可以根據收到的輸入設置查詢中的值,也可以將其設置爲空。

0

雖然可以解決使用StringBuilder的你的問題的動態方面,我會很堅決取締這種方法,因爲它忽略了已經開發的技術/框架的財富避免爲前端和後端做這種事情。

我可以指出的第一件事是,即使您可以傳遞由字符分隔的值,它可能不一定是個好主意。例如,如果訂單很重要,那麼當有人通過時(t1,t3,t6),上述方法將失敗。分隔字符串不指定變量的順序。因此,爲了正確地定義分隔值,您需要另一個分隔符,並因此增加更多的複雜性,真正應該成爲一個簡單的問題來解決....即使命令不是問題,它也將非常困難別人瞭解使用這種方法正在發生的事情;甚至你,如果你要回去看一下這個代碼,您使用的是Java這樣看看下面的一段時間:)

我假設後:

http://www.edu4java.com/en/servlet/servlet3.html

它應該給你一個關於如何用servlet和表單修改你的問題的想法。第二,如果你得到上面的部分是正確的,那麼你可以使用Java中的PreparedStatment,正如其他人所建議的那樣,而不必做任何動態的動作。如果這太模糊或混淆,那麼總是有Google。如果您閱讀並理解Java如何與數據庫協同工作,您會發現您嘗試使用的動態SQL方法幾乎沒有什麼益處。看到這個例子:

http://www.mkyong.com/jdbc/jdbc-preparestatement-example-insert-a-record/

祝你好運,不要停止探索