如何插入或更新数据库排在这种情况下
问题描述:
我有一个表作为如何插入或更新数据库排在这种情况下
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);
}
}
}
}
有没有人请帮助我如何解决这个??
答
把正确的数据在声明中,所以更换:
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
,因此它永远不会返回所需的行。
答
您将参数设置错误:
selectpst.setString(1, values[0]);
selectpst.setString(2, values[0]);
我觉得应该是:
selectpst.setString(1, values[0]);
selectpst.setString(2, values[1]);
您的选择不能与CATEGORY_ID 222返回行作为T2为NULL而且不等于“水桶”。此外,如果你想更新一行,你应该使用...“UPDATE”而不是INSERT – PierrOz 2014-12-09 13:20:24
可能是一个小bug:'selectpst.setString(2,values [0]);';我认为它应该是'selectpst.setString(2,values [1]);' – 2014-12-09 13:20:56