INSERT INTO语句中的Java SQL语法错误
我试图从[文本],消息[文本]中将下面的数据插入到具有列ID [autoNumber],键入[text],[text]和attachmentLoc [文本]INSERT INTO语句中的Java SQL语法错误
所以自动编号生成我插入他们提供的列名称。当它运行在控制台打印出:
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();
}
感谢您的帮助
From是保留字,在将其更改为messageFrom后,允许插入数据库。
您需要的INSERT语句语法有效。 SQL不理解问号。
也许,你希望下列之一: '?'
- NULL
- ''
或者一些其他的价值。
因此,假设列接受NULL值,你可以使用: VALUES(NULL,NULL,NULL,NULL,NULL)
这些是参数占位符。 – 2012-04-18 18:39:41
你所使用的数据库引擎,你没有说明,但一些列名(以及表名)可能是保留字的候选者。最明显的是from
。
你将需要写这些标识符在标识符引用其通常是要么反引号字符(')或字符[和](取决于发动机):
INSERT INTO `Messages` (`type`, `to`, `from`, `message`, `attachmentLoc`)
VALUES (?,?,?,?,?);
或
INSERT INTO [Messages] ([type], [to], [from], [message], [attachmentLoc])
VALUES (?,?,?,?,?);
只有在保留字的标识符周围需要引用,但在所有标识符周围使用引号都不会造成伤害。此外,没有理由不在VALUES后面加上空格,并在语句结尾处加上分号(尽管大多数引擎不需要)。
我回答了我自己的问题,无论如何。这是因为来自一个保留字。我将列名更改为messageFrom – 2012-04-18 22:13:53
不同的引擎建立不同的保留字列表。我会提防'type','to'和'message'。显然,它们并不是保留在你现在使用的任何SQL产品中,但是如果你稍后将引擎切换出来,那么它是需要注意的。 – 2012-04-19 12:37:31
PS:当你回答自己的问题时,你应该将它作为答案发布,而不是评论,然后(短暂延迟后),你可以标记自己的答案是正确的。你不会为接受你自己的答案而获得积分,但它会从“仍然开放”的列表中删除问题,并帮助未来出现的人找到正确的答案。 – 2012-04-19 12:38:46
难道是因为我正在使用我的数据库中的单词吗? – 2012-04-18 17:27:22
是的,因为它是一个保留字:-D – 2012-04-18 17:29:08