受影响的行数,SQL

时间:2016-04-18 10:35:02

标签: java mysql sql jdbc

我一直在阅读一些与我的问题相关的其他主题,但无法找到一个好的答案,所以我决定写自己的。 我正在处理的问题:

一个带有两个参数的java方法,餐馆名称和rateid。 此方法更新数据库(在本例中为delete)并返回一个布尔值(如果已删除则为true;如果未找到要使用指定条件删除的记录,则为false)。

我虽然可以通过分别检查受影响的行数来赋予此布尔值:如果受影响的行数为0,则布尔值应为false,否则应为true。 但我被困在这部分代码中因为我​​无法找到计算受影响行数的方法...... 方法如下:

public boolean deleteRate(String restaurantname,int rateid){
        boolean result = false;
        db = new Database();
        String updatesql ;

        updatesql = "delete from rate where  id = ? and restaurantname = ?";

    try{
        dbConnection = db.getDBConnection();
        preparedStatement = dbConnection.prepareStatement(updatesql);
        preparedStatement.setInt(1,rateid);
        preparedStatement.setString(2, restaurantname);
        db.setPreparedStatement(preparedStatement);
        int count = db.getPreparedStatement().executeUpdate();

        //System.out.println(count);
        if (count == 0 ){
            result = false;
        }

        else {
            result = true ;
        }

        recomputeAverageRate(restaurantname);

    }catch(SQLException ex){

    }

    return result ;

}

每次我删除时,计数都等于0。 如果能得到一些帮助,我会很高兴的。 如果有更简单的方法或简单的方式或不同的方式来获得结果我需要我对你的所有建议持开放态度! 等待回应。 谢谢

数据库表Rate tupples:

int Id primary key ,
int count ,
varchar comment , 
varchar restaurantname ,
varchar phone , 
varchar registrationtime 

1 个答案:

答案 0 :(得分:2)

我有一些尝试我的本地代码,我得到了你想要的预期结果。

代码:

            preparedStatement = dbConnection.prepareStatement("drop table if exists rate; "
                    + "create table rate(id int, restaurantname varchar(20)); "
                    + "insert into rate values(1,'a'),(2,'b'),(1,'a')");
            preparedStatement.execute();

            String updatesql ;
            updatesql = "delete from rate where  id = ? and restaurantname = ?";
//          dbConnection = db.getDBConnection();
            preparedStatement = dbConnection.prepareStatement(updatesql);
            preparedStatement.setInt(1,1);
            preparedStatement.setString(2, "a");
//          db.setPreparedStatement(preparedStatement);
            int count = preparedStatement.executeUpdate();
            //System.out.println(count);
            boolean result = count > 0;
            System.out.println("count : " + count + ", result : " + result);

结果:

count : 2, result : true

因此,我认为问题可能在于表中的数据,而不是java代码。