SQLSyntaxError Java 当 运行 INSERT 语句时
SQLSyntaxError Java when running an INSERT statement
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)
);
这是我的数据库 table 代码,当我想使用 INSERT INTO ( ) VALUES (?,?,?)
在 table 中输入值时,出现 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();
}
}
可能的错误来源很少(基于代码审查):
查询不应以分号结束。目前,您代码中的 sql 查询由双引号中的分号终止。
private String sqlInsertStr = "INSERT INTO NBUSER.INVOICE
(INVOICENO,DATE,COMPANY,PRICE,TYPE,INVOICETYPE)
VALUES(?,?,?,?,?,?)"; // removed semi-colon at the end of query.
您不应在 table 中声明带有标准数据类型名称(如 DATE)的列。在声明 table.
时,您应该将其重命名为 INVOICEDATE
等
您的第二个参数需要 Date 类型的参数,而您为查询提供的是字符串值。这将完全导致异常。
stmt.setDate(2, new java.sql.Date(addData.getDate());// changed the type.
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)
);
这是我的数据库 table 代码,当我想使用 INSERT INTO ( ) VALUES (?,?,?)
在 table 中输入值时,出现 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();
}
}
可能的错误来源很少(基于代码审查):
查询不应以分号结束。目前,您代码中的 sql 查询由双引号中的分号终止。
private String sqlInsertStr = "INSERT INTO NBUSER.INVOICE (INVOICENO,DATE,COMPANY,PRICE,TYPE,INVOICETYPE) VALUES(?,?,?,?,?,?)"; // removed semi-colon at the end of query.
您不应在 table 中声明带有标准数据类型名称(如 DATE)的列。在声明 table.
时,您应该将其重命名为 您的第二个参数需要 Date 类型的参数,而您为查询提供的是字符串值。这将完全导致异常。
stmt.setDate(2, new java.sql.Date(addData.getDate());// changed the type.
INVOICEDATE
等