jdbc获取数据库元数据信息 您所在的位置:网站首页 jdbc获取表的列名 jdbc获取数据库元数据信息

jdbc获取数据库元数据信息

2023-12-31 10:19| 来源: 网络整理| 查看: 265

DatabaseMetaData 接口: 获取数据库,,,表,,列,,等元数据信息

jdbc使用:

// 获取一个连接 Connection connection = DriverManager.getConnection(url,username,password); // 获取执行对象 statement,,或者 preparedStatement Statement statement = connection.createStatement(); // 执行后获取结果集 String sql= "select * from user"; ResultSet resultSet = statement.executeQuery(sql); // 遍历ResultSet 获取结果 while(resultSet.next()){ // ... } // 关闭资源 resultSet.close(); statement.close() connection.close()

DatabaseMetaData 获取元数据信息 connection.getMetaData() 会传很多参数, 在这里插入图片描述

获取表 : connection.getTables() 获取字段: connection.getColumns() 获取主键: connection.getPrimaryKey()

返回的得到的 ResultSet 可以获取到这些元数据,,比如 ,字段名字,字段大小,字段类型,字段是否允许为空,字段的备注,,

自己写一个mybatis的代码生成器: 要获取每一个表的元数据,, 设置一个类来接收,, /** * 描述表的信息 */ @Data public class TableClass { /** * 表名字 */ private String tableName; /** * 生成的model的名字 */ private String modelName; private String serviceName; private String mapperName; private String packageName; /** * 每一个表有很多的字段 */ private List columns; } @Data public class ColumnClass { /** * 对应的java属性的名字 */ private String propertyName; /** * 数据库中的名字 */ private String columnName; /** * 字段的类型,,在数据库中的类型 */ private String type; /** * 备注 */ private String remark; /** * 是否是主键 */ private Boolean isPrimary; }

就需要知道 Table的元数据,,,每一个Field的元数据,,根据Field的不同的类型使用不同的java类型去转换,,,,需要知道每一个Field是否是主键,,主键的xxxMapper.xml 中的写法不同,, 通过DatabaseMetaData获取到了元数据之后,转换成相应的实体类,,,, 就变成了一个一个的 TableClass ,

准备freemarker 模板,,model,mapper,service,controller的模板,,将模板结合获取到的 TableClass的集合,,生成每一个表对应的 model,mapper,service等

freemarker的使用

public void test() throws TemplateException, IOException { // 获取一个连接 Configuration configuration = new Configuration(Configuration.VERSION_2_3_31); // 设置模板的位置 configuration.setClassLoaderForTemplateLoading(this.getClass().getClassLoader(),"templates"); // 获取模板 Template template = configuration.getTemplate("hehe.ftl"); HashMap map = new HashMap(); map.put("name","cc"); StringWriter out = new StringWriter(); // 生成 template.process(map,out); System.out.println(out.toString()); }

代码:

public void getMeta() throws SQLException { Connection connection = this.getConnection(); // DatabaseMetaData: 数据库,表,列等元数据信息 DatabaseMetaData metaData = connection.getMetaData(); // 数据库名: null表示所有数据库的表信息 String catalog = "mybatisplus"; // 模式名, null表示所有模式的表 String schemaPattern = null; // 表名模式 ,,%表示所有表信息 String tableNamePattern = "%user"; // 表示获取 表信息 String[] types = {"TABLE"}; ResultSet resultSet = metaData.getTables(catalog, schemaPattern, tableNamePattern, types); while (resultSet.next()){ String tableCatalog = resultSet.getString("TABLE_CAT"); String remarks = resultSet.getString("REMARKS"); String tableName = resultSet.getString("TABLE_NAME"); String tableType = resultSet.getString("TABLE_TYPE"); System.out.println("tableCatalog = " + tableCatalog); System.out.println("remark = " + remarks); System.out.println("tableName = " + tableName); System.out.println("tableType = " + tableType); } resultSet.close(); connection.close(); } public void getColumns() throws SQLException { Connection connection = this.getConnection(); DatabaseMetaData metaData = connection.getMetaData(); ResultSet tableResultSet = metaData.getTables("mybatisplus", null, "%user", new String[]{"TABLE"}); while (tableResultSet.next()){ String tableName = tableResultSet.getString("TABLE_NAME"); ResultSet columnsResultSet = metaData.getColumns("mybatisplus", null, tableName, null); while (columnsResultSet.next()){ String columnName = columnsResultSet.getString("COLUMN_NAME"); String dataType = columnsResultSet.getString("TYPE_NAME"); String columnSize = columnsResultSet.getString("COLUMN_SIZE"); Object isNullable = columnsResultSet.getObject("IS_NULLABLE"); String remarks = columnsResultSet.getString("REMARKS"); System.out.println("columnName = " + columnName); System.out.println("dataType = " + dataType); System.out.println("columnSize = " + columnSize); System.out.println("isNullable = " + isNullable); System.out.println("remark = " + remarks); System.out.println(); ResultSet primaryKeysResultSet = metaData.getPrimaryKeys("mybatisplus", null, tableName); while (primaryKeysResultSet.next()){ // 是否是主键 } } columnsResultSet.close(); } tableResultSet.close(); connection.close(); } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有