我需要帮助解决我的错误。
数据库称为租借者
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");
答案 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');";