【问题标题】:Number of query values and destination fields are not the same in ms accessms访问中查询值和目标字段的数量不一样
【发布时间】:2012-11-10 21:44:22
【问题描述】:

我正在尝试执行下面的这个 sql 插入语句,但遇到了下面列出的错误。希望能给点建议,谢谢。

 public void addSale(String saleDetails, String saleTotal) 
                        throws ClassNotFoundException, SQLException {

     Statement myStatement = getConnection();
     String sql = "INSERT INTO Sale (SaleDetails, SaleTotal) VALUES ('"+saleDetails+"','"+saleTotal+"')";

     myStatement.executeUpdate(sql);
     closeConnection();
  } 
}

错误:

Java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 查询值和目标字段的数量不同。 在 sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6956) 在 sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7113) 在 sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3109) 在 sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:337) 在 sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java:287)

这是 ms-access 的设计视图:

【问题讨论】:

  • 您可能在 salesDetails 变量中有报价或其他内容。考虑使用准备好的语句。除了避免这种错误,它们更安全。

标签: java sql ms-access


【解决方案1】:

执行System.out.println(sql); 或使用您的日志框架并直接在访问中尝试该语句。您可能对 odbc 上的不同数据类型有问题。否则,该声明对我来说看起来不错。

也许您的变量包含' 和/或逗号。如果他们没有逃脱,那也可能会导致问题。您应该考虑使用参数绑定。

【讨论】:

    【解决方案2】:

    我认为你的插入应该是:

    String sql = "INSERT INTO Sale (SaleDetails, SaleTotal) VALUES (" + saleDetails + ", " + saleTotal + ")";
    

    此外,您可能需要在插入之前将 saleTotal 从字符串转换为数字。

    【讨论】:

    • 嗨詹姆斯,SaleDetails 是一种文本/备忘录数据类型,需要引用,任何单引号都需要替换为两个单引号,但 SaleTotal 是一个数字,正如您所注意到的,并且不需要报价。理想情况下,OP 应该使用参数。
    【解决方案3】:

    这是因为逗号作为您系统上的小数分隔符。 value1 是 2.5 而 value2 是 3.2 但你得到了 2,5,3,2(你希望 2.5,3.2)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多