2011-03-03 38 views
1

我需要在Java中使用字符串列表做一个大的SQL查询对一个MySQL数据库,例如:逃逸字符串为MySQL在Java中

SELECT * FROM db_table WHERE id IN (....); 

不幸的是,输入API有几分限制在这里和我只给出一个字符串列表作为输入。

通常我只想用一个参数化查询,但不会允许我通过一个逗号分隔的列表,以便像下面这样将无法工作:

SELECT * FROM db_Table WHERE id IN (?); 
preparedStaement.Set(1, "A,B,C,D,E"); 

我在这个线程了一下:PreparedStatement IN clause alternatives?

不幸的是没有更具创意的选项可以工作,因为我没有对数据库的写入权限,所以我不能创建临时表。

那么 - 任何想法?我只关心MySQL作为底层的源代码,所以如果解决方案是特定于MySQL的,那很好。

在此先感谢

编辑:单独逃离每个字符串将被罚款 - 但有什么办法呢,在Java中?我没有找到很好的运气,我只能从apache看到一些我不能使用的东西。

- 丹

+1

所以也是我所链接的主题中回答没有帮助?另一种方式:顺便说一句:http://stackoverflow.com/questions/2861230/what-is-the-best-approach-using-jdbc-for-parameterizing-an-in-clause – BalusC 2011-03-03 03:19:41

+0

我确实看到 - 我是希望我不必这样做 - 但我想因为没有更好的答案 - 我会去那样做。 – debracey 2011-03-03 14:21:19

回答

2

你有两个明显的选择:

  1. 构建查询动态以及其输入。也就是说,对于需要包含的每个字符串,添加一个?在将其传递给PreparedStatement之前查询。

    SELECT * FROM table WHERE id = ? OR id = ? OR id = ? OR id = ? ...

  2. 不要使用绑定在这里。单独转义字符串并将其直接放入查询中。

...可能还有一些不太明显的选项,我没有想到。

+0

单独转义字符串会很好 - 但是有没有一些方法可以在Java中执行?我可以写我自己的 - 但我觉得有很多角落案例 – debracey 2011-03-03 02:57:53