Задать вопрос
@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();
            }
        }
    }
}
  • Вопрос задан
  • 1260 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Переменная preparedStat хранит подготовленный запрос, созданный вызовом метода prepareStatement, в неё нельзя передать другой запрос вызовом executeQuery.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Terran37
Программист
Если значения в таблице записаны, то значит блок по добавлению записи отработал, а ошибка в следующем блоке по выводу полученных результатов в цикле. Поставьте вывод в систем по её нахожения каждого значения. Так вам будет понятно на какой строке из существующих ошибка
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
02 февр. 2025, в 12:33
3000 руб./за проект
02 февр. 2025, в 12:27
5000 руб./за проект
02 февр. 2025, в 11:35
3000 руб./за проект