Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 错误:[Microsoft][ODBC SQL Server Driverr][SQL Server]插入错误:提供的列名称或值数与表定义不匹配_Java_Sql Server_Netbeans 6.9 - Fatal编程技术网

Java 错误:[Microsoft][ODBC SQL Server Driverr][SQL Server]插入错误:提供的列名称或值数与表定义不匹配

Java 错误:[Microsoft][ODBC SQL Server Driverr][SQL Server]插入错误:提供的列名称或值数与表定义不匹配,java,sql-server,netbeans-6.9,Java,Sql Server,Netbeans 6.9,我在Java项目中使用MS SQL Server 2005和Netbeans 6.9 以下是我的表格结构(SSMS 2005内部): 现在,在Netbeans中,我使用以下代码片段将输入的名称保存到“name”列中: if(e.getSource().equals(submit)) { try { String str="insert into TETRISUSERS values(?,'0')"; Cl

我在Java项目中使用MS SQL Server 2005和Netbeans 6.9

以下是我的表格结构(SSMS 2005内部):

现在,在Netbeans中,我使用以下代码片段将输入的名称保存到“name”列中:

 if(e.getSource().equals(submit))
    {
        try
        {
            String str="insert into TETRISUSERS values(?,'0')";
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con=DriverManager.getConnection("jdbc:odbc:java","sa", "123456");
            PreparedStatement stmt=con.prepareStatement(str);
            stmt.setString(1,username.getText());

            stmt.executeUpdate();
        }
        catch(Exception ex)
        {
            JOptionPane.showMessageDialog(name1,"Error : "+ex.getMessage());
        }
现在,当我运行项目并输入名称时,出现以下错误:

错误:[Microsoft][ODBC SQL Server Driverr][SQL Server]插入错误:提供的值的列名或数目与表定义不匹配。

我还尝试在insert into命令中使用直接列名,如下所示:

   try
        {
            String str="insert into TETRISUSERS(ID,name,highscore) values(?,'0',?)";
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con=DriverManager.getConnection("jdbc:odbc:java","sa", "007007");
            PreparedStatement stmt=con.prepareStatement(str);
            stmt.setString(1,username.getText());

            stmt.executeUpdate();
        }
但这样我就得到了这个错误:

错误:[Microsoft][ODBC SQL Serever驱动程序]计数字段不正确或语法错误

最后,我尝试使用以下方法:

try
        {
            String str="insert into TETRISUSERS(ID,name) values(?,'0')";
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con=DriverManager.getConnection("jdbc:odbc:java","sa", "007007");
            PreparedStatement stmt=con.prepareStatement(str);
            stmt.setString(1,username.getText());

            stmt.executeUpdate();
        }
我得到了这个错误:

错误:一般错误


谁能告诉我哪里错了吗?

根据您的图片,所有列都不允许空值。如果为任何列传递空值,它将返回barf。因此,尝试为每一列传递一个值,您可能会得到不同且可能更好的结果。

我刚刚将所有列设置为“允许null”。。。但是程序仍然给出相同的错误:(最后一次猜测stmt.setString(1,username.getText());1是要传递的第一个参数吗?Id是Int,所以可能应该是stmt.setInt(0,1)是吗?是的,ID是要传递的第一个参数..但我不确定当第二个参数是变量时如何使用seInt..萨尔索,我只是尝试在我的表中将ID设置为nvarchar,并尝试在我的程序中使用相同的语法..但是得到了相同的错误:(SetInt(parameterIndex,parameterValue);所以SetInt(0,1)SetInt(2,3)