您的位置:首页 > 其它

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

2017-07-24 17:08 169 查看

关于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参数的设置。

以上是小白我在实际开发过程中踩过的坑,希望可以为你们解决一些小难题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: