亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

刪除數據庫中間的一些行后,有什么方法可以滾動 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 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號