如何在JDBC中使用mysql IN比较函数

时间:2010-07-10 22:16:04

标签: java mysql 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();
....

但这不起作用,我发现它几乎不可能在网上找到任何参考。

1 个答案:

答案 0 :(得分:1)

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

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类型。