java.sql.SQLException:Field' Cust_LastName'没有默认值

时间:2015-04-16 17:20:35

标签: java mysql

如果我的知识正确,错误说我没有给Cust_LastName一个值,但我正在尝试使用下面的代码。

整个集合用于我的数据库中的单个新行

// Accessing driver from JAR file
try {
    Class.forName("com.mysql.jdbc.Driver");

    // Creating a variable for the connection
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/schbank", "root", "s201431s");

    // SQL statements to insert the information into the table
    PreparedStatement statementFName = con.prepareStatement("insert into tblcustomer(Cust_FirstName)" + "values(?)");
    PreparedStatement statementLName = con.prepareStatement("insert into tblcustomer(Cust_LastName)" + "values(?)");
    PreparedStatement statementAddress = con.prepareStatement("insert into tblcustomer(Cust_Address)" + "values(?)");
    PreparedStatement statementPhone = con.prepareStatement("insert into tblcustomer(Cust_PhoneNumber)" + "values(?)");
    PreparedStatement statementSSN = con.prepareStatement("insert into tblcustomer(Cust_SSN)" + "values(?)");
    PreparedStatement statementEmail = con.prepareStatement("insert into tblcustomer(Cust_Email)" + "values(?)");
    PreparedStatement statementUsername = con.prepareStatement("insert into tblcustomer(Cust_Username)" + "values(?)");
    PreparedStatement statementPassword = con.prepareStatement("insert into tblcustomer(Cust_Password)" + "values(?)");

    // Sets the values
    statementFName.setString(1, strFname);
    statementLName.setString(1, strLname);
    statementAddress.setString(1, strAddress);
    statementPhone.setString(1, strPhone);
    statementSSN.setString(1, strSSN);
    statementEmail.setString(1, strEmail);
    statementUsername.setString(1, strUserName);
    statementPassword.setString(1, strPassword);

    // Other code removed for brevity
} catch (SQLException ex) {
    ex.printStackTrace(System.err);
}

3 个答案:

答案 0 :(得分:0)

请改为尝试:

PreparedStatement stmt = con.prepareStatement(
    "INSERT INTO tblcustomer (Cust_FirstName, Cust_LastName, Cust_Address, Cust_PhoneNumber, Cust_SSN, Cust_Email, Cust_Username, Cust_Password)"
    + " VALUES (?, ?, ?, ?, ?, ?, ?, ?)");

stmt.setString(1, strFname);
stmt.setString(2, strLname);
stmt.setString(3, strAddress);
stmt.setString(4, strPhone);
stmt.setString(5, strSSN);
stmt.setString(6, strEmail);
stmt.setString(7, strUserName);
stmt.setString(8, strPassword);

现在你正在这样做,你试图在表格中进行8次单独插入,你想要一个包含8个值的插入。

答案 1 :(得分:0)

您的每个陈述都是单独的陈述。每个语句在执行时都会插入一个单独的行。该行只包含您在语句中填充的一列,而其他所有列都将按其默认值填充。

在第一个声明中,您只给Cust_Firstname一个值。因此,您没有给Cust_LastName赋值,并且您的数据库告诉您由于这个原因它无法执行该语句。

您可能希望一行包含所有列值,而不是八个行,每行都有一个列集。为此,您必须准备一个语句并填写其中的所有值。

答案 2 :(得分:0)

当您编写单独的insert语句时,这意味着它尝试为数据库中的每个语句输入单独的行。由于第一个insert语句执行时出现此错误,它期望Cust_LastName值,因为此字段没有默认值。

您可以对所有列使用单个insert语句,您可以使用参数插入查询。