Insert into sql default value error

时间:2017-10-09 21:42:04

标签: java mysql sql default-value insert-into

我正在尝试通过java将值插入到我的数据库中,但我一直得到一个"没有默认值"错误信息。我在网上找了一些帮助,但他们还没有真正解决我的问题。这是我得到的错误" java.sql.SQLException:Field' firstName'没有默认值"。

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 = "weqtatw@aadf.com";

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);}
}

}

2 个答案:

答案 0 :(得分:0)

您当前正在一个表中运行三个单独的插入语句,例如:

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

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

你也会有一个非常无用的表,它将包含一些条目,例如除了名字“John”之外的任何行,除了姓氏“Doe”之外什么都没有的行,以及personID为3的行。 / p>

相反,您应该运行单个INSERT语句,例如:

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

还应该连续填充所有必需的单元格。

答案 1 :(得分:0)

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

如果您没有该表的默认值(它们是在创建表时设置的),您必须像这样一次提供所有值:

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