2011-02-26 28 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(); 
} 

不知道它有多快,这是的,但如果速度不是问题... `

相关问题