3

我正在使用 JDBC 中的 prepareStatement 进行查询。我有时会插入一个“数字通配符”而不是实际数字。

考虑这样的查询: Domains: a int, b text;

pStatement = 
    dbConnection.prepareStatement("SELECT * FROM R1 WHERE a LIKE ? AND b LIKE ?");

有时我想:

pStatement.setInt(1, 10);
pStatement.setString(2,"%");
pStatement.exequteQuery();

这没问题,因为通配符是一个字符串。

其他时候我想:

pStatement.setInt(1, ANY_INT_SHOULD_BE_VALID);
pStatement.setString(2, "Hello");
pStatement.exequteQuery();

那是行不通的。我可以更改查询并使用即“a <> 0”,但这需要额外的代码并且使得使用prepareStatement 有点不必要。

有没有办法在不改变实际查询的情况下解决这个问题,只改变插入的值?

4

1 回答 1

2

我可以更改查询并使用即“a <> 0”

根据您的要求,这应该是a IS NOT NULL.

但这需要额外的代码,并且在某种程度上没有必要使用 prepareStatement。

PreparedStatement 对于 VARCHAR 列是最必要的,并且似乎在所有场景中都存在。

pStatement.setString(2,"%");

这不会匹配所有字符串,因为LIKE需要操作符%来获取其特殊含义。

有没有办法在不改变实际查询的情况下解决这个问题,只改变插入的值?

不,IMO,由于要求根本不同,您需要相应地进行查询。

于 2012-11-29T16:37:45.290 回答