2017-10-09 150 views
0

我想通过Java插入值到我的数据库,但我不断收到“没有默认值”错误消息。我在网上找了一些帮助,但他们并没有真正解决我的问题。这是我得到的错误“java.sql.SQLException:Field'firstName'没有默认值”。插入到SQL默认值错误

import java.sql.*; 

class MysqlCon { 

public static void main(String[] args) { 
    String personalID = null; 
    String firstname = null; 
    String lastname = null; 
    String addressone = null; 
    String addresstwo = null; 
    String city = null; 
    String state = null; 
    String zipcode = null; 
    String phone = null; 
    String email = null; 

    try 
    { 

Class.forName("com.mysql.jdbc.Driver"); 
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Address_Book","root",""); 
Statement stmt = con.createStatement(); 

personalID ="3"; 
firstname = "John"; 
lastname = "Doe"; 
addressone = "4000 s.c.r. 222"; 
addresstwo = "5000 n.c.r. 333"; 
city = "place"; 
state = "Texas"; 
zipcode = "43523"; 
phone = "43523524"; 
email = "[email protected]"; 

stmt.executeUpdate("insert into Names(personID) values("+personalID+")"); 
stmt.executeUpdate("insert into Names(firstname) values("+firstname+")"); 
stmt.executeUpdate("insert into Names(lastname) values("+lastname+")"); 
stmt.executeUpdate("insert into addresses(address1) values("+addressone+")"); 
stmt.executeUpdate("insert into addresses(address2) values("+addresstwo+")"); 
stmt.executeUpdate("insert into addresses(city) values("+city+")"); 
stmt.executeUpdate("insert into addresses(state) values("+state+")"); 
stmt.executeUpdate("insert into addresses(zipcode) values("+zipcode+")"); 
stmt.executeUpdate("insert into phoneNumbers(phoneNumber) values("+phone+")"); 
stmt.executeUpdate("insert into emailAddresses(emailAddress) values("+email+")"); 
con.close(); 
    }catch(Exception e){System.out.println(e);} 
} 

} 
+0

您可以发布完整的错误? –

+1

您需要在一条语句中指定所有列:'INSERT INTO Names(personID,firstname,...)VALUES(?,?,...)' – shmosel

+0

我已添加收到的错误消息。 – RayKing8

回答

0

你当前正在运行的三个独立的INSERT语句为一个表,如:

INSERT INTO Names (personID) values (3); 
INSERT INTO Names (firstname) values ("John"); 
INSERT INTO Names (lastname) values ("Doe"); 

你最终将与3个独立的行,而不是单行。如果任何列需要一个值(即,如果你有一个没有auto_increment的主键),插入将失败,因为它将需要一个列的值(编辑:在这种情况下,你有一个所需的firstName字段值) 。

您还将拥有一个非常无用的表格,其中将包含诸如除了名称“John”之外的行的条目,除了姓氏“Doe”以外的行以及具有3的personID的行。

相反,你应该运行一个INSERT语句,如:

stmt.executeUpdate("insert into Names(personID, firstname, lastname) values("+personalID+", "+firstname+", "+lastname+")"); 

也应填充所有必需的细胞在一排。

0

请尝试首先在数据库shell中运行insert into命令之一 - 您将看到类似insert into Names(personID) values(3)的命令不正确,因为DB不知道要插入其他字段的内容。但是,它会知道缺失字段是否有默认值 - 这就是DB抱怨的原因。

如果没有默认值,该表(它们被设置了,而创建表),您必须立即给出所有值是这样的:

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);