我需要询问表中我的列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;
}
我可以同时获取这样一个表中的所有列元数据吗?如果是,我该怎么做??
使用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);
DatabaseMetaData.getColumns(..)
的参数应该是LIKE
模式。因此,如果要从表中获取所有列,只需将"%"
传递给最后一个参数columnNamePattern
:
getMetaData().getColumns(null, schema, tableName, "%");
有些驱动程序(也)允许null
,但并非所有驱动程序都允许(JDBC规范和API文档不完全清楚是否允许此参数)
似乎您正在寻找列的数据类型,那么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));