线程 "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException 中的异常:您的 SQL 语法有误
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax
我试图通过 java 执行上述查询,但在第 6 行出现以下错误:
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.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 '? AND lexicon_lemma = ?)' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
at com.mysql.jdbc.Util.getInstance(Util.java:360)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:978)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2526)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2484)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1446)
我找不到语法有什么问题...有什么建议吗?
这是我的查询:
public static void InsertEntry(String lexiconType, String lemma, String lang) throws SQLException {
String selectSQL = "SELECT id FROM lexicons WHERE (lexicon_type = ? AND lexicon_lemma = ?)";
PreparedStatement preparedStatement = connection.prepareStatement(selectSQL);
preparedStatement.setString(1, lexiconType);
preparedStatement.setString(2, lemma);
ResultSet rs = preparedStatement.executeQuery(selectSQL);
int id = -1;
if (rs.next()) {
id = rs.getInt(1);
System.out.println(id);
} else {
String insertSQL = "INSERT INTO lexicons "
+ "(lexicon_type,lexicon_lemma,lexicon_lang) VALUES"
+ "(?,?,?)";
PreparedStatement prepStatement = connection.prepareStatement(insertSQL);
prepStatement.setString(1, lexiconType);
prepStatement.setString(2, lemma);
prepStatement.setString(3, lang);
prepStatement .executeUpdate();
prepStatement.close();
}
}
变化:
ResultSet rs = preparedStatement.executeQuery(selectSQL);
至
ResultSet rs = preparedStatement.executeQuery();
对于 PreparedStatement
,没有必要将 sql 语句变量传递给 executeQuery
。这是你的主要问题。
PreparedStatement preparedStatement = connection.prepareStatement(selectSQL);
preparedStatement.setString(1, lexiconType);
preparedStatement.setString(2, lemma);
// error is in the following statement
ResultSet rs = preparedStatement.executeQuery(selectSQL);
当你重置要执行的sql时,该语句不被识别为准备好的语句,而是正在查找的父Statement
的实例对于不存在的 stings 等引号之间的有效输入。因此是语法错误。
变化:
ResultSet rs = preparedStatement.executeQuery(selectSQL);
收件人:
ResultSet rs = preparedStatement.executeQuery();
它应该可以正常工作。
参考:
我试图通过 java 执行上述查询,但在第 6 行出现以下错误:
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.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 '? AND lexicon_lemma = ?)' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
at com.mysql.jdbc.Util.getInstance(Util.java:360)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:978)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2526)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2484)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1446)
我找不到语法有什么问题...有什么建议吗? 这是我的查询:
public static void InsertEntry(String lexiconType, String lemma, String lang) throws SQLException {
String selectSQL = "SELECT id FROM lexicons WHERE (lexicon_type = ? AND lexicon_lemma = ?)";
PreparedStatement preparedStatement = connection.prepareStatement(selectSQL);
preparedStatement.setString(1, lexiconType);
preparedStatement.setString(2, lemma);
ResultSet rs = preparedStatement.executeQuery(selectSQL);
int id = -1;
if (rs.next()) {
id = rs.getInt(1);
System.out.println(id);
} else {
String insertSQL = "INSERT INTO lexicons "
+ "(lexicon_type,lexicon_lemma,lexicon_lang) VALUES"
+ "(?,?,?)";
PreparedStatement prepStatement = connection.prepareStatement(insertSQL);
prepStatement.setString(1, lexiconType);
prepStatement.setString(2, lemma);
prepStatement.setString(3, lang);
prepStatement .executeUpdate();
prepStatement.close();
}
}
变化:
ResultSet rs = preparedStatement.executeQuery(selectSQL);
至
ResultSet rs = preparedStatement.executeQuery();
对于 PreparedStatement
,没有必要将 sql 语句变量传递给 executeQuery
。这是你的主要问题。
PreparedStatement preparedStatement = connection.prepareStatement(selectSQL);
preparedStatement.setString(1, lexiconType);
preparedStatement.setString(2, lemma);
// error is in the following statement
ResultSet rs = preparedStatement.executeQuery(selectSQL);
当你重置要执行的sql时,该语句不被识别为准备好的语句,而是正在查找的父Statement
的实例对于不存在的 stings 等引号之间的有效输入。因此是语法错误。
变化:
ResultSet rs = preparedStatement.executeQuery(selectSQL);
收件人:
ResultSet rs = preparedStatement.executeQuery();
它应该可以正常工作。
参考: