【问题标题】:SQLSyntaxError Java when running an INSERT statement运行 INSERT 语句时的 SQLSyntaxError Java
【发布时间】:2018-01-03 17:56:17
【问题描述】:
CREATE TABLE "INVOICE" (
"INVOICENO" VARCHAR(200) NOT NULL PRIMARY KEY,
"DATE" DATE,
"COMPANY" VARCHAR(500),
"PRICE" DOUBLE,
"TYPE" VARCHAR(200),
"INVOICETYPE" VARCHAR(200),
"GENERATEDDOCID" INTEGER  GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) 


);

这是我的数据库表代码,当我想用​​INSERT INTO ( ) VALUES (?,?,?) 向表中输入值时,它给出了 SQLSyntax 错误。

我使用下面的代码插入值:

      public void addData(addData addData) {
      private String sqlInsertStr = "INSERT INTO 
       NBUSER.INVOICE(INVOICENO,DATE,COMPANY,PRICE,TYPE,INVOICETYPE) VALUES(?,?,?,?,?,?);";
    try {

        stmt = conn.prepareStatement(sqlInsertStr);

        stmt.setString(1, addData.getInvoiceNo());
        stmt.setString(2, addData.getDate());
        stmt.setString(3, addData.getCompany());
        stmt.setDouble(4, addData.getPrice());
        stmt.setString(5, addData.getType());
        stmt.setString(6, addData.getInvoiceType());
        stmt = conn.prepareStatement(sqlInsertStr);
        stmt.executeUpdate();
    } catch (SQLException ex) {
        ex.getMessage();
    }
}

【问题讨论】:

  • 我们对您使用的数据库类型一无所知,这无济于事。另外,错误发生在哪里?还有更多信息吗?你为什么要给prepareStatement打两次电话? (第二个作业很可能是问题的根源。)
  • 不小心把prepared statement添加了两次,我把最下面的去掉了,但是问题依旧存在。我正在使用 Netbeans Derby SQL。感谢您的帮助
  • 请发布完整的异常堆栈跟踪。

标签: java sql jdbc derby


【解决方案1】:

可能的错误来源很少(基于代码审查):

  1. 查询不应以分号结束。目前,您代码中的 sql 查询被双引号内的分号终止。

    private String sqlInsertStr = "INSERT INTO NBUSER.INVOICE
    (INVOICENO,DATE,COMPANY,PRICE,TYPE,INVOICETYPE)
     VALUES(?,?,?,?,?,?)";  // removed semi-colon at the end of query.
    
  2. 您不应在表中声明带有标准数据类型名称(如 DATE)的列。您应该在声明表时将其重命名为 INVOICEDATE 等。

  3. 您的第二个参数需要一个 Date 类型的参数,而您正在为查询提供一个字符串值。这将完全导致异常。

    stmt.setDate(2, new java.sql.Date(addData.getDate());// changed the type.
    

【讨论】:

  • 谢谢!分号是影响代码的那个
  • @AaronLeeHerngYue - 不客气。但是,请确保您遵循我的回答中提到的建议,以便您获得更好的代码质量。祝你好运!
猜你喜欢
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-17
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多