Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在这种情况下如何插入或更新数据库行_Java_Mysql_Jdbc - Fatal编程技术网

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

Java 在这种情况下如何插入或更新数据库行,java,mysql,jdbc,Java,Mysql,Jdbc,我有一张桌子 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

我有一张桌子

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 
它实际上应该更新类别_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 Corn@Buckets";
        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);
            }

        }
}
}

有谁能帮我解决这个问题吗???

请在语句中输入正确的数据,然后替换:

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

然后更改您的查询。这是不对的。id为
222
的行在T2和T3上为空


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

您的参数设置错误:

selectpst.setString(1, values[0]);
selectpst.setString(2, values[0]);
我认为应该是:

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

您的select无法返回类别为_id 222的行,因为T2为NULL且不等于“bucket”。此外,如果你想更新一行,你应该使用。。。一个“更新”而不是一个插件可能有一个小错误:
selectpst.setString(2,值[0]);我认为应该是
selectpst.setString(2,values[1])谢谢你的评论,那么查询应该是什么?@PreethiJain你有查找行的一般规则吗?没有一般规则,意味着我必须在T5之前实现此逻辑。@PreethiJain sqlselect=“从类别中选择类别\u id,其中T1=?T2为空,T3为空”(因此它只有第一个参数)然后删除selectpst.setString(2,值[1]);如果代码中需要T1和T2,则必须确保数据库在这两个字段上不包含null。@PreethiJain如果更正表中的数据,您的初始代码将起作用,我非常确定T2不应为null!
selectpst.setString(1, values[0]);
selectpst.setString(2, values[1]);