jdbctemplate 获取数据表结构的方法&注意事项
方法一 直接查询:
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"; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决