猿问

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

我正在尝试滚动我的所有数据库(对于某些操作,例如显示所有常量等),一切都很好,直到我删除了 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();

        }

    }

}



月关宝盒
浏览 101回答 2
2回答

哔哔one

经过大量搜索我终于找到了答案。您可以使用 resultSet.absolute(row_number) 方法来实现此目标。像这样编写 getRow() 方法主体:public static Person getRow(int rowNumber) throws SQLException {&nbsp; &nbsp; String sql = "SELECT * FROM profiles";&nbsp; &nbsp; try (&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Connection connection = DBUtil.getConnection();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Statement statement = connection.createStatement();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ResultSet resultSet = statement.executeQuery(sql);&nbsp; &nbsp; ) {&nbsp; &nbsp; &nbsp; &nbsp; if (resultSet.absolute(rowNumber)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return new Person(resultSet.getInt("personId"), resultSet.getString("name"),&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;resultSet.getString("family"), resultSet.getString("nationalId"));&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.err.println("No row were found !");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; } catch (SQLException e) {&nbsp; &nbsp; &nbsp; &nbsp; System.err.println(e);&nbsp; &nbsp; &nbsp; &nbsp; return null;&nbsp; &nbsp; }}当然,您将通过这种方式检索所有数据库。但它对于像我这样大的数据库工作得很好(;

慕田峪9158850

原因就在这里。您使用 rowNumber 来搜索 personId。您不应该对哪些值有 rowNumber 做任何假设。相反,按 personId 搜索。
随时随地看视频慕课网APP

相关分类

Java
我要回答