2012-03-15 43 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