2012-03-15 34 views
0

我试图使用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子句中的第三个条件是char)。

+6

z或Z?以及为什么你不使用'preparedStatement.setString(3,“z”);'? – 2012-03-15 10:14:01

+0

请填写 – 2012-03-15 10:26:57

+2

中导入的连接相关代码和库当您说'准备好的语句无法正常工作'时,您的意思是您遇到错误,还是您的意思是您没有得到任何结果? – codeulike 2012-03-15 10:37:49

回答

1

这两个查询是不同的,蟾蜍你发出

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

您不需要在setPara中指定Oracle CHAR参数作为Java char米,所以改变

preparedStatement.setString(3,String.valueOf('Z')); 

要么

preparedStatement.setString(3,"z"); 

preparedStatement.setString(3,String.valueOf('z')); 

可能会工作。

+0

preparedStatement.setString(3,“z”);没有工作要么.. – suhaskaranth 2012-03-15 17:06:36

+0

然后,我会检查连接设置,你确定你正在使用相同的用户/架构在TOAD和你的代码连接? – beny23 2012-03-16 08:30:20