java.sql.SQLException : Column count doesn't match value count at row 1 Servlets Error or Mysql Error?

标签 java jakarta-ee

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/

相关文章:

java - 如何获取 mongoDB 中数组的特定元素?

jakarta-ee - 无法在 JAX-RS 服务中注入(inject) @ApplicationScoped bean

java - Java 中时间派生属性的最佳实践

java - 显示可编辑整数数组的最佳格式化程序? (可以从0开始)

javascript - 找不到合适的编码器(java websocket)

java - 服务测试中的 NullPointerException

java - 不断取消并重新创建 Timer,Java 中的 TimerTask

java - 有什么方法可以在tomcat中的不同应用程序之间共享 session 状态?

java - 通过网络解耦 UI 和计算的简单示例

java - 如何将 JAR 文件添加到 Eclipse 中的 web-inf/lib 文件夹?