如何测试sql查询在java中是否返回true

时间:2011-02-26 11:58:55

标签: java mysql jdbc

我有这个选择查询。我如何知道查询是否在数据库中找到了匹配项?

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");
        }

5 个答案:

答案 0 :(得分:6)

PreparedStatement.execute()返回

  

如果第一个结果是ResultSet对象,则为true;如果第一个结果是更新计数或没有结果

,则返回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 :(得分:4)

首先,您不应该通过字符串连接构造语句,而是使用占位符和setXXX方法。

executeQuery()返回一个ResultSet,这有一些迭代结果的方法。例如,next()方法在没有更多行的情况下返回false。

答案 2 :(得分:1)

您可以检查返回的列数,并从中查看是否大于0:

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

答案 3 :(得分:1)

来自the doc

  

返回:       如果第一个结果是ResultSet对象,则为true;否则为false。如果它是一个假的   更新计数或没有结果

你的陈述正在返回一个(尽管是空的)ResultSet

您是否尝试过使用if exists?或者至少获取ResultSet并迭代它,计算条目并确定是否存在任何条目(效率较低,但这可能不是问题)。

(正如Paŭlo所说,你不应该连接SQL字符串,因为这会让你对SQL injection attacks开放。而应该使用PreparedStatement对象中的参数设置方法

答案 4 :(得分:0)

执行此操作的简单方法可能是:

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

不确定这有多快,但如果速度不是对象...... `