我在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的使用有些不必要。
有没有办法解决这个而不改变实际查询,只有插入的值?
答案 0 :(得分:2)
我可以更改查询并使用ie" a<> 0"
根据您的要求,这应为a IS NOT NULL
。
但这需要额外的代码,并且使用prepareStatement有点不必要。
PreparedStatement对于VARCHAR列来说是必要的,并且似乎在所有场景中都存在。
pStatement.setString(2"%&#34);
这不会匹配所有字符串,LIKE
需要%
运算符才能具有其特殊含义。
有没有办法在不改变实际查询的情况下解决这个问题,只有插入的值?
不,IMO,因为要求根本不同,您需要相应地进行查询。