Java 在删除数据库中间的一些行之后,有没有办法滚动SQL中的所有行?
我正在尝试滚动我的所有数据库(用于显示所有常量等操作) 在我删除SQL数据库中间的一些行之前,一切都很好。 我使用person id作为主键,并尝试使用该键滚动数据。 personId也是自动递增的 这是我删除前的数据库,我可以很好地滚动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
+------------------------------+
| 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;
}
}