try {
Statement stmt = con.createStatement();
stmt.executeUpdate("INSERT into emailacc(fname,lname,uname,mail,passwd,passwd2,date,month,year) values('"+fname+","+lname+","+uname+","+mail+","+passwd+","+passwd2+","+date+","+selectMonth+","+year+"')");
out.println("<h3><font color='green'>Information Added Successfully.</font><br> You Are a registered User now.</h3><br>");
con.close();
} catch(Exception e) {
out.println("Exception caught : "+e);
}
为什么会发生这种情况? 上次我做了同样的事情,但没有发生,这是怎么回事?
最佳答案
首先,开始它的问题在于您将这些值直接包含在 SQL 中。不要那样做。曾经。通过 PreparedStatement
使用参数化 SQL 语句,并适当设置参数值。这样你就不需要担心 SQL injection attacks ,并且也可以更容易地查看实际SQL是什么,而不必担心值来自哪里(或者更确切地说,将这两个问题分开) .
我怀疑直接的问题是您没有引用任何值,因此您有一个 SQL 语句,例如更长的版本:
INSERT into Foo(name) VALUES (jon)
而不是
INSERT into Foo(name) VALUES ('jon')
...但是使用参数化 SQL 无论如何都会解决此问题,因此请不要只是更改 SQL 以在各处包含单引号。
关于java.sql.SQLException : Column count doesn't match value count at row 1 Servlets Error or Mysql Error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8095571/