INSERT INTO语句中的Java SQL语法错误

时间:2012-04-18 17:26:35

标签: java sql

我正在尝试将下面的数据插入到具有列ID [autoNumber],类型[text],[text],[text],message [text]和attachmentLoc [text]

因此生成自动编号我插入它们提供列名。当它运行时,控制台打印出来:

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();
    }

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

您没有说明您正在使用的数据库引擎,但许多列名称(以及表名称)可能是保留字的候选者。最明显的是from

您需要在标识符引号中编写这些标识符,这些标识符通常是反引号字符(`)或字符[和](取决于引擎):

INSERT INTO `Messages` (`type`, `to`, `from`, `message`, `attachmentLoc`)
  VALUES (?,?,?,?,?);

INSERT INTO [Messages] ([type], [to], [from], [message], [attachmentLoc]) 
   VALUES (?,?,?,?,?);

仅在保留字的标识符周围引用,但在所有标识符周围使用它不会受到伤害。此外,没有理由不在VALUES和语句末尾的分号后包含空格(尽管大多数引擎都不需要)。

答案 1 :(得分:0)

您需要INSERT语句的有效语法。 SQL不理解问号。

也许,您需要以下其中一项:

  • '?'
  • NULL
  • ''

或其他一些价值。

因此,假设列接受NULL值,您可以使用:      VALUES(NULL,NULL,NULL,NULL,NULL)

答案 2 :(得分:0)

From是一个保留字,在此之后被更改为messageFrom它允许插入数据库。