2014-10-27 57 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