INSERT INTO语句中的Java SQL语法错误
我正在尝试将下面的数据插入到一个表中,该表的列ID为[autoNumber],键入[text],to[text],from[text],message[text]和attachmentLoc[text] 因此,生成自动编号时,我插入它们并提供列名。当它运行时,控制台会打印出:INSERT INTO语句中的Java SQL语法错误,java,sql,Java,Sql,我正在尝试将下面的数据插入到一个表中,该表的列ID为[autoNumber],键入[text],to[text],from[text],message[text]和attachmentLoc[text] 因此,生成自动编号时,我插入它们并提供列名。当它运行时,控制台会打印出: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement. at sun.
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3149)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:216)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(JdbcOdbcPreparedStatement.java:138)
at MultiEchoServer.saveMessage(MultiEchoServer.java:147)
at ClientHandler.run(MultiEchoServer.java:409)
导致错误的代码是:
try
{
String sql = "INSERT INTO Messages (type, to, from, message, attachmentLoc) VALUES(?,?,?,?,?)";
PreparedStatement stmt = database.prepareStatement(sql);
stmt.setString(1, message.getType());
stmt.setString(2, message.getTo());
stmt.setString(3, message.getFrom());
stmt.setString(4, message.getMessage());
stmt.setString(5, attachmentLoc);
stmt.executeUpdate();
}
catch (SQLException e)
{
System.out.println("Could not perform statement");
e.printStackTrace();
}
感谢您的帮助您需要INSERT语句的有效语法。SQL不理解问号 也许,您需要以下选项之一:
- “?”
- 空的
- ''
值(NULL,NULL,NULL,NULL,NULL)INSERT语句需要有效的语法。SQL不理解问号 也许,您需要以下选项之一:
- “?”
- 空的
- ''
值(NULL、NULL、NULL、NULL、NULL)您不说明正在使用的数据库引擎,但许多列名(以及表名)可能是保留字的候选项。最明显的是来自的
您将需要在标识符引号中写入这些标识符,这些标识符通常是反勾号字符(`)或字符[和](取决于引擎):
或
只需要在作为保留字的标识符周围使用引号,但在所有标识符周围使用引号不会有任何影响。此外,没有理由不在语句末尾包含值后面的空格和分号(尽管大多数引擎都不需要分号)。您没有说明正在使用的数据库引擎,但许多列名(以及表名)可能是保留字的候选项。最明显的是来自
的
您将需要在标识符引号中写入这些标识符,这些标识符通常是反勾号字符(`)或字符[和](取决于引擎):
或
只需要在作为保留字的标识符周围使用引号,但在所有标识符周围使用引号不会有任何影响。此外,没有理由不在语句末尾包含值后面的空格和分号(尽管大多数引擎都不需要这两个分号)。From是保留字,更改为messageFrom后,允许插入数据库。From是保留字,将其更改为messageFrom后,允许插入数据库。可能是因为我在数据库中使用了单词from吗?是的,是因为它是保留字:-d可能是因为我在数据库中使用了单词from吗?是的,是因为它是保留字:-d这些是参数占位符。这些是参数占位符。我回答了我自己的问题,谢谢。因为from是一个保留字。我将列名更改为messagefromthepathing引擎建立不同的保留字列表。我会注意类型
,到
,以及消息
。显然,无论您现在使用的是哪种SQL产品,它们都不会保留,但如果您稍后关闭引擎,则需要注意。PS:当您回答自己的问题时,您应该将其作为答案而不是评论发布,然后(短暂延迟后)您可以将自己的答案标记为正确。你不会因为接受自己的答案而得分,但它会将问题从“仍然未解决”列表中删除,并帮助将来出现的人找到正确答案。我回答了自己的问题,无论如何,谢谢。因为from是一个保留字。我将列名更改为messagefromthepathing引擎建立不同的保留字列表。我会注意类型
,到
,以及消息
。显然,无论您现在使用的是哪种SQL产品,它们都不会保留,但如果您稍后关闭引擎,则需要注意。PS:当您回答自己的问题时,您应该将其作为答案而不是评论发布,然后(短暂延迟后)您可以将自己的答案标记为正确。你不会因为接受自己的答案而得分,但它会将问题从“仍然未解决”列表中删除,并帮助将来出现的人找到正确答案。
INSERT INTO `Messages` (`type`, `to`, `from`, `message`, `attachmentLoc`)
VALUES (?,?,?,?,?);
INSERT INTO [Messages] ([type], [to], [from], [message], [attachmentLoc])
VALUES (?,?,?,?,?);