2015-04-16 2 views
0

Ошибка говорит, что я не даю Cust_LastName значение, если мои знания верны, но я пытаюсь с помощью кода ниже.java.sql.SQLException: Поле '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); 
} 

ответ

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 значениями.

+0

, который объясняет многое, в первый раз, когда я начал использовать это, он был с двумя таблицами и одним полем в каждом, так что он работал, не совсем понял. – smoobies

0

Каждое из ваших заявлений является отдельным заявлением. Каждый оператор, когда выполняется, вставляет отдельную строку. Эта строка будет содержать только один столбец, который вы заполняли с помощью инструкции, и все остальные столбцы будут заполнены их значениями по умолчанию.

В первом заявлении вы указываете только значение Cust_Firstname. Таким образом, вы не указываете значение Cust_LastName, и ваша база данных сообщает вам, что она не может выполнить этот оператор по этой причине.

Вы, вероятно, хотите один строку со всеми значениями столбца, не восемь строк, каждая с одним набором столбцов. Для этого вам нужно подготовить один оператор и заполнить все значения в нем.

0

Когда вы пишете отдельный оператор insert, это означает, что он пытается ввести отдельные строки для каждого оператора в базе данных. Эта ошибка из-за того, что выполняется первая инструкция insert, ожидается значение Cust_LastName, так как это поле не имеет значения по умолчанию.

Либо вы можете использовать оператор одиночной вставки со всеми столбцами, вы можете пойти с запросами вставки параметров.

Смежные вопросы