我需要在表中询问我的列jdbc类型,今天我循环抛出我的列然后询问它的类型,请参阅下面的代码:
public int getColumnDataTypeFromDB(String columnName) {
int datatype = 0;
ResultSet columns = null;
try {
String schema =
getMetaDataCatalogName() != null
? getMetaDataCatalogName()
: getMetaDataSchemaName();
if (TableManagerFactory.isCatalogBasedDatabase()) {
columns =
getMetaData().getColumns(
schema,
null,
tableName,
columnName);
} else {
columns =
getMetaData().getColumns(
null,
schema,
tableName,
columnName);
}
// columns =
// getMetaData().getColumns(getMetaDataCatalogName(), getMetaDataSchemaName(), tableName, columnName);
if (columns.next()) {
datatype = columns.getInt("DATA_TYPE");
}
} catch (SQLException ex) {
Log.error(
this,
"Error while getting columns information: " + ex.getMessage(),
ex);
//return false;
} catch (DDLCreationException ex) {
Log.error(this, ex.getMessage());
} finally {
try {
if (columns != null) {
columns.close();
}
} catch (SQLException ex) {
Log.error(this, ex.getLocalizedMessage());
}
}
return datatype;
}
我可以同时在这样的表中获取所有列元数据吗? 如果是的话,我该怎么做?
答案 0 :(得分:18)
使用jdbc ResultSetMetaData类获取表列的详细信息。
ResultSet res=stmt.executeQuery("select * from tableName where 1<0");
ResultSetMetaData rsmd=res.getMetaData();
rsmd.getColumnType(1);
rsmd.getColumnLabel(1);
rsmd.getColumnDisplaySize(1);
答案 1 :(得分:2)
DatabaseMetaData.getColumns(..)
的参数应该是LIKE
- 模式。因此,如果您想要从表中获取所有列,只需将"%"
传递给最后一个参数columnNamePattern
:
getMetaData().getColumns(null, schema, tableName, "%");
某些驱动程序(也)允许此处null
,但并非所有驱动程序都这样做(JDBC规范和API文档并不完全清楚此参数是否允许)
答案 2 :(得分:0)
看来你正在寻找列的数据类型,然后getColumnTypeName就是那个
System.out.println(rsMaster.getMetaData().getColumnName(1));
System.out.println(rsMaster.getMetaData().getColumnType(1));
System.out.println(rsMaster.getMetaData().getColumnTypeName(1));
System.out.println(rsMaster.getMetaData().getColumnDisplaySize(1));
System.out.println(rsMaster.getMetaData().getColumnLabel(1));