2011-12-15 88 views
3

我将值插入到数据库中,但得到“列计数与列1中的值计数值不匹配”错误。“列计数与第1行的值计数不匹配”程序中的错误

try { 
    Class.forName("com.mysql.jdbc.Driver"); 
    connection = DriverManager.getConnection(connectionURL, "root", "root"); 
    String sql = "insert into login(username,password) values(?,?)"; 
    PreparedStatement pst = connection.prepareStatement(sql); 
    pst.setString(1, username); 
    pst.setString(2, password); 

    int numRowsChanged = pst.executeUpdate(); 
    out.println(" Data has been submitted "); 

    pst.close(); 
} catch (ClassNotFoundException e) { 
    out.println("Couldn't load database driver: " + e.getMessage()); 
} catch (SQLException e) { 
    out.println("SQLException caught: " + e.getMessage()); 
} catch (Exception e) { 
    out.println(e); 
} finally { 
    try { 
     if (connection != null) 
      connection.close(); 
    } catch (SQLException ignored) { 
     out.println(ignored); 
    } 
} 

这是我的表MySql数据库:

  +----------+-------------+------+-----+---------+-------+ 
      | Field | Type  | Null | Key | Default | Extra | 
      +----------+-------------+------+-----+---------+-------+ 
      | username | varchar(20) | YES |  | NULL |  | 
      | password | varchar(15) | YES |  | NULL |  | 
      +----------+-------------+------+-----+---------+-------+ 

为什么会出现这个错误?我的代码有问题吗? 请帮助我.......

+0

你有多少字段进入登录表? – Pratik

+0

你能告诉我们表'login'的模式定义吗? –

+0

您的登录表中可能包含更多字段。 –

回答

0

可能列在sql字符串中被命名为不正确。

+0

no ..他们是相同的 –

+0

现在你可以看到我的登录表也....现在告诉我 –

+0

没有没有空格 –

0

错误本身可能是错误的,因为一切看起来都很好。也许表登录的主键没有定义(用户名)?我看到用户名可以为空。

+0

没有主键没有定义..但它不是问题 –

+0

我做了和你一样的事情。而**一切正常**。差异可能是InnoDB(而不是ISAM),并且使用编码UTF-8编码数据库和驱动程序的连接字符串。如果给出的编码是UTF-16,那么可以得到一个nul字节,并且这将在字节编码中成为字符串的结尾。有点可疑。 –

+0

我没有找到你 –

0

另一种方法,一个未准备好的陈述可能会提供一个想法。

String sql = "insert into login(username, password) values('" 
     + username + "', '" + password + "')"; 
System.out.println("sql = " + sql); 
Statement pst = connection.createStatement(); 
pst.execute(sql); 

如果没有什么帮助,创建一个新表xxx和尝试所有这一点。

+0

类型连接中的createStatement()方法不适用于参数(字符串)。此错误正在得到 –

+1

已更正;我希望现在是正确的Java。 –

+0

同样的错误得到 –

0

实际上,当提供的值的数量和数量列不匹配时会导致此错误。插入表(col1,col2)值(val1) 和 插入表(col1)值(val1,val2) 两者都会产生相同的错误。

我试过你的代码,它完全与Oracle合作。因此,您可以检查列名中的拼写错误。

相关问题