如何使用Java从MySQL获取列规范?
在MySQL中,每一列都有二进制、无符号和零填充标志。有没有办法用Java1.8获取这个标志的值?DatabaseMetaData.getColumns()不返回此值,如我所见。假设使用如何使用Java从MySQL获取列规范?,java,mysql,sql,Java,Mysql,Sql,在MySQL中,每一列都有二进制、无符号和零填充标志。有没有办法用Java1.8获取这个标志的值?DatabaseMetaData.getColumns()不返回此值,如我所见。假设使用 CREATE TABLE tableA ( id int auto_increment primary key, w INT(8) ZEROFILL NOT NULL, x INT(8) NOT NULL, y int signed not null, z int uns
CREATE TABLE tableA
( id int auto_increment primary key,
w INT(8) ZEROFILL NOT NULL,
x INT(8) NOT NULL,
y int signed not null,
z int unsigned not null,
shortBinaryCharString char(10) binary not null,
myBlob blob(10000) null
);
作为一个起点,主要是借鉴
我建议对INFORMATION\u SCHEMA
数据库中的表使用标准查询。比如
select table_schema, table_name, column_name, ordinal_position, is_nullable, data_type,
character_set_name, collation_name, column_type, column_key, extra
from INFORMATION_SCHEMA.columns
where table_schema = 'so_gibberish' -- your database/schema name
and table_name='tableA'
+--------------+------------+-----------------------+------------------+-------------+-----------+--------------------+----------------+--------------------------+------------+----------------+
| table_schema | table_name | column_name | ordinal_position | is_nullable | data_type | character_set_name | collation_name | column_type | column_key | extra |
+--------------+------------+-----------------------+------------------+-------------+-----------+--------------------+----------------+--------------------------+------------+----------------+
| so_gibberish | tablea | id | 1 | NO | int | NULL | NULL | int(11) | PRI | auto_increment |
| so_gibberish | tablea | w | 2 | NO | int | NULL | NULL | int(8) unsigned zerofill | | |
| so_gibberish | tablea | x | 3 | NO | int | NULL | NULL | int(8) | | |
| so_gibberish | tablea | y | 4 | NO | int | NULL | NULL | int(11) | | |
| so_gibberish | tablea | z | 5 | NO | int | NULL | NULL | int(10) unsigned | | |
| so_gibberish | tablea | shortBinaryCharString | 6 | NO | char | utf8 | utf8_bin | char(10) | | |
| so_gibberish | tablea | myBlob | 7 | YES | blob | NULL | NULL | blob | | |
+--------------+------------+-----------------------+------------------+-------------+-----------+--------------------+----------------+--------------------------+------------+----------------+
你也可能有执行的运气
显示表格中的字段代码>
或
show create table表a
使用标准java结果集(很可能您已经这样做了)就足够了
try {
con = DriverManager.getConnection(url, user, password);
st = con.createStatement();
rs = st.executeQuery("show fields from tableA");
while (rs.next()) {
System.out.println(rs.getString(1)+": "+rs.getString(2));
} catch (SQLException ex) {
Logger lgr = Logger.getLogger(myTest.class.getName());
lgr.log(Level.SEVERE, ex.getMessage(), ex);
}
注意:显示字符集和排序规则列的原因是,具有具有特定字符集排序顺序的字符二进制列之间存在细微差别。与真正的二进制blob/text列相比,该列除了二进制之外没有排序顺序。请参阅Mysql手册中标题为“二进制”的页面,并确定如何将其应用到您的“二进制”概念中。通常,必须解析一列输出以确定是否启用了zerofill
CREATE TABLE tableA
( id int auto_increment primary key,
w INT(8) ZEROFILL NOT NULL,
x INT(8) NOT NULL,
y int signed not null,
z int unsigned not null,
shortBinaryCharString char(10) binary not null,
myBlob blob(10000) null
);
作为一个起点,主要是借鉴
我建议对INFORMATION\u SCHEMA
数据库中的表使用标准查询。比如
select table_schema, table_name, column_name, ordinal_position, is_nullable, data_type,
character_set_name, collation_name, column_type, column_key, extra
from INFORMATION_SCHEMA.columns
where table_schema = 'so_gibberish' -- your database/schema name
and table_name='tableA'
+--------------+------------+-----------------------+------------------+-------------+-----------+--------------------+----------------+--------------------------+------------+----------------+
| table_schema | table_name | column_name | ordinal_position | is_nullable | data_type | character_set_name | collation_name | column_type | column_key | extra |
+--------------+------------+-----------------------+------------------+-------------+-----------+--------------------+----------------+--------------------------+------------+----------------+
| so_gibberish | tablea | id | 1 | NO | int | NULL | NULL | int(11) | PRI | auto_increment |
| so_gibberish | tablea | w | 2 | NO | int | NULL | NULL | int(8) unsigned zerofill | | |
| so_gibberish | tablea | x | 3 | NO | int | NULL | NULL | int(8) | | |
| so_gibberish | tablea | y | 4 | NO | int | NULL | NULL | int(11) | | |
| so_gibberish | tablea | z | 5 | NO | int | NULL | NULL | int(10) unsigned | | |
| so_gibberish | tablea | shortBinaryCharString | 6 | NO | char | utf8 | utf8_bin | char(10) | | |
| so_gibberish | tablea | myBlob | 7 | YES | blob | NULL | NULL | blob | | |
+--------------+------------+-----------------------+------------------+-------------+-----------+--------------------+----------------+--------------------------+------------+----------------+
你也可能有执行的运气
显示表格中的字段代码>
或
show create table表a
使用标准java结果集(很可能您已经这样做了)就足够了
try {
con = DriverManager.getConnection(url, user, password);
st = con.createStatement();
rs = st.executeQuery("show fields from tableA");
while (rs.next()) {
System.out.println(rs.getString(1)+": "+rs.getString(2));
} catch (SQLException ex) {
Logger lgr = Logger.getLogger(myTest.class.getName());
lgr.log(Level.SEVERE, ex.getMessage(), ex);
}
注意:显示字符集和排序规则列的原因是,具有具有特定字符集排序顺序的字符二进制列之间存在细微差别。与真正的二进制blob/text列相比,该列除了二进制之外没有排序顺序。请参阅Mysql手册中标题为“二进制”的页面,并确定如何将其应用到您的“二进制”概念中。通常,必须解析一列输出以确定是否启用了zerofill