获取JDBC列类型

Sal*_*lah 7 java jdbc resultset

我需要在表中询问我的列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;
}
Run Code Online (Sandbox Code Playgroud)

我可以同时在这样的表中获取所有列元数据吗?如果是的话,我该怎么办?

Sha*_*med 19

使用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);
Run Code Online (Sandbox Code Playgroud)

  • 如果从查询返回0行,这将表现得更好.为了加快速度,你应该真正使用"select*from tableName where 1 = 2" (3认同)

Mar*_*eel 3

的参数DatabaseMetaData.getColumns(..)应该是LIKE- 模式。因此,如果您想从表中获取所有列,您只需传递到"%"最后一个参数即可columnNamePattern

getMetaData().getColumns(null, schema, tableName, "%");
Run Code Online (Sandbox Code Playgroud)

某些驱动程序(也)允许null此处,但并非所有驱动程序都这样做(JDBC 规范和 API 文档并不完全清楚此参数是否允许)