Java Like子句中的MySQLSyntaxErrorException错误
我有一个函数,它使用like子句从MySQL获取对象列表,但是在测试时,返回一个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时,这一次就是在准备
错误在这一行:
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驱动程序也有同样的错误。