Вставить много строк в базу данных H2, а затем прочитать его в список - PullRequest
0 голосов
/ 27 октября 2018

Я хочу вставить несколько строк в таблицу H2, а затем снова записать их в список.

Однако я всегда получаю в свой resultSet последний выполненный оператор.

Кроме того, явсегда получаю эту ошибку:

org.h2.jdbc.JdbcSQLException: Feld "username" nicht gefunden Столбец "username" не найден [42122-197]

Здесьмой код:

 @Test
 public void testInsertAndReadForList() throws SQLException {
        User userA = new User(null, "UserA", "passwordA");
        User userB = new User(null, "UserB", "passwordB"

        String insertStmt = "INSERT INTO user(username, password) " +
        "VALUES(?, ?)";

       PreparedStatement insertPrepStmt = connection.prepareStatement(insertStmt, Statement.RETURN_GENERATED_KEYS);
       insertPrepStmt.setString(1, userA.getUsername());
       insertPrepStmt.setString(2, userA.getPassword());
       insertPrepStmt.executeUpdate();

       insertPrepStmt.setString(1, userB.getUsername());
       insertPrepStmt.setString(2, userB.getPassword());
       insertPrepStmt.executeUpdate();

       int affectedRows = insertPrepStmt.executeUpdate();
       assertThat(affectedRows).isEqualTo(1);

       ResultSet resultSet = insertPrepStmt.getGeneratedKeys();

       List<User> newResultSet = new ArrayList<>();
       int i = 0;

       while(resultSet.next()) {
           i++;
           newResultSet.add(new User(resultSet.getLong(i), 
           resultSet.getString("username"), resultSet.getString("password")));
       }
   }

Может быть, кто-то может сказать мне, что я здесь не так делаю?

1 Ответ

0 голосов
/ 27 октября 2018

Я смог решить это сам:

int counter = 0;

PreparedStatement insertPrepStmt = connection.prepareStatement(insertStmt, Statement.RETURN_GENERATED_KEYS);
insertPrepStmt.setString(1, userA.getUsername());
insertPrepStmt.setString(2, userA.getPassword());
int affectedRows = insertPrepStmt.executeUpdate();
assertThat(affectedRows).isEqualTo(1).isGreaterThan(0);
ResultSet resultSet = insertPrepStmt.getGeneratedKeys();
assertThat(resultSet.next()).isTrue();
counter++;

insertPrepStmt.setString(1, userB.getUsername());
insertPrepStmt.setString(2, userB.getPassword());
affectedRows = insertPrepStmt.executeUpdate();
assertThat(affectedRows).isEqualTo(1).isGreaterThan(0);
resultSet = insertPrepStmt.getGeneratedKeys();
assertThat(resultSet.next()).isTrue();
counter++;

readFromDatabase(resultSet, counter); <!-- and here the reading will be done via counter variable -->
...