为了账号安全,请及时绑定邮箱和手机立即绑定

删除数据库中间的一些行后,有什么方法可以滚动 SQL 中的所有行吗?

删除数据库中间的一些行后,有什么方法可以滚动 SQL 中的所有行吗?

月关宝盒 2024-01-05 10:27:55
我正在尝试滚动我的所有数据库(对于某些操作,例如显示所有常量等),一切都很好,直到我删除了 SQL 数据库中间的一些行。我使用人员 ID 作为我的主键,并尝试使用该键滚动数据。personId 也是自动增量的。这是删除之前我的数据库,我可以很好地滚动+------------------------------+| personId |  name  |  family  |+------------------------------+| 1        | name1  | family1  || 2        | name2  | family2  || 3        | name3  | family3  || 4        | name4  | family4  || 5        | name5  | family5  || 6        | name6  | family6  |+------------------------------+这是我删除后的数据库+------------------------------+| personId |  name  |  family  |+------------------------------+| 1       | name1  | family1  | <-- num2 is deleted| 3        | name3  | family3  | <-- num4 is deleted| 5        | name5  | family5  || 6        | name6  | family6  |+------------------------------+我已经尝试过:1. use ROW_NUMBER() function in WHERE clause.2. reset personId number and auto incremental.3. sort data by date created in Unix-time.但他们的逻辑是错误的,有的甚至行不通。这是检索 SQL 数据库的特定行的代码。我的主要问题起源于哪里(=开始)。Person类包括personId和姓名以及家族属性并有Getter和Setter方法。您可以在页面末尾看到它。public static Person getRow(int rowNumber) throws SQLException {    String sql = "SELECT * FROM person WHERE personId = ?";    ResultSet rs = null;    try (            Connection con = DriverManager.getConnection(...)            PreparedStatement stmt = con.prepareStatement(sql);    ) {        stmt.setInt(1, rowNumber);        rs = stmt.executeQuery();        if (rs.next()) {                        Person bean = new Person(rowNumber, rs.getString("name"),                                   rs.getString("family"));            return bean;        } else {            System.err.println("No rows were found!");            return null;        }    } catch (SQLException e) {        System.err.println(e);        return null;    } finally {        if (rs != null) {            rs.close();        }    }}
查看完整描述

2 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

经过大量搜索我终于找到了答案。


您可以使用 resultSet.absolute(row_number) 方法来实现此目标。像这样编写 getRow() 方法主体:


public static Person getRow(int rowNumber) throws SQLException {

    String sql = "SELECT * FROM profiles";

    try (

            Connection connection = DBUtil.getConnection();

            Statement statement = connection.createStatement();

            ResultSet resultSet = statement.executeQuery(sql);

    ) {

        if (resultSet.absolute(rowNumber)) {

            return new Person(resultSet.getInt("personId"), resultSet.getString("name"), 

                       resultSet.getString("family"), resultSet.getString("nationalId"));

        } else {

            System.err.println("No row were found !");

            return null;

        }

    } catch (SQLException e) {

        System.err.println(e);

        return null;

    }

}

当然,您将通过这种方式检索所有数据库。但它对于像我这样大的数据库工作得很好(;


查看完整回答
反对 回复 2024-01-05
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

原因就在这里。您使用 rowNumber 来搜索 personId。您不应该对哪些值有 rowNumber 做任何假设。相反,按 personId 搜索。



查看完整回答
反对 回复 2024-01-05
  • 2 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信