关于PreparedStatement以及Jpa中in参数的设置

来源:互联网 发布:用手机淘宝买东西步骤 编辑:程序博客网 时间:2024/06/06 01:57

关于PreparedStatement以及Jpa中in参数的设置

在实际开发的过程中,都会遇到sql语句需要传in的参数的问题,小白我在开发的过程中也踩了好多坑,今天这里结合一些大大给的答案,简单的总结一下使用PreparedStatement以及在JPA中使用Query时, in后面的参数设置的方法。

PreparedStatement in参数设置

PreparedStatement中本身提供的方法setArray()方法并不适用于mysql,当你在使用的过程中会报SQLFeatureNotSupportedException异常。这里如果需要设置in的参数,需要对参数进行拼接。下面提供案例:

public void function(String [] list){        StringBuffer buffer = new StringBuffer();        for (int i = 0; i < list.length; i++) {            buffer.append("?, ");        }        buffer.deleteCharAt(buffer.length() - 1);        buffer.deleteCharAt(buffer.length() - 1);        String sql = "select * from Student a where a.id in ("+buffer+")";        Connection con = null;        PreparedStatement pstmt = null;        ResultSet rs = null;        try {            con = DbConnectionManager.getConnection();            pstmt = con.prepareStatement(sql);            for (int i = 0; i < list.length; i++) {                pstmt.setString(i + 1, list[i]);            }            rs = pstmt.executeQuery();            if (rs.next()) {            ........            }        } catch (Exception e) {            ........        } finally {            DbConnectionManager.closeConnection(rs, pstmt, con);        }    }

这里采用字符串拼接的方法,拼接出类似(?, ?, ?)的参数方式来实现in的参数设置

JPA query查询语句中实现in的参数设置

在使用JPA query时我们会发现并没有hibernate提供setParameterList方法,这个时候,如果要对in的参数进行设置,我们可以采用query原生的setParameter方法,不过在使用setParameter方法时,需要将数组进行转换,转换为对应的list对象,传入参数中,下面案例提供参考。

public void function(String [] list) {        String sql = "select * from Student a where a.id in (?1)";        Query query = entityManager.createNativeQuery(sql);        List<String> res = new ArrayList<String>(list.length);        for (String s:list){            res.add(s);        }        query.setParameter(1, res);    }

这样我们就可以实现in参数的设置。

以上是小白我在实际开发过程中踩过的坑,希望可以为你们解决一些小难题。

原创粉丝点击