Я пытаюсь прокрутить всю свою базу данных (для некоторых действий, таких как показать все константы и т. Д.), Все в порядке, пока я не удалил несколько строк в середине моей базы данных SQL. Я использую идентификатор лица в качестве основного ключа и пытаюсь прокрутить данные с помощью этого ключа. 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 |
+------------------------------+
IЯ уже пытался:
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();
}
}
}
Это displayAllRows (), который будет вызывать getRow (int rowNumber) для 1, чтобы закончить как 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);
}
}
Вот класс человека
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 |
+-------------------------+
И 2 раза ошибка "Строка не найдена".