在SQL上插入数据

时间:2013-04-04 05:13:01

标签: java sql sql-server-2005 insert

我正在尝试在sql上将数据插入我的数据库,在运行程序后发生错误并说:

[Microsoft][ODBC SQL Server Driver][SQL Server]Insert Error: Column name or number of supplied values does not match table definition.

我该如何解决?谁能告诉我我的代码有什么问题?

这是代码:

private void btnInsertActionPerformed(java.awt.event.ActionEvent evt) {
        try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

        String url = "jdbc:odbc:****";
        String user = "****";
        String pass = "****";
        Connection connection = DriverManager.getConnection(url, user, pass);
        Statement statement = connection.createStatement();
        String pIDNo = txtPatientID.getText();
        String pFName = txtpFName.getText();
        String pLName = txtpLName.getText();
        String pMI = txtpMI.getText();

        String sql = "INSERT INTO dbo.Patients VALUES (" + 
                (pIDNo)+",'"+(pFName)+"','"+(pLName)+"','"+(pMI)+"')";
        statement.executeUpdate(sql);
        JOptionPane.showMessageDialog(rootPane, "Patient Added!");
        }catch (Exception ex) {
            JOptionPane.showMessageDialog(this, ex.getMessage());
            System.exit(1);
        }
    }

以下是表格信息:

PatientTable

3 个答案:

答案 0 :(得分:4)

使用隐式INSERT语句时,提供的值的数量必须等于表中列的总数,例如

INSERT INTO tableName VALUES (val1, val2)

在上面的查询中,预期的列数为2,因为您提供了两个值。

如果有增量字段,则必须在其上传递null值。但如果没有,则需要指定要插入值的列名,例如

INSERT INTO tableName (col1, col2) VALUES (val1, val2)

作为旁注,必须参数化值以避免sql injection。请参阅以下文章:

更新1

由于未在所有列上插入值,因此需要指定列名称。

INSERT INTO Patients (pIDNo, pFName, pLName, pMI)
VALUES (...)

答案 1 :(得分:1)

pIDNo,pFName,pLName,pMI的类型是什么?

将类型更改为varchar以接收文本输入。

答案 2 :(得分:0)

你可能将ID字段设置为auto,所以不应该在插入中传递它?您应该在insert语句中列出字段,例如INSERT INTO dbo.Patients(column1,column2 ...)。请参阅here