在我的Java项目中,我需要检查表中是否存在一行。
如果存在,我需要更新;如果没有,我需要创建它。执行此操作的Sql语法应为:
IF EXISTS(SELECT * FROM table1 WHERE column4='"+int4+"' AND column5='"+int5+"') "
+"BEGIN "
+ "UPDATE table1"
+ "SET column1='"+int1+"', column2='"+int2+"' "
+ "WHERE column4='"+int4+"' and column5='"+int5+"' "
+ "END "
+ "ELSE"
+ "INSERT INTO table1 (column1, column2, column4, column5, column3) "
+ "VALUES ('" + int1 + "',"
+ "'" + int2 + "',"
+ "'" + int4 + "',"
+ "'" + int5 + "',"
+ "'" + int3 +"');
其中
int1, int2, int3, int4, int5
是整数值。好吧,如果我放这段代码,我的java编译器会出现Sql语法错误:
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS(SELECT * FROM table1 WHERE column4='1' AND column5='0') BEGIN UPDATE' at line 1
但是我看不到错误
最佳答案
您遇到了一个错误,因为在MySQL中,除了存储例程(存储过程,存储函数,触发器)之外,您不能使用条件语句IF
。
您需要的就是所谓的UPSERT
,您可以在MySQL中使用INSERT INTO ... ON DUPLICATE KEY UPDATE
实现。为了使其正常工作,您必须在UNIQUE INDEX
和column4
上有一个column5
。
ALTER TABLE table1 ADD UNIQUE (column4, column5);
现在,您的
INSERT
语句可能看起来像INSERT INTO table1 (column1, column2, column4, column5, column3)
VALUES (?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE column1=VALUES(column1), column2=VALUES(column2);
这是SQLFiddle演示
附带说明:使用参数化查询,而不是插入查询字符串。我不是Java方面的专家,但是我确信它具有一流的基础架构。否则,您对SQL注入持开放态度。