【发布时间】:2019-10-13 09:27:12
【问题描述】:
我试图在我的 java derby 数据库中的表中插入一些值,我收到错误 java.sql.SQLSyntaxErrorException: VALUES 子句必须包含至少一个元素。不允许使用空元素。
public boolean registerStudent(Student student)
{
try
{
Connection conn = DriverManager.getConnection("jdbc:derby://localhost:1527/AceDrivingSchool", "ADC", "ADC");
Statement stmt = conn.createStatement();
stmt.executeUpdate("INSERT INTO ADC.STUDENT(EMAILADDRESS, FORENAME, SURNAME, ADDRESSLINE1, ADDRESSLINE2,"
+ " POSTCODE, TELEPHONENO, GENDER, PASSWORD, ISREGISTERED, ISVERIFIED, PASSEDTHEORY, PASSEDPRACTICAL, DRIVINGLICENSENO, DOB"
+ ") VALUES('" + student.getEmailAddress() +
"', '" + student.getForename() + "', '" + student.getSurname() +
"', '" + student.getAddressLine1() + "', '" + student.getAddressLine2() + "', '" + student.getPostcode() +
"', '" + student.getTelephoneNo() + "', '" + student.getGender() + "', '" + student.getPassword() +
"', '" + student.isIsRegistered() + "', '" + student.isIsVerified() + "', '" + student.isPassedTheory() + "', '" +
"', '" + student.isPassedPractical() + "', '" + student.getdrivingLicenseNo() + "', '" +
new SimpleDateFormat("yyyy-MM-dd").format(student.getDob()) + "')");
conn.close();
return true;
}
catch(SQLException ex)
{
ex.printStackTrace();
return false;
}
}
这应该将值正确地放到我的表中
【问题讨论】:
-
您正在动态构建一个字符串以作为 SQL 代码执行。然后数据库返回错误。您的第一步应该是检查该字符串并查看它实际上是什么。您正在执行的 SQL 代码很有可能不是您假设正在执行的 SQL 代码。
-
我意识到我有一个额外的“','”,虽然我现在收到一个新错误“java.sql.SQLSyntaxErrorException:分配的值的数量与指定的数量不同或隐含列。”我是这些错误的新手/以前从未遇到过。
-
那个错误告诉你列数和值的个数不一样。数一数。
-
您的代码易受 SQL 注入攻击。使用“准备好的语句”而不是普通的 SQL。
-
顺便说一下,使用
LocalDate.parse而不是SimpleDateFormat。