Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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 Like子句中的MySQLSyntaxErrorException错误_Java_Mysql_Jdbc - Fatal编程技术网

Java Like子句中的MySQLSyntaxErrorException错误

Java Like子句中的MySQLSyntaxErrorException错误,java,mysql,jdbc,Java,Mysql,Jdbc,我有一个函数,它使用like子句从MySQL获取对象列表,但是在测试时,返回一个MySQLSyntaxErrorException错误,我应该怎么做 代码 错误在这一行: ResultSet rs = stmt.executeQuery(sql); 替换为 ResultSet rs = stmt.executeQuery(); 要使用JDBC执行SQL字符串,只需将SQL字符串传递给JDBC一次,并且在使用PreparedStatement时,这一次就是在准备

我有一个函数,它使用like子句从MySQL获取对象列表,但是在测试时,返回一个MySQLSyntaxErrorException错误,我应该怎么做

代码
错误在这一行:

        ResultSet rs = stmt.executeQuery(sql);
替换为

        ResultSet rs = stmt.executeQuery();
要使用JDBC执行SQL字符串,只需将SQL字符串传递给JDBC一次,并且在使用PreparedStatement时,这一次就是在准备语句时。设置完所有参数后,调用不带参数的
executeQuery()
,将使用设置的参数值运行准备好的语句

调用采用单个字符串参数的
executeQuery
版本将在该字符串中运行SQL,而不允许使用任何参数值。这是因为PreparedStatement接口从语句接口继承了此方法

MySQL JDBC驱动程序的这种行为尤其令人困惑。你还远远不是第一个犯下这个错误并想知道发生了什么事的人,我不能相信你会是最后一个。正如注释中指出的,当您在PreparedStatement上使用字符串调用
executeQuery
时,JDBC驱动程序应该抛出异常。如果这样做了,你可能会更快地找到解决问题的方法


我不知道你的变量
sql
是什么。可能它只包含一个字母
a
-我可以通过运行
stmt.executeQuery(“a”)
重现您的错误消息错误在这一行:

        ResultSet rs = stmt.executeQuery(sql);
替换为

        ResultSet rs = stmt.executeQuery();
要使用JDBC执行SQL字符串,只需将SQL字符串传递给JDBC一次,并且在使用PreparedStatement时,这一次就是在准备语句时。设置完所有参数后,调用不带参数的
executeQuery()
,将使用设置的参数值运行准备好的语句

调用采用单个字符串参数的
executeQuery
版本将在该字符串中运行SQL,而不允许使用任何参数值。这是因为PreparedStatement接口从语句接口继承了此方法

MySQL JDBC驱动程序的这种行为尤其令人困惑。你还远远不是第一个犯下这个错误并想知道发生了什么事的人,我不能相信你会是最后一个。正如注释中指出的,当您在PreparedStatement上使用字符串调用
executeQuery
时,JDBC驱动程序应该抛出异常。如果这样做了,你可能会更快地找到解决问题的方法


我不知道你的变量
sql
是什么。也许它只包含一个字母
a
-我可以通过运行
stmt.executeQuery(“a”)

来重现您的错误消息。您是否从
MariaDB
检查了手册?是否交叉检查了表名和列名?也许手动运行该查询一次?也许您可以设置SQL FIDLE?查询在phpMyAdmin上成功执行,表/列名为ok@LucasSilvaChaves难道phpMyAdmin不使用MySQL吗?这与
MariaDB
的语法可能有差异。我的phpMyAdmin运行MariaDB您是否从
MariaDB
检查手册?是否交叉检查表名和列名?也许手动运行该查询一次?也许您可以设置SQL FIDLE?查询在phpMyAdmin上成功执行,表/列名为ok@LucasSilvaChaves难道phpMyAdmin不使用MySQL吗?这可能与
MariaDB
的语法有所不同。我的phpMyAdmin运行MariaDB这是MySQL驱动程序中的一个错误,它甚至允许您在准备好的或可调用的语句上调用
executeQuery(String)
(传递不带参数的查询会成功)。如果在
PreparedStatement
CallableStatement
上调用此方法,JDBC规范要求驱动程序始终抛出
SQLException
@markrotterveel:谢谢,我不知道。我更新了我的答案,以澄清这不是一般的JDBC行为。有趣的是,Oracle JDBC驱动程序也有同样的错误。MySQL驱动程序中有一个错误,它甚至允许您对准备好的或可调用的语句调用
executeQuery(String)
(传递不带参数的查询会成功)。如果在
PreparedStatement
CallableStatement
上调用此方法,JDBC规范要求驱动程序始终抛出
SQLException
@markrotterveel:谢谢,我不知道。我更新了我的答案,以澄清这不是一般的JDBC行为。有趣的是,OracleJDBC驱动程序也有同样的错误。