Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在删除数据库中间的一些行之后,有没有办法滚动SQL中的所有行?_Java_Mysql_Sql_Sql Delete_Delete Row - Fatal编程技术网

Java 在删除数据库中间的一些行之后,有没有办法滚动SQL中的所有行?

Java 在删除数据库中间的一些行之后,有没有办法滚动SQL中的所有行?,java,mysql,sql,sql-delete,delete-row,Java,Mysql,Sql,Sql Delete,Delete Row,我正在尝试滚动我的所有数据库(用于显示所有常量等操作) 在我删除SQL数据库中间的一些行之前,一切都很好。 我使用person id作为主键,并尝试使用该键滚动数据。 personId也是自动递增的 这是我删除前的数据库,我可以很好地滚动 +------------------------------+ | personId | name | family | +------------------------------+ | 1 | name1 | family1

我正在尝试滚动我的所有数据库(用于显示所有常量等操作) 在我删除SQL数据库中间的一些行之前,一切都很好。 我使用person 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  |
+------------------------------+
但它们的逻辑是错误的,有些甚至不起作用

这是检索特定SQL数据库行的代码。我的主要问题是从哪里开始的

Person类包括personId、name和family属性以及Getter和Setter方法。你可以在这一页的末尾看到它

这是displayAllRows(),它将为1调用getRow(int rowNumber)以rowNumber结束

public static void displayAllRows() throws SQLException {
    String sql = "SELECT * FROM profiles";
    try (
            Connection connection = DriverManager.getConnection(...)
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(sql);
    ) {
        int rowNumber = 0;
        while (resultSet.next()) {
            Person bean = getRow(++rowNumber);
            System.out.println(bean.personId + ". " + bean.name + "  " + bean.family); 
        }

    } catch (SQLException e) {
        System.err.println(e);
    }
}
这是person类


我知道还有其他更好的方式来显示数据。但不要忘记所有这些的主要问题和主要目标

我希望检索所有数据,但取而代之的是检索有缺陷的数据和Row not found异常消息

我期望:

+-------------------------+
| Row |  name  |  family  |
+-------------------------+
| 1   | name1  | family1  |
| 2   | name3  | family3  |
| 3   | name5  | family5  |
| 4   | name6  | family6  |
+-------------------------+
但我得到的却是:

+-------------------------+
| Row |  name  |  family  |
+-------------------------+
| 1   | name1  | family1  |
| 3   | name5  | family5  |
+-------------------------+
和2次“未找到行”错误


原因就在这里。您可以使用rowNumber搜索personId。您不应该对rowNumber中包含的值进行任何假设。取而代之的是用personId搜索。

经过多次搜索,我终于找到了答案

您可以使用resultSet.absolute(行数)方法实现此目标。 编写getRow()方法体,如下所示:


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

你能不能也指定profiles表中的内容?A
personId
不是一个行号,那么为什么
getRow()
名为
rowname
的参数。如果您认为
personId
是一个行号,请再想一想,它不是!它是特定人员记录的唯一标识符,即使添加和删除其他人员,它也将保持不变。“我正在尝试滚动我的所有数据库”很抱歉,但我不理解“滚动”在此上下文中,“滚动我的所有数据库”是什么意思?您是否试图列出表中的所有数据?
public class Person {

    private int personId;
    private String name;
    private String family;

    public Person(int personId, String name, String family) {
        this.personId = personId;
        this.name = name.trim();
        this.family = family.trim();
    }

    public Person() {}

    public int getPersonId() {return personId;}
    public void setPersonId(int personId) {this.personId = personId;}
    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
    public String getFamily() {return family;}
    public void setFamily(String family) {this.family = family;}     
}
+-------------------------+
| Row |  name  |  family  |
+-------------------------+
| 1   | name1  | family1  |
| 2   | name3  | family3  |
| 3   | name5  | family5  |
| 4   | name6  | family6  |
+-------------------------+
+-------------------------+
| Row |  name  |  family  |
+-------------------------+
| 1   | name1  | family1  |
| 3   | name5  | family5  |
+-------------------------+
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;
    }
}