我正在尝试仅使用jdbc中的元数据为表重新创建模式。
除了列大小之外,我已经完成了所有工作。 location VARCHAR(10)
目前,每个列都打印VARCHAR(2000000000)
代码:
ResultSet rs = databaseMetaData.getColumns(null, null, tableName, null);
while(rs.next()) {
int columnSize = rs.getInt("COLUMN_SIZE");
}
预期输出是在创建模式中的表时使用的数字,但它总是返回2000000000.有什么简单的我缺少吗?
答案 0 :(得分:3)
您的问题的标签表明您使用的是SQLite。
documentation,第2.2章亲和名称示例,声明:
请注意类型后面的括号中的数字参数 SQLite忽略了名称(例如:" VARCHAR(255)") - SQLite没有 施加任何长度限制(除了大的全球 SQLITE_MAX_LENGTH limit)对字符串,BLOB或数字的长度 值。
由于SQLite不使用长度信息,因此对于COLUMN_SIZE,它只返回基于字符的列的最大大小。
答案 1 :(得分:1)
尝试使用方法
databaseMetaData.getColumnDisplaySize(int column)
其中column
参数是表中的列数。资源:
https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSetMetaData.html