Я пытаюсь собрать быстрое приложение JDBC, использующее Postgres в качестве базы данных, и столкнулся с интересной проблемой.
В настоящее время у меня есть 2 таблицы, table1 и table2.
CREATE TABLE table1
(
a character varying NOT NULL,
b integer NOT NULL,
CONSTRAINT table1_pkey PRIMARY KEY (b)
)
CREATE TABLE table2
(
c character varying NOT NULL,
d integer,
CONSTRAINT table2_pkey PRIMARY KEY (c),
CONSTRAINT table2_d_fkey FOREIGN KEY (d),
REFERENCES table1(b) MATCH SIMPLE
ON UPDATE CSCADE ON DELETE CASCADE
)
Как бэкэнд моей программы, я SELECT
ing *
и держусь за ResultSet
из моего запроса.Каждая таблица содержит 1 строку простых значений, и, похоже, не имеет значения, какие они.
Мое утверждение создано с флагами ResultSet.TYPE_SCROLL_INSENSITIVE
и ResultSet.CONCUR_UPDATE
.Хотя я пробовал и SCROLL_SENSITIVE.
Если я попробую следующее (assumgin ResultSet rs/rs2
действительны и указывают на table1 / table2 соответственно:
rs.first(); // move to the first row (only row)
rs.updateInt(2, 50); // update our primary key, which is also the cascading fk
// 50 could be any number
print(rs); // Will show the old value
rs.updateRow();
print(rs); // Will show the new value
rs2.refreshRow(); // make sure we get the latest data from table2
print(rs2); // will show the old data?
Я надеялся увидеть новоезначения из-за каскада. Если я выйду и перезапущу приложение, не меняя никакого ввода, то оно выведет правильные значения таблицы 2. Я предполагаю, что это из-за повторного выполнения оператора SELECT
. Если я смотрюза столом, запустив psql или pgadmin3, кажется, что значения меняются. Похоже, что refreshRow () не сбивает последние вещи. Кто-нибудь может понять, почему?
Яиспользуя:
- java 1.6_29
- postgresql-9.1-901.jdbc4.jar
Любая помощь будет оценена.