【问题标题】:PreparedStatement error: Parameter 12 undefinedPreparedStatement 错误:参数 12 未定义
【发布时间】:2014-05-09 10:06:13
【问题描述】:

我有十一个字段要插入到数据库中。显示的错误是我的 12 参数未定义,即 ps.executeUpdate()。我应该怎么办?

我的插入方法如下。

public void update(User user){
        try{
        Connection conn = DbUtils.getConnection();
        PreparedStatement ps = conn.prepareStatement("UPDATE db.db set id = ?,username = ?,password = ?,firstname = ?, lastname = ?, fathersname =?, gender = ?, email = ?,address =? , phnno = ?, courses = ?" + "WHERE id =?");
        ps.setInt(1, user.getId());
        ps.setString(2, user.getName());
        ps.setString(3, user.getPwd());
        ps.setString(4, user.getFname());
        ps.setString(5,  user.getLname());
        ps.setString(6, user.getFathername());
        ps.setString(7, user.getAddress());
        ps.setString(8, user.getEmail());
        ps.setString(9, user.getGender());
        ps.setString(10, user.getPhno());
        ps.setString(11, user.getCradio());
        ps.execute();           
        }catch(Exception e){
            e.printStackTrace();            
    }
    `

【问题讨论】:

  • 您的查询中有 12 个占位符,而您只提供了 11 个。算一算。
  • 第11个占位符和WEHRE之间应该有一个空格。应该是...courses = ? WHERE id =?"
  • 顺便说一句:你为​​什么要更新用户的id?它不是独一无二的吗?而且您的查询将失败,除非您有 old id 值的句柄。如果这不是您的意图,请从您的查询中删除 id=?,,重新编号参数编号,并为 where id=? 重新编号 setXXX

标签: java mysql prepared-statement


【解决方案1】:

函数应该有另一个参数为 12 占位符。 像这样:

public void update(User user){
        try{
        Connection conn = DbUtils.getConnection();
        PreparedStatement ps = conn.prepareStatement("UPDATE db.db set id = ?,username = ?,password = ?,firstname = ?, lastname = ?, fathersname =?, gender = ?, email = ?,address =? , phnno = ?, courses = ?" + " WHERE id =?");
        ps.setInt(1, user.getId());
        ps.setString(2, user.getName());
        ps.setString(3, user.getPwd());
        ps.setString(4, user.getFname());
        ps.setString(5,  user.getLname());
        ps.setString(6, user.getFathername());
        ps.setString(7, user.getAddress());
        ps.setString(8, user.getEmail());
        ps.setString(9, user.getGender());
        ps.setString(10, user.getPhno());
        ps.setString(11, user.getCradio());
        ps.setInt(12, user.getId()); //parameter 12 added
        ps.execute();           
        }catch(Exception e){
            e.printStackTrace();            
    }

您真的要更新 ID 字段吗?

【讨论】:

    猜你喜欢
    • 2014-07-25
    • 2023-03-14
    • 1970-01-01
    • 2018-03-02
    • 2021-09-05
    • 2022-01-11
    相关资源
    最近更新 更多