java – 使用Spring的JDBC慢速元数据获取Oracle

前端之家收集整理的这篇文章主要介绍了java – 使用Spring的JDBC慢速元数据获取Oracle前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我使用Spring JdbcUtils.extractDatabaseMetaData()方法来分析数据库.该函数调用回调并移交DatabaseMetaData对象.此对象提供getColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern).

我把它称为getColumns(“”,TABLE_OWNER_USERNAME,null,null),结果得到400列.这些正是我想要的结果,但请求需要1分钟.

我可以以某种方式优化此查询快速?拉动400行应该在1秒而不是1分钟内完成.

编辑:我不怀疑Spring部分很慢.更仔细的分析表明,获取DatabaseMetaData需要几秒钟的时间,执行getColumns()需要很长时间.

最佳答案
也许这是查询ALL_TAB_COLUMNS的更好方法.这是一个例子:

public final Listsql = "SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH,"
            + " DATA_PRECISION,DATA_SCALE,NULLABLE,DATA_DEFAULT"
            + " FROM ALL_TAB_COLUMNS"
            + " WHERE OWNER = ? ORDER BY COLUMN_ID";

    return jdbcTemplate.query(sql,new Object[] { owner },new RowMappersqlException {
                    final Column reg = new Column();

                    reg.setColumnName(res.getString("COLUMN_NAME"));
                    //Read other properties
                    reg.setNullable(res.getString("NULLABLE").equals("Y"));
                    return reg;
                }
            });
}

如果您需要按表格过滤,只需添加“AND TABLE_NAME =?”将sql和tableName作为另一个参数.

希望能帮助到你.

猜你在找的Spring相关文章