2014-11-04 31 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/

祝你好运,不要停止探索