今天需要读取MySql的一个表格的注释,看到通过元数据可以读取,进行了测试代码,就是读取不出来,值为空,但是查看元数据表TABLES中的TABLE_COMMENT字段值是存在的,感觉异常奇怪,本来是在eclipse的插件中进行读取,难道需要自己手动编写读取代码?真是郁闷啊
然后下载了Mysql的驱动源程序进行了代码的查询,发现他根本就不会读取注释字段,他所有的元数据表信息中的信息都来源于SHOW FULL TABLES FROM这个语句,这个语句只提供了二列数据
| Tables_in_pf | Table_type |
也就是表明和表的类型
他在代码生命取得数据的时候已经将表注释长度设置成0了,所有根本无法从驱动的元数据中读取到表格的注释信息
fields[0] = new Field("", "TABLE_CAT", java.sql.Types.VARCHAR, 255);
fields[1] = new Field("", "TABLE_SCHEM", java.sql.Types.VARCHAR, 0);
fields[2] = new Field("", "TABLE_NAME", java.sql.Types.VARCHAR, 255);
fields[3] = new Field("", "TABLE_TYPE", java.sql.Types.VARCHAR, 5);
fields[4] = new Field("", "REMARKS", java.sql.Types.VARCHAR, 0); ----存放注释的内容,长度为0
估计用的很少吧,这种需求都不能满足。
=====================
考虑到开发的需要,建立新里开发驱动,等到正式系统运行的时候采用正式的驱动程序,现在希望oracle的驱动可以读取到这个值。
扩展添加方法
private byte[] getTableComment(String tableName,Connection conn){
Statement st=null;
ResultSet rs=null;
String result="";
try {
st = conn.createStatement();
rs = st.executeQuery("SELECT TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='"+tableName+"'");
while(rs.next()){
result = rs.getString(1);
break;
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
if(rs!=null)rs.close();
rs = null;
if(st!=null)st.close();
st=null;
} catch (SQLException e) {
e.printStackTrace();
}
}
return result.getBytes();
}
经过测试程序读取,真的可以去到了