2012-11-22 108 views
0

我得到「列計數與第1行的值計數不匹配」,但似乎無法修復它。我試着改變引號和數據類型,但仍然沒有運氣。任何人都可以看到我出錯的地方嗎?第1行的列計數與值計數不匹配 - Java SQL

public void actionPerformed(ActionEvent arg0) { 
      if(!textField.getText().isEmpty() && !textField_1.getText().isEmpty() && !textField_2.getText().isEmpty() && !textField_3.getText().isEmpty() && !textField_4.getText().isEmpty() && !textField_5.getText().isEmpty() && !textField_6.getText().isEmpty() && !textField_7.getText().isEmpty()) 
      { 
       String moduleName = textField.getText(); 
       String studId = textField_1.getText(); 
       String sFName = textField_2.getText(); 
       String sLName = textField_3.getText(); 
       int weekNo = Integer.parseInt(textField_4.getText()); 
       int lAttend = Integer.parseInt(textField_5.getText()); 
       int tAttend = Integer.parseInt(textField_6.getText()); 
       int wAttend = Integer.parseInt(textField_7.getText()); 

       lh.addStud(moduleName, studId, sFName, sLName , weekNo, lAttend, tAttend, wAttend); 
      } 
      else 
      { 
       lblNewLabel_4.setText("You have Missing Field"); 
      } 
      fillDB(); 
      } 
     }); 

下面是我的查詢:

String aSQuery = "INSERT INTO Group6_Register VALUES ('" + moduleName + "', '" + studId + "', '" + sFName + "', '" + sLName +"', '" + weekNo + "', '" + lAttend + "', '" + tAttend + "', '" + wAttend + "')"; 
      statements = connection.prepareStatement(aSQuery); 
      statements.executeUpdate(); 
+0

我想設置一個值'這裏省略Group6_Register'的'PK'領域 – triclosan

+2

在哪裏'prepareStatement'在這裏? – triclosan

回答

4

通常 「的列計數不爲1行匹配值計數」當您在values子句中定義的列與您的實際表列不匹配時,會發生這種情況。

說你的表有4個coulmns,COL1 COL2 COL3 COL4

現在只希望數據插入到COL2,COL3,COL4

insert語句應該是

Insert into table (col2, col3, col4) values(col2val, col3val, col3val) 

但是,我會強烈建議您使用PreparedStatement使用JDBC執行sql查詢。

String query= "Insert into table (col2, col3, col4) Values(?,?,?)"; 
    Statement st = conn.preparedStatement(query); 
    st.setString(1, col2value); 
    st.setString(2, col3Val); 
    st.setString(3, col4Val); 
+0

謝謝,它工作。非常清楚和有益的。最後一件事,我插入新數據後如何刷新JTable?我不得不重新運行它才能看到更新。 – user1781232

+0

@ user1781232 check thi slink http://stackoverflow.com/questions/3179136/jtable-how-to-refresh-table-model-after-insert-delete-or-update-the-data – PermGenError

+0

當我把tableModel.fireTableDataChanged ();我得到一個錯誤,說:「令牌上的語法錯誤」fireTableDataChanged「,標識符在此標記之後預期」 – user1781232

0

這是因爲你使用的是類型的INSERT聲明。服務器期望您爲所有列提供了所有值,但是這並不是它拋出異常的原因。

最好的辦法是顯式聲明值所綁定的列名,例如。

INSERT INTO tableName (colA, colB, colC) 
VALUES ('a','b','c') 

,當你有所有指定值的所有列,例如,你必須擁有3列一個表,你只能使用這種類型的語法,你就可以使用這個

INSERT INTO tableName VALUES ('a','b','c') 
0

只要定義列插入明確

INSERT INTO table (col1,col2,coln) VALUES (val1, val2, val3) 

否則你必須爲每個字段

相關問題