我正在尝试使用preparedStatement从数据库中获取一行,代码如下所示:
PreparedStatement preparedStatement = null;
Connection con = new Connection () //pseudo Code added here
String query = "select * from abc where a=? and b=? and c=?";
preparedStatement = con.prepareStatement(query);
preparedStatement.setString(1,"x");
preparedStatement.setString(2,"y");
preparedStatement.setString(3,String.valueOf('Z'));
ResultSet resultset = preparedStatement.executeQuery();
if(resultset.next() == false)
{
throw new exception("No records fetched");
}
但是通过 TOAD 执行以下查询时,会返回一行:
select * from abc where a='x' and b='y' and c='z';
我在这里做错了什么? (where子句中的第三个条件是一个字符)。
最佳答案
这两个查询是不同的,在您发出的 TOAD 中
select * from abc where a='x' and b='y' and c='z'
而根据您准备好的声明,您所做的相当于:
select * from abc where a='x' and b='y' and c='Z'
z
与 Z
您不需要在 setParameter 中将 Oracle CHAR
参数指定为 Java char
,因此更改
preparedStatement.setString(3,String.valueOf('Z'));
到任一
preparedStatement.setString(3,"z");
或
preparedStatement.setString(3,String.valueOf('z'));
可能会起作用。
关于java - 即使在蟾蜍中运行时相同的查询返回一行,准备好的语句也不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9717597/