2017-10-09 14 views
0

java経由でデータベースに値を挿入しようとしていますが、「デフォルト値がありません」というエラーメッセージが表示され続けます。私はいくつかの助けを見つけるためにオンラインで見たが、彼らは本当に私の問題を解決していない。これは私が "java.sql.SQLExceptionを取得しているエラーです:フィールド '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

あなたは現在のような、一つのテーブルに3つの別々のINSERT文を実行している:あなたが代わりに単一の行の、3つの別々の行になってしまいます

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

。いずれかの列に値が必要な場合(つまり、auto_incrementのない主キーがある場合)、列の値が必要になるため挿入は失敗します(編集:この場合、firstNameフィールドに必要な値があります) 。

「John」という名前だけの行、「Doe」という名前の行、personIDが3の行などのエントリを含む非常に無駄なテーブルもあります。また、行内のすべての必要な細胞を移入する必要があり

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

代わりに、次のような、単一のINSERT文を実行する必要があります。

0

insert intoコマンドのいずれかをデータベースシェルで最初に実行してみてください。DBが他のフィールドに挿入する内容を知らないため、insert into Names(personID) values(3)などのコマンドが正しくないことがわかります。しかし、欠落しているフィールドのデフォルト値があるかどうかを知ることができます。そのため、DBは不平を言っています。あなたがそのテーブルのデフォルト値を持っていない場合

(これらはテーブル作成しながら、設定されている)、あなたはこのように一度にすべての値を与える必要があります。

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