Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / java и таблицы PSQL / 11 сообщений из 11, страница 1 из 1
27.07.2013, 21:06:31
    #38346454
LinuxAwake
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java и таблицы PSQL
Добрый день, я только начал изучать SQL, и что бы обучение не было голословным, сразу взялся за реализацию реальной задачи с базой под управлением PostgreSQL.

Я столкнулся с некоторыми сложностями, решение которых нагуглить, к сожалению, не смог.
1) Как можно получить список типов для всех колонок таблицы? Сейчас делаю запросом
Код: sql
1.
select data_type from information_schema.columns where information_schema.columns.table_name='TableName';


Как сделать тоже самое, используя Java ? Думаю, с именами колонок, будет аналогично.

2)Еще непонятно, как определять атрибуты столбца: NULL/NOT NULL, PRIMARY KEY, etc

3) Отдельный вопрос про SERIAL: при получение типа, этот столбец возвращает "INT" и его обработка не представляется возможной. Есть ли метод, позволяющий отличить SERIAL столбец?

Благодарю за понимание.
...
Рейтинг: 0 / 0
28.07.2013, 10:18:21
    #38346543
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java и таблицы PSQL
...
Рейтинг: 0 / 0
28.07.2013, 13:43:30
    #38346591
LinuxAwake
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java и таблицы PSQL
Blazkowicz,
Я не могу разобраться как выявить SERIAL столбец. Насколько я понял, PostgreSQL при добавлении SERIAL/BIGSERIAL делает следующее:
1) создает счетчик по имени таблицы-столбца
2) переводит из SERIAL/BIGSERIAL в INT/BIGINT
3) Обновляет модификаторы столбца, делая его NOT NULL DEFAULT

Т.е. со стороны Java Это просто столбец с целыми числами с NOT NULL
но ведь так не может быть, драйвер то должен предоставлять какие - либо интерфейсы для нахождения таких полей.
Я, конечно, могу отслеживать по PRIMARY KEY, но мне кажется, это некорректным, с конце концов ключом может быть далеко не счетчик.
...
Рейтинг: 0 / 0
28.07.2013, 14:20:19
    #38346605
ukku
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java и таблицы PSQL
LinuxAwakeТ.е. со стороны Java Это просто столбец с целыми числами с NOT NULL

Cам postgre после создания считает, что это int, а не serial. jdbc больше не откуда брать инфу.
...
Рейтинг: 0 / 0
28.07.2013, 14:35:16
    #38346618
LinuxAwake
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java и таблицы PSQL
ukku,

Допустим, у меня есть таблица:

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE COMPANY(
    ID SERIAL PRIMARY KEY,
    NUM SERIAL NOT NULL,
    NAME TEXT NOT NULL,
    AGE INT NOT NULL,
    COMMENT TEXT NULL
);


и есть окно ввода данных. Мне надо проверять, ввел ли пользователь все поля NOT NULL, но в то же время, что бы они не являлись SERIAL. Поле ID я могу отбросить по проверки на PRIMARY KEY, ну а как быть с NUM? Как Вы сами говорите, оно от AGE даже для Postgres не отличается, не то что для джавы.

Или получать список счетчиков для таблицы, а потом парсить и таким образом получать имя колонки, которая создала этот счетчик?
Или вообще не использовать auto increment кроме как для генерации id ? Но это как, убого, что-ли.
...
Рейтинг: 0 / 0
29.07.2013, 10:49:48
    #38347077
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java и таблицы PSQL
LinuxAwakeukku,

Допустим, у меня есть таблица:

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE COMPANY(
    ID SERIAL PRIMARY KEY,
    NUM SERIAL NOT NULL,
    NAME TEXT NOT NULL,
    AGE INT NOT NULL,
    COMMENT TEXT NULL
);


и есть окно ввода данных. Мне надо проверять, ввел ли пользователь все поля NOT NULL, но в то же время, что бы они не являлись SERIAL. Поле ID я могу отбросить по проверки на PRIMARY KEY, ну а как быть с NUM? Как Вы сами говорите, оно от AGE даже для Postgres не отличается, не то что для джавы.

Или получать список счетчиков для таблицы, а потом парсить и таким образом получать имя колонки, которая создала этот счетчик?
Или вообще не использовать auto increment кроме как для генерации id ? Но это как, убого, что-ли.

1) Все есть в документации по PostgreSQL. Даже на русском языке, хоть и не для актуальной версии.
2) В SQL есть "волшебное слово" "DEAFULT", после которого можно задать значение по умолчанию.
3) Список счетчиков для таблиц в общем случае получить не надо, если вы этого хотите, то значит вы что-то делаете не так.
Т.к. это в общем случае, вы не сможете гарантированно получить непрерывную последовательность (см. ACID)
4) Значения NUM вообще не надо вводить, т.к. при добавлении записи он автоматом получить значение.
Либо вы что-то делаете не то.

Совет: Почитайте документацию по PostgreSQL, про типы и про псевдотип SERIAL.
...
Рейтинг: 0 / 0
29.07.2013, 16:12:10
    #38347552
LinuxAwake
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java и таблицы PSQL
mad_nazgul,

>>Значения NUM вообще не надо вводить, т.к. при добавлении записи он автоматом получить значение.

Так в этом то и мой вопрос: как моя форма узнает, что вот NUM можно не отображать , а AGE нужно отобразить? По флагу DEFAULT?
...
Рейтинг: 0 / 0
29.07.2013, 16:48:53
    #38347608
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java и таблицы PSQL
LinuxAwakemad_nazgul,

>>Значения NUM вообще не надо вводить, т.к. при добавлении записи он автоматом получить значение.

Так в этом то и мой вопрос: как моя форма узнает, что вот NUM можно не отображать , а AGE нужно отобразить? По флагу DEFAULT?

Отчасти это бочина авторов JDBC для Postgres. Могли бы уже и тип добавить. Но ещё вот пишут что SERIAL, это не отдельный тип, а псевдо-тип. Это просто указание на то что Postgres должен создать ещё и sequence для этой колонки. Можно попробовать найти этот sequence по имени.
...
Рейтинг: 0 / 0
29.07.2013, 16:54:44
    #38347625
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java и таблицы PSQL
Опять же такие вещи, лучше держать в отдельном мапинге, а не решать на осннове метаданных. А то в какой-то момент окажется что эти поля таки нужны на UI, хотя бы в read-only. И что делать?
...
Рейтинг: 0 / 0
29.07.2013, 16:55:09
    #38347626
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java и таблицы PSQL
LinuxAwakemad_nazgul,

>>Значения NUM вообще не надо вводить, т.к. при добавлении записи он автоматом получить значение.

Так в этом то и мой вопрос: как моя форма узнает, что вот NUM можно не отображать , а AGE нужно отобразить? По флагу DEFAULT?
у вас генератор форм?
Если нет, то форму проектируют в статике с дизайнером. Т.е. маппят Нужные показываемые поля.
...
Рейтинг: 0 / 0
29.07.2013, 17:09:07
    #38347646
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java и таблицы PSQL
http://www.bartbusschots.ie/blog/?p=614
The name of this sequence can be trivially determined from the name of the table and the name of the column. It takes the following form: [tableName]_[columnName]_seq.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / java и таблицы PSQL / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]