1

以下のデータを、列 ID[autoNumber]、type[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.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();
    }

ご協力いただきありがとうございます

4

3 に答える 3

1

使用しているデータベースエンジンは指定しませんが、多くの列名(およびテーブル名)が予約語の候補になる可能性があります。最も明白なのはfromです。

これらの識別子は、通常はバックティック文字( `)または文字[および](エンジンによって異なります)のいずれかである識別子の引用符で記述する必要があります。

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

また

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

引用符は、予約語である識別子の周囲にのみ必要ですが、すべての識別子の周囲に使用しても問題はありません。また、ステートメントの最後にVALUESの後にスペースとセミコロンを含めない理由はありません(ただし、ほとんどのエンジンではどちらも必要ありません)。

于 2012-04-18T18:36:53.500 に答える
0

Fromは予約語であり、これがmessageFromに変更された後、データベースへの挿入が可能になりました。

于 2013-03-02T00:50:42.497 に答える
0

INSERT ステートメントには有効な構文が必要です。SQL は疑問符を認識しません。

おそらく、次のいずれかが必要です。

  • '?'
  • ヌル
  • ''

または他の値。

したがって、列が NULL 値を受け入れると仮定すると、次のように使用できます: VALUES(NULL, NULL, NULL, NULL, NULL)

于 2012-04-18T18:10:54.023 に答える