Java&我的INSERT语句中的错误

时间:2013-11-23 15:30:38

标签: mysql java-ee sql-insert

我需要帮助解决我的错误。

数据库称为租借者

addressID是从一个名为Property的表中自动递增,并包含在一个名为Renter的表中,我正在进行java赋值。

我连接到数据库,当我尝试添加新的租用者时,它给了我这个错误

  

处理SQL时出错!java.sql.SQLException:字段'AddressID'没有默认值
  数据库连接已终止

这是我的插入声明:

     String addFirstName = txtFirstName.getText();
     String addLastName = txtLastName.getText();
     String addCellPhone = txtCellPhone.getText();
     String addDepositPaid = txtDepositPaid.getText();
     String addDepositAmtPaid = txtDepositAmtPaid.getText();

Statement lstatement = conn.createStatement();

ls_query = "INSERT INTO Renter (FirstName,LastName,CellPhone,DepositPaid,DepositAmtPaid) VALUES('" + addFirstName + "','" + addLastName + "','" + addCellPhone + "','" + addDepositPaid + "'," + addDepositAmtPaid + ")";

myStatement.executeUpdate(ls_query); JOptionPane.showMessageDialog(null, "New Renter Added");

3 个答案:

答案 0 :(得分:3)

查看数据库架构,可能列AddressID标记为NOT NULL。您正在尝试插入记录而不指定该列的值,并且由于没有指定默认值,因此插入失败。

因此,您可以修改架构并删除NOT NULL约束(如果有意义),或者为该列指定默认值,或者为插入提供一个。

但是我认为你的代码存在另一个 主要 问题:因为你将insert语句串在一起,你对SQL注入很开放。解决方案非常简单,使用PreparedStatement,可以找到一个很好的教程here

转到bobby-tables.com,这是一个非常频繁的SQL注入问题的第一次介绍,其中包含有关如何针对包括Java在内的多种语言避免使用它们的方法。一个很好的资源!

答案 1 :(得分:0)

使用Insert命令时添加AddressID。通常,必须插入每个非默认列和非AutoIncrement列。

答案 2 :(得分:0)

尝试

ls_query = "INSERT INTO Renter (FirstName,LastName,CellPhone,DepositPaid,DepositAmtPaid,AdressId) VALUES('" + addFirstName + "','" + addLastName + "','" + addCellPhone + "','" + addDepositPaid + "','" + addDepositAmtPaid + "','0')";

修改

我没有java经验。但看起来;就像在C#中一样。

INSERT语句通常以;结束或分隔,换句话说,在MySQL中说从这一点开始执行。

你可以尝试一下吗?

ls_query = "INSERT INTO Renter (FirstName,LastName,CellPhone,DepositPaid,DepositAmtPaid,AdressId) VALUES('" + addFirstName + "','" + addLastName + "','" + addCellPhone + "','" + addDepositPaid + "','" + addDepositAmtPaid + "','0');";