获取“ java.sql.SQLException:值未绑定到语句”异常

时间:2019-01-15 09:47:45

标签: database sqlite jdbc

我最近从sqlite-jdbc-3.7.2.jar升级到sqlite-jdbc-3.26.0.jar。我观察到我的代码中的插入查询因“ java.sql.SQLException:值未绑定到语句”异常而失败。

下面是一段代码,对于先前版本的sqlite来说效果很好:

String sqlStatement = "INSERT INTO table_name(id,name,type,author,size) VALUES (?,?,?,?,?)";
try
{
    Connection conn = this.connect(<name>); 
    PreparedStatement pstmt = conn.prepareStatement(sqlStatement))
    {
        pstmt.setInt(1, rs.getInt(<value>));
        pstmt.setString(2, rs.getString(<value>));
        pstmt.setInt(3, rs.getInt(<value>));

        if (somecondition)
        {
            pstmt.setString(4, rs.getString(<Value>));
            pstmt.setInt(5, rs.getInt(<value>));

        }
        pstmt.executeUpdate();
    }
}
catch(Exception e)
{
    //handling of exception goes here
}

我已经阅读了发行说明https://www.sqlite.org/changes.html,并检查了作为Query Planner增强功能的一部分,没有什么变化(查询规划器检查绑定参数的值,以帮助确定部分索引是否可用。 )。 但是我仍然不清楚增强功能是什么以及它如何影响我的代码。 还可以有人指导我如何解决以上代码吗?

谢谢, 凯塔基

1 个答案:

答案 0 :(得分:2)

在上面的程序中,插入查询期望用户填充5个值。 但是,如果不满足(某些条件),则不会在查询中插入第4个和第5个值。这是因为sqlite-jdbc-3.26.0期望在执行查询之前填充所有值。在此修复程序中,我确保通过插入else块来填充所有值,即使“ somecondition”为false。

修复:

 if (somecondition)
  {
            pstmt.setString(4, rs.getString(<Value>));
            pstmt.setInt(5, rs.getInt(<value>));

  }
  else
  {
            pstmt.setString(4, rs.getString(<default-value>));
            pstmt.setInt(5, rs.getInt(<defaul`enter code here`t-value>));
  }