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

标签 java sql

我正在尝试将下面的数据插入到具有 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();
    }

感谢您的帮助

最佳答案

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

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

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

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

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

关于INSERT INTO 语句中的 Java SQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10214664/

相关文章:

mysql - 将数据从表 A 插入表 B WHERE(条件)& SET Col.a = "xxx"

java - 图像不显示..Java

java - 设置 DAY_OF_WEEK 返回意外结果

java - eclipse 创建新的 .properties 文件

java - Bash 逐行读取文件,按制表符拆分,发送到 java 应用程序

MySQL SELECT 记录从特定日期开始不存在

c# - SQL语句不过滤行

php - 回显数据作为输入值

java - 从字符串数组中删除重复项 - 使用 HashSet

php - 如何从 MySQL 表中删除重复项?