2014-10-27 107 views
0

我有一个表,如下所示:Java的插入或SQL逻辑更新

mysql> select * from category; 
+-------------+----------+------+------+------+------+------+------+------+------+------+-----------------+ 
| category_id | T1  | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10 | vendor_brand_id | 
+-------------+----------+------+------+------+------+------+------+------+------+------+-----------------+ 
|   12 | Popcorn  | rgp | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 3000   | 

我试图插入新行的爆米花桶,使得它看起来是这样的:

mysql> select * from category; 
+-------------+----------+------+------+------+------+------+------+------+------+------+-----------------+ 
| category_id | T1  | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10 | vendor_brand_id | 
+-------------+----------+------+------+------+------+------+------+------+------+------+-----------------+ 
|   12 | Popcorn  | rgp | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 3000   | 
|   13 | Popcorn  | Bucket | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 3000   | 

但是这是更新现有的行。

请问有人能告诉我什么是错?

String vendor_brand_id ="3000"; 
String reqstr ="Popcorn"; 
String value="Bucket"; 

sqlselect = "select category_id from category where T1 = ? AND T2!=NULL AND vendor_brand_id = ?"; 
selectpst = dbConnection.prepareStatement(sqlselect); 
selectpst.setString(1, valuess[0]); 
selectpst.setString(2, vendor_brand_id); 
resultset = selectpst.executeQuery(); 

if(resultset.next()) 
{ 
    sql= "select category_id from category where T1 = ? AND T2=? AND vendor_brand_id = ?"; 

    selectpst2 = dbConnection.prepareStatement(sql); 

    selectpst2.setString(1, valuess[0]); 
    selectpst2.setString(2, value); 
    selectpst2.setString(3, vendor_brand_id); 
    resultset2 = selectpst2.executeQuery(); 

    if(resultset2.next()) 
    { 

    } 
    else 
    { 
     sql = "Insert into category (T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,vendor_brand_id) values ('"+valuess[0]+"','"+value+"',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"+vendor_brand_id+") "; 
     updateStatement.executeUpdate(sql); 
    } 
} 
else 
{ 
    sql = "update category set T2 = '"+value+"' where T1 ='"+valuess[0]+"' AND vendor_brand_id = "+vendor_brand_id+" " ; 
    updateStatement.executeUpdate(sql); 
} 
+0

任何'UNIQUE'指数在桌子上? – hexafraction 2014-10-27 20:47:17

+0

谢谢,但根据表设计,没有什么我可以依靠 – Kiran 2014-10-27 20:48:15

+3

首先想到:而不是“AND T2!= NULL”,尝试“AND T2 IS NOT NULL” – 2014-10-27 20:48:23

回答

2

MySQL处理NULL in a rather special manner;从文章:“你不能使用算术比较操作符,如=,<,或者<>测试空”

试着改变你的第一个SELECT语句:

/* Old */ 
select category_id from category where T1 = ? AND T2!=NULL AND vendor_brand_id = ? 

/* New */ 
SELECT category_id FROM category WHERE T1=? AND T2 IS NOT NULL AND vendor_brand_id=? 
+0

非常感谢。 – Kiran 2014-10-27 21:22:13