Задать вопрос
@yourdreambtw

Как исправить ошибку Can't use query methods that take a query string on a PreparedStatement?

Хочу внести в таблицу новое значение, но вылетает ошибка, хотя, если зайти в саму таблицу, то значения показываются:
org.postgresql.util.PSQLException: Can't use query methods that take a query string on a PreparedStatement.
at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:95)
at M2.main(M2.java:22)
Ошибка чтения БД

Что делать в этом случае?

import java.sql.*;

public class M2 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        String url = "jdbc:postgresql://localhost:5432/postgres";
        String userName = "postgres";
        String password = "12345";

        Class.forName("org.postgresql.Driver");

        try (Connection conn = DriverManager.getConnection(url, userName, password)) {
            PreparedStatement preparedStat = null;

            try {
                preparedStat = conn.prepareStatement("INSERT INTO books (name, price) VALUES (?, ?)");
                preparedStat.setString(1, "Shindler's List");
                preparedStat.setDouble(2, 32.5);
                preparedStat.execute();

                ResultSet rs = null;
                try {
                    rs = preparedStat.executeQuery("SELECT * FROM books");
                    while (rs.next()) {
                        int id = rs.getInt(1);
                        String name = rs.getString(2);
                        double price = rs.getDouble(3);
                        System.out.println("ID = " + id + "NAME = " + name + "PRICE = " + price);
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    if (rs != null) {
                        try {
                            rs.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    } else {
                        System.err.println("Ошибка чтения БД");
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                preparedStat.close();
            }
        }
    }
}
  • Вопрос задан
  • 1243 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Переменная preparedStat хранит подготовленный запрос, созданный вызовом метода prepareStatement, в неё нельзя передать другой запрос вызовом executeQuery.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Terran37
Программист
Если значения в таблице записаны, то значит блок по добавлению записи отработал, а ошибка в следующем блоке по выводу полученных результатов в цикле. Поставьте вывод в систем по её нахожения каждого значения. Так вам будет понятно на какой строке из существующих ошибка
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы