2011-02-26 59 views
1

我有這個select查詢。如何知道查詢是否在數據庫中找到匹配項?如何測試sql查詢是否在java中返回true

try{ 
     PreparedStatement fetchPlayers = conn.prepareStatement("SELECT * FROM players WHERE P_Name='" + player + "'"); 
     fetchPlayers.executeQuery(); 



     }catch(Exception e){} 

我想這樣做,但即使我輸入的東西是不是在數據庫中它總是返回true。

if(fetchPlayers.execute()==true){ 
     System.out.println("True"); 
     } 

回答

6

PreparedStatement.execute()返回

真;如果第一個結果是更新計數或沒有結果,則爲false

改爲使用executeQuery()。您感興趣的是返回的ResultSet是否具有正數。

ResultSet rs = statement.executeQuery(query); 
if (rs.next()) { 
    // curser has moved to first result of the ResultSet 
    // thus here are matches with this query. 
} 
1

你可以檢查所返回多少列,並從該看看它大於0:

ResultSet resultSet = statement.executeQuery(query); 
ResultSetMetaData metaData = resultSet.getMetaData(); 
int columncount = metaData.getColumnCount(); 
if (columncount > 0) { 
    System.out.println("Match found!"); 
} 
1

the doc

返回: 真,如果第一結果是一個ResultSet對象;假的,如果它是一個 更新計數或者不存在任何結果

你的語句返回(雖然空)ResultSet

您是否嘗試過使用if exists?或者至少得到ResultSet並重復它,計算條目並確定是否存在任何條目(效率較低,但這可能不是問題)。

(正如保羅所指出的,你不應該串聯SQL字符串,因爲這讓你開到SQL injection attacks,相反,你應該使用的參數設置在PreparedStatement對象的方法)

4

首先,你不應該構建您的語句通過字符串連接,但使用佔位符和setXXX方法。

的executeQuery()返回一個結果集,並且這具有一些方法來遍歷的結果。例如,next()方法在沒有更多行的情況下返回false。如果第一結果爲ResultSet對象

0

一個簡單的方法來做到這一點可能是:

resultSet.last() 
if (resultSet.getRow() < 1){ 
    // process case with no results 
}else{ 
    // process case with results 
    resultSet.beforeFirst(); 
} 

不知道它有多快,這是的,但如果速度不是問題... `

相關問題