繁体   English   中英

如何在JDBC中使用mysql IN比较功能

[英]How to use mysql IN comparison function with JDBC

这似乎很简单,但无法在网上搜索...

我有一个遗留应用程序,该应用程序不使用任何框架而直接使用JDBC,并且必须添加一些新功能。 我在寻找如何通过JDBC使用IN()函数时遇到问题。

我想进行如下查询

SELECT * from animals WHERE animal_name IN (...)

其中...是值的数组。 使用JDBC,我想我会做以下事情。

PreparedStatement st = conn.prepareStatement("SELECT * from animals WHERE animal_name IN (?);");
st.setArray(arrayVals);
ResultSet rs = st.executeQuery();
....

但这是行不通的,而且我几乎无法在网络上找到对此的任何引用。

用以下代码替换您的代码:

StringBuilder sb = new StringBuilder("SELECT * from animals WHERE animal_name IN (");
// 1. assemble query parameters
for (int i = 0; i < arrayVals.size(); i++) {
    sb.append("?");
    if (i + 1 < arrayVals.size()) sb.append(",");
}
sb.append(")");
// 2. add the variables
PreparedStatement st = conn.prepareStatement(sb.toString());
for (int i = 0; i < arrayVals.size(); i++) {
    // May need to replace setter depending on type of object
    st.setObject(i + 1, o);
}

或者,使用spring JDBC JdbcTemplate,您可以将第2部分替换为:

jdbcTemplate.query(sb.toString(), arrayVals.toArray(), animalRowMapper);

JdbcTemplate将确定每个参数所需的sql类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM