如何插入或更新数据库排在这种情况下

问题描述:

我有一个表作为如何插入或更新数据库排在这种情况下

CREATE TABLE `category` (
    `category_id` int(11) , 
    `T1` varchar(50) DEFAULT NULL, 
    `T2` varchar(50) DEFAULT NULL, 
    `T3` varchar(50) DEFAULT NULL, 
    `T4` varchar(50) DEFAULT NULL, 
    `T5` varchar(50) DEFAULT NULL 
) 

mysql> select * from category; 
+-------------+----------+-------------+---------------+------+------+ 
| category_id | T1  | T2   | T3   | T4 | T5 | 
+-------------+----------+-------------+---------------+------+------+ 
|   145 | Pop Corn | Regular Tub | Plain Salted | NULL | NULL | 
|   150 | Pop Corn | Buckets  | Plain Salted | NULL | NULL | 
|   151 | Pop Corn | Jumbo  | Plain Salted | NULL | NULL | 
|   152 | Pop Corn | Regular Tub | Butter Scotch | NULL | NULL | 
|   153 | Pop Corn | Regular Tub | Tomoto Tango | NULL | NULL | 
|   154 | Pop Corn | Buckets  | Butter Scotch | NULL | NULL | 
|   222 | Pop Corn | NULL  | NULL   | NULL | NULL | 
| +-------------+----------+-------------+---------------+------+----- 

当我运行下面的程序是在表中插入新记录如下图所示

223  Pop Corn | Buckets  | NULL   | NULL | NULL 

它实际上应该更新category_id 222作为流行玉米已经存在的行

import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.Statement; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
public class TestDate { 
    public static void main(String[] args) 
    { 
     String inputrequest = "Pop [email protected]"; 
     String values[] = inputrequest.split("@"); 
     String sqlselect = ""; 

     Connection dbConnection = null; 
     PreparedStatement selectpst = null; 
     ResultSet resultset = null; 
     PreparedStatement selectpst2 = null; 
     ResultSet resultset2 = null; 
     String sqlselect2 = ""; 

     Statement updateStatement = null; 

     // Length == 2 
     if(values.length==2) 
     { 
      sqlselect = "select category_id from category where T1 = ? AND T2 = ? AND T3 IS NULL" 
      selectpst = dbConnection.prepareStatement(sqlselect); 
      selectpst.setString(1, values[0]); 
      selectpst.setString(2, values[0]); 
      resultset = selectpst.executeQuery(); 
      if(resultset.next()) 
      { 
       System.out.println("Already exists"); 
      } 
      else 
      { 
       sql = "Insert into category (T1,T2,T3,T4,T5) values ('"+values[0]+"','"+values[1]+"',NULL,NULL,NULL) "; 
       updateStatement.executeUpdate(sql); 
      } 

     } 
} 
} 

有没有人请帮助我如何解决这个??

+0

您的选择不能与CATEGORY_ID 222返回行作为T2为NULL而且不等于“水桶”。此外,如果你想更新一行,你应该使用...“UPDATE”而不是INSERT – PierrOz 2014-12-09 13:20:24

+0

可能是一个小bug:'selectpst.setString(2,values [0]);';我认为它应该是'selectpst.setString(2,values [1]);' – 2014-12-09 13:20:56

把正确的数据在声明中,所以更换:

selectpst.setString(1, values[0]); 
selectpst.setString(2, values[0]); 

selectpst.setString(1, values[0]); 
selectpst.setString(2, values[1]); 

然后更改您的查询。这是不正确的。具有编号为222的行在T2和T3上具有NULL。

您正在将值Buckets发送到T2而不是NULL,因此它永远不会返回所需的行。

+0

感谢您的评论,所以应该是什么查询? – Pawan 2014-12-09 13:29:36

+0

@PreethiJain您是否有查找该行或仅查找特定行的一般规则? – MihaiC 2014-12-09 13:30:30

+0

没有一般规则,意味着我必须在T5之前实现这个逻辑。 – Pawan 2014-12-09 13:31:03

您将参数设置错误:

selectpst.setString(1, values[0]); 
selectpst.setString(2, values[0]); 

我觉得应该是:

selectpst.setString(1, values[0]); 
selectpst.setString(2, values[1]);