首页 > 数据库技术 > 详细

jdbctemplate 获取数据表结构的方法&注意事项

时间:2015-05-14 13:55:46      阅读:413      评论:0      收藏:0      [点我收藏+]

方法一 直接查询:

SqlRowSet srcSqlRowSet = srcJdbcTemplate.queryForRowSet("SELECT * FROM tablename LIMIT 0"); //注意limit 0更合适
List<ColumnMetaData> columneMetaList = new LinkedList<ColumnMetaData>();
int columnCount;
SqlRowSetMetaData sqlRowSetMetaData = sqlRowSet.getMetaData();
columnCount = sqlRowSetMetaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
    columneMetaList.add(new ColumnMetaData(sqlRowSetMetaData.getColumnName(i), sqlRowSetMetaData.getColumnType(i), sqlRowSetMetaData.getColumnTypeName(i))); //获取字段的名称、类型和描述
}
Collections.sort(columneMetaList);

方法一的ColumnMetaData类代码如下:

public class ColumnMetaData implements Comparable<ColumnMetaData> {

    private String name; // 字段名称
    private int type; // 字段类型
    private String typeName; // 字段类型名称
    private Object value; //
    
public ColumnMetaData(String columnName, int valueType, String typeName) { this.name = columnName; this.type = valueType; this.typeName = typeName; } }

 

方法二 使用RowCountCallbackHandler查询

String sql = "select * from "+ tableName + " limit 0";  
RowCountCallbackHandler rcch = new RowCountCallbackHandler();  
this.jdbcTemplateDao.query(sql, rcch);  
String[] coloumnName = rcch.getColumnNames();  
int[] coloumnType = rcch.getColumnTypes();  

方法二效率高,但麻烦的是拿到了类型是数字,如果要获得字段的描述信息,比如:int还是varchar等,需要一个对照关系类:

public class SqlTypeAdapter {
public static String getTypeName(int type) throws SQLException {
        switch (type) {
            case Types.ARRAY:
                break;
            case Types.BIGINT:
                return "BIGINT";
            case Types.BINARY:
                return "BINARY";
            case Types.BIT:
                return "BIT";
            case Types.BLOB:
                return "BLOB";
            case Types.BOOLEAN:
                return "BOOLEAN";
            //..代码太多就不多写啦default:
                break;
        }
        return "VARCHAR";
    }
}

 

jdbctemplate 获取数据表结构的方法&注意事项

原文:http://www.cnblogs.com/liqiu/p/4502981.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!