org.postgresql.util.PSQLException: ОШИБКА: отношение "test_id" не существует.Состояние SQL: 42883 - PullRequest
0 голосов
/ 07 июля 2019

Я не могу получить идентификатор из таблицы "test" после сохранения его в postgresql с помощью pgadmin4:

Здесь скрипт создания, сгенерированный pgadmi4 из таблицы "test":

CREATE TABLE school.test
(
    test_id bigint NOT NULL DEFAULT nextval('school.test_test_id_seq'::regclass),
    name character varying(10) COLLATE pg_catalog."default"
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE school.test
    OWNER to postgres;

Здесь код для вставки значений в «тестовую» таблицу через JDBC:

        Connection conn = pstgConn.dbConnection();
        String query = "INSERT INTO school.test(name) VALUES (?)";
        try (PreparedStatement pst = conn.prepareStatement(query)) {
            pst.setString(1, "anything");
            pst.executeUpdate();
            //Get Sequential number of the table
            getSerialNum(conn);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

Здесь функция для получения последнего SerialNumber затронутой таблицы:

public void getSerialNum(Connection connection) {
        int serialNum = 0;
        try {
            Statement stmt = connection.createStatement();

            // get the postgresql serial field value with this query
            String query = "select currval('test_id')";

            ResultSet rs;

            rs = stmt.executeQuery(query);
            if (rs.next()) {
                serialNum = rs.getInt(1);
                System.out.println("serialNum = " + serialNum);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

Iпопытался выполнить изолированно консолью pdgadmin с теми же результатами.

Вот результаты:

org.postgresql.util.PSQLException: ОШИБКА: отношение "test_id" не существует Позиция: 16в org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse (QueryExecutorImpl.java:2103) в org.postgresql.core.v3.QueryExecutorImpl.processResults (QueryExecutorImpl.jresq.Imp.Exore.ecoreg_exeg) 18(QueryExecutorImpl.java:257) в org.postgresql.jdbc2.AbstractJdbc2Statement.execute (AbstractJdbc2Statement.java:512) в org.postgresql.jdbc2.AbstractJdbc2Statement.executeWlaFtJdbc2Statement.java:374) в org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery (AbstractJdbc2Statement.java:254) в com.cgi.training.javase.school.dao.testDAO.getSerialNgi.45: at.training.javase.school.dao.testDAO.main (testDAO.java:21)

1 Ответ

0 голосов
/ 07 июля 2019

Ответ от @a_horse_with_no_name: Ваша последовательность называется test_test_id_seq, но вы передаете имя test_id вызову currval () - a_horse_with_no_name

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