0

「列数が行1の値数と一致しません」というメッセージが表示されますが、修正できなかったようです。引用符とデータ型を変更しようとしましたが、それでもうまくいきませんでした。誰かが私が間違っているところを見ることができますか?

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();
4

3 に答える 3

4

「列数が行1の値数と一致しません」

通常、values句で定義された列が実際のテーブル列と一致しない場合に発生します。

テーブルに4つの列があるとしましょう、col1 col2 col3 col4

ここで、col2、col3、col4にのみデータを挿入します。

挿入ステートメントは次のようになります

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

ただし、JDBCを使用してSQLクエリを実行するときは、 PreparedStatementを使用することを強くお勧めします。

   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);
于 2012-11-22T14:38:17.637 に答える
0

これは、暗黙的なタイプのINSERTステートメントを使用しているために発生します。サーバーは、すべての列にすべての値を指定したことを期待していますが、それが例外をスローした理由ではありません。

最善の方法は、値がバインドされている列名を明示的に宣言することです。

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

このタイプの構文は、すべての列にすべての値が指定されている場合にのみ使用できます。たとえば、 3つの列を持つテーブルがある場合は、これを使用できます。

INSERT INTO tableName  VALUES ('a','b','c')
于 2012-11-22T14:38:06.387 に答える
0

明示的に挿入する列を定義するだけです

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

それ以外の場合は、各フィールドに値を設定する必要があります

于 2012-11-22T14:40:21.937 に答える