ExecuteUpdate в Java успешно добавляет записи в PostgreSQL, но таблица не будет обновляться - PullRequest
0 голосов
/ 25 апреля 2018

В настоящее время я добавляю данные в базу данных PostgreSQL через executeUpdate, основываясь на входных данных со стороны приложения Spring Boot. Я добавляю comment, longitude, latitude, address и username в таблицу обзора, используя следующий код в методе java.

Я передаю информацию в метод в классе контроллера, используя эту строку:

addReviewMethod.addReview( comment,  longitude,  latitude,  address,  username);

И это передаст данные в другой класс Java и вставит их в таблицу следующим образом:

public void addReview(String comment, double longitude, double latitude, String address, String username) {

    Connection c = null;
    Statement stmt = null;

    try {
         Class.forName("org.postgresql.Driver");
         c = DriverManager
            .getConnection("jdbc:postgresql://localhost:5432/arearatingpgdb",
            "postgres", "root");
         c.setAutoCommit(false);

         stmt = c.createStatement();
         int rs = stmt.executeUpdate( "INSERT INTO reviews VALUES (nextval('reviews_id_seq'::regclass), '" +comment +" '," +longitude+"," +latitude+", '"+address+"', '"+username+"');" );

         System.out.println("Successfully added: " +  comment + longitude + latitude + address + username);
        /* while ( rs.next() ) {
            Review  review = rs.getDouble("price");
            System.out.println();
            housePrices.add(price);
         }*/
         //rs.close();
         stmt.close();
         c.close();
      } catch ( Exception e ) {
         System.err.println( e.getClass().getName()+": "+ e.getMessage() );
         System.exit(0);
      }
}

Я включил отладчики печати как в класс контроллера, так и в класс, который выполняет вставку, и они выводят правильную информацию, которая показывает, что все операции будут работать правильно.

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я просматриваю содержимое таблицы, т.е. select * from reviews в pgAdmin4, единственные строки в таблице - это те, которые я жестко закодировал. Еще более странно, когда я жестко кодирую другую строку в таблице с помощью инструмента запросов столбцы идентификаторов отражают, что строки были фактически добавлены со стороны Java, но они не отображаются в таблице. Например, я жестко закодировал в 2 строки, затем я попытался запустить методы 4 раза, затем я жестко запрограммировал еще 2 строки, и база данных выглядит следующим образом.

 id | val 
----+-----
  1 | foo
  2 | bar
  6 | foo
  7 | bar

Я что-то здесь не так делаю?

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Соединения в Java автоматически фиксируются по умолчанию.В своем коде вы специально настроили автоматическую фиксацию вашего соединения на false.Код можно исправить двумя способами:

  • Комментарий ниже сегмента кода

    c.setAutoCommit (false);

  • Передайте изменения перед закрытием оператора

    c.commit ();

0 голосов
/ 25 апреля 2018

Вы должны добавить c.commit () непосредственно перед закрытием объекта Connection. Потому что это утверждение будет постоянно сбрасывать ваши изменения в базу данных. setAutoCommit (false) изменяет поведение неявной фиксации транзакции, и транзакция должна быть явно зафиксирована с помощью commit ().

0 голосов
/ 25 апреля 2018

Вы должны зафиксировать эти изменения.

, также сделайте c.commit() до stmt.close() или просто измените c.setAutoCommit(false); на c.setAutoCommit(true);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...