Получение метаданных таблицы из MySQL в Java - PullRequest
1 голос
/ 21 января 2012

Есть ли способ получить метаданные таблицы перед первым выполнением запроса выбора таблицы?

Повторно: есть ли способ получить размер столбца определенной строки и столбца данных для числовых типов: int, tinyint, bigint и т. Д.?

DatabaseMetaData md = connection.getMetaData();
ResultSet rs = dbmd.getColumns(null, null, tableName, "%");

Я не могу использовать вышеуказанный код, так как COLUMN_SIZE для числового типа (int,tinyint,bigint,etc) вернет максимально допустимый размер для этих типов. Мне нужно получить столбец DisplaySize.

Приведенный выше код вернет 10 для int(8), но мне нужно 8, которые я могу получить из resultMetaData таблицы.

Так есть ли способ сделать это, не выполняя сначала оператор select.

Спасибо

Ответы [ 5 ]

4 голосов
/ 24 января 2012

Возможно, вы захотите проверить, что таблица INFORMATION_SCHEMA в MySQL может вам дать.Иногда вы можете использовать их в своих интересах.Я быстро осмотрелся, и внутри меня ничего не ударило.

Информационная схема MySQL: http://dev.mysql.com/doc/refman/5.6/en/information-schema.html

2 голосов
/ 28 января 2012

Как сказал @technocrat, проверьте этот запрос на information_schema

ВЫБРАТЬ имя столбца, тип столбца ОТ ИНФОРМАЦИИ_SCHEMA.columns где table_schema = '[Схема таблицы]' и имя таблицы = '[Имя таблицы]'

1 голос
/ 29 января 2012

В случае INT(8) вы должны знать, что 8 - это не ограничение размера. Это частое заблуждение пользователей MySQL. Аргумент для INT-подобных типов данных является лишь подсказкой SQL для дополнения значений, если они имеют меньше цифр, чем аргумент. Обычно используется только для ZEROFILL.

CREATE TABLE foo ( i1 INT(8) ZEROFILL, i2 INT(16) ZEROFILL );
INSERT INTO foo VALUES (1234, 1234);
SELECT * FROM foo;
+----------+------------------+
| i1       | i2               |
+----------+------------------+
| 00001234 | 0000000000001234 | 
+----------+------------------+

Значение 8 против 16 не изменяет объем памяти, требуемый INT, и диапазон значений, которые он поддерживает. Тип данных INT всегда 32-битный и всегда допускает значения от -2 31 до 2 31 -1, независимо от того, какой аргумент вы ему задаете.

Аналогично TINYINT всегда 8 бит, SMALLINT всегда 16 бит, MEDIUMINT всегда 24 бит, а BIGINT всегда 64 бит.

Полученное вами значение 10 - это точность чисел, а не ограничение по размеру. То есть 32-битное значение может использовать до 10 цифр при отображении в base-10:

SELECT LENGTH(POW(2,31));
+-------------------+
| LENGTH(POW(2,31)) |
+-------------------+
|                10 | 
+-------------------+
1 голос
/ 28 января 2012

Я могу быть не в порядке с тем, что вы спрашиваете, но полезна ли команда mysql show columns in <tablename>? http://dev.mysql.com/doc/refman/5.1/en/show-columns.html для получения дополнительной информации.

1 голос
/ 21 января 2012

См. Статью ниже:

Поможет вам понять пример из метаданных JDBC Получить таблицу

http://roseindia.net/jdbc/Jdbc-meta-data-get-tables.shtml

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