当前位置: 首页 > 知识库问答 >
问题:

JDBC与MySQL-SELECT... IN

华森
2023-03-14

使用PreparedStatement生成如下所示的查询。。。

SELECT * FROM table1 WHERE column1 IN ('foo', 'bar')

...不知道in语句中的字符串

构造一个字符串就像...

"'foo', 'bar'"

...用ps.setString()传递它会导致:

"\'foo\', \'bar\'"

这可能是一件好事,但它使这种解决我问题的方法毫无用处。

关于如何在不动态创建查询字符串的情况下将未知数量的值传递到JDBC PreparedStatement中(这个查询保存在一个文件中,以便于重用,我希望保持这种方式),有什么想法吗?

共有1个答案

施自珍
2023-03-14

我倾向于使用修改查询的方法来相应地修改查询。为了简单起见,这是一个省略错误处理的基本示例:

public String addDynamicParameters(String query, List<Object> parameters) {
    StringBuilder queryBuilder = new StringBuilder(query);
    queryBuilder.append("?");
    for (int i = 1; i < parameters.size(); i++) {
        queryBuilder.append(", ?");
    }
    queryBuilder.append(") ");
    return queryBuilder.toString();
}

public void addParameters(PreparedStatement pstmt, List<Object> parameters) {
    int i = 1;
    for(Object param : parameters) {
        pstmt.setObject(i++, param);
    }
}

public void testDynamicParameters() {
    String query = "SELECT col3 FROM tableX WHERE col1 = ? AND col2 IN (";
    List<Object> parametersForIn = ...;
    query = addDynamicParameters(query, parametersForIn);
    List<Object> parameters = ...;
    PreparedStatement pstmt = ...; //using your Connection object...
    parameters.addAll(parametersForIn);
    addParameters(pstmt, parameters);
    //execute prepared statement...
    //clean resources...
}
 类似资料:
  • 问题内容: 我有一个使用JDBC连接到MySQL的应用程序。在某些情况下,JDBC连接空闲数小时(甚至几天),并且失去与MySQL的连接,然后尝试执行查询时除外。最好的解决方案是什么? 问题答案: 保持连接打开时间不足是一个坏习惯。当数据库打开时间过长时,它将强制关闭。您应该编写JDBC代码,以便它总是在您获取它们的同一块块中关闭连接(以及语句和结果集),以防止这样的资源泄漏。 但是,获取每个连接

  • 本文向大家介绍MySQL SELECT WHERE,包括了MySQL SELECT WHERE的使用技巧和注意事项,需要的朋友参考一下 示例 询问 结果 使用WHERE子句中的嵌套SELECT查询 该WHERE子句可以包含任何有效的SELECT语句以编写更复杂的查询。这是一个“嵌套”查询 询问 嵌套查询通常用于从查询中返回单个原子值以进行比较。 选择所有没有电子邮件地址的用户名 免责声明:比较整个

  • 本文向大家介绍MySQL SELECT...LIKE (%),包括了MySQL SELECT...LIKE (%)的使用技巧和注意事项,需要的朋友参考一下 示例 任意位置的“ adm”: 以“ adm”开头: 以“ adm”结尾: 正如%一个字符LIKE条款任意数目的字符匹配,_匹配字符一个字符。例如, 性能说明如果上有一个索引username,则 LIKE 'adm' 执行与`='adm'相同的

  • 问题内容: 我在理解如何执行一些INSERT SELECT时有些困难。 例如我有两个表。 现在,假设我要向表网站添加另一个查询。我得到两个变量,可以说: 我想从用户表中选择John的ID,然后在一条语句中将其插入网站表中。 我该怎么做? 问题答案: 假设您的变量已经正确地转义并且没有注入:

  • 问题内容: MySQL很棒!我目前参与大型服务器迁移,以前,我们的小型数据库曾经托管在与客户端相同的服务器上。 所以我们曾经这样做: 现在,我们将数据库移至另一台服务器,并且不再工作,这是可以理解的- 我认为是安全原因。但是,有趣的是,可以将其更改为bam,并且可以使用。 我没有抱怨,也没有对MySQL表示厌恶。替代方法是添加两行额外的代码和一个系统调用以形成一个.sql脚本。我只想知道为什么会起

  • 本文向大家介绍mysql中insert与select的嵌套使用方法,包括了mysql中insert与select的嵌套使用方法的使用技巧和注意事项,需要的朋友参考一下 本文讲述了mysql中insert与select的嵌套使用的方法,对于初学MySQL的朋友有一定的借鉴价值。 这里需要实现在mysql从多个表中组合字段然后插入到一个新表中,通过一条sql语句实现该功能需求。具体情形是:有三张表a、