jdbc preparedStatement的数字通配符?

时间:2012-11-29 16:28:19

标签: java mysql jdbc

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

考虑这样的查询: 域名:int,b文本;

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的使用有些不必要。

有没有办法解决这个而不改变实际查询,只有插入的值?

1 个答案:

答案 0 :(得分:2)

  

我可以更改查询并使用ie" a<> 0"

根据您的要求,这应为a IS NOT NULL

  

但这需要额外的代码,并且使用prepareStatement有点不必要。

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

  

pStatement.setString(2"%&#34);

这不会匹配所有字符串,LIKE需要%运算符才能具有其特殊含义。

  

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

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