2017-10-09 190 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, ...);