Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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 IF EXISTS语句上的语法SQL错误_Java_Mysql_Sql - Fatal编程技术网

Java IF EXISTS语句上的语法SQL错误

Java IF EXISTS语句上的语法SQL错误,java,mysql,sql,Java,Mysql,Sql,在我的java项目中,我需要检查表中是否存在行。 如果存在,我需要更新;如果没有,我需要创建它。执行此操作的Sql语法应为: IF EXISTS(SELECT * FROM table1 WHERE column4='"+int4+"' AND column5='"+int5+"') " +"BEGIN " + "UPDATE table1" + "SET column1='"+int1+"', column2='"+int2+"' " + "WHERE colu

在我的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中,除了在存储例程(存储过程、存储函数、触发器)中,您不能使用条件语句

您需要的是所谓的
UPSERT
,您可以用它在MySQL中实现。要使其工作,您必须在
第4列
第5列
上有一个
唯一索引

ALTER TABLE 1添加UNIQUE(第4列、第5列);
现在,您的
INSERT
语句可能如下所示

插入表1(第1列、第2列、第4列、第5列、第3列)
值(?,,,,?,?)
在重复键更新时,column1=值(column1),column2=值(column2);
这里是演示


旁注:使用参数化查询而不是插入查询字符串。我不是Java方面的专家,但我确信它拥有一流的基础设施。否则,您将非常容易接受SQL注入

您遇到了一个错误,因为在MySQL中,除了在存储例程(存储过程、存储函数、触发器)中,您不能使用条件语句

您需要的是所谓的
UPSERT
,您可以用它在MySQL中实现。要使其工作,您必须在
第4列
第5列
上有一个
唯一索引

ALTER TABLE 1添加UNIQUE(第4列、第5列);
现在,您的
INSERT
语句可能如下所示

插入表1(第1列、第2列、第4列、第5列、第3列)
值(?,,,,?,?)
在重复键更新时,column1=值(column1),column2=值(column2);
这里是演示


旁注:使用参数化查询而不是插入查询字符串。我不是Java方面的专家,但我确信它拥有一流的基础设施。否则,您将非常容易接受SQL注入

在控制台中打印上述行,然后在mysql中检查。您将了解是否存在任何错误。您可以在函数或过程中使用类似
if
的控制语句。谢谢。您将以何种方式解决此问题?使用
case
并将该查询用作另一个select查询的临时表。如果您查询
信息\u schema.columns
表,则可以检查该列是否存在。在控制台中打印上一行,然后在mysql中检查它。您将了解是否有任何错误。您可以在函数或过程中使用类似
if
的控制语句。谢谢。如何解决此问题?使用
case
并将该查询用作另一个select查询的临时表。如果查询
信息\u schema.columns
表,则可以检查该列是否存在。@bernhart是否有帮助?你的问题需要更多的帮助吗?嗨,谢谢你的帮助。编译器在突出显示插入到表1(第1列、第2列、第4列、第5列、第3列)时打印错误。
。抱歉迟到了,我今天很忙@伯恩哈特:有帮助吗?你的问题需要更多的帮助吗?嗨,谢谢你的帮助。编译器在突出显示插入到表1(第1列、第2列、第4列、第5列、第3列)时打印错误。
。抱歉迟到了,我今天很忙!