获取数据库表结构信息(表名称和字段名称等元数据)

假定已经获取到了某数据库的连接,下面根据此连接获取该数据库的所有表名称和及表字段信息:

 1 import io.xbs.common.utils.R;
 2 import io.xbs.datasource.config.DynamicDataSource;
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.web.bind.annotation.GetMapping;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import org.springframework.web.bind.annotation.RestController;
 7 
 8 import java.sql.Connection;
 9 import java.sql.DatabaseMetaData;
10 import java.sql.ResultSet;
11 import java.sql.SQLException;
12 import java.util.ArrayList;
13 import java.util.List;
14 
15 /**
16  * 获取数据库表结构信息
17  *
18  * @author shiyanjun
19  */
20 @RestController
21 @RequestMapping("/app")
22 public class AppTestController {
23 
24     @Autowired
25     private DynamicDataSource dataSource;
26 
27     @GetMapping("dbTest")
28     public R dbTest() {
29         try {
30             Connection conn = dataSource.getConnection();
31 
32             // 获取所有的表
33             List<String> tables = getTables(conn);
34             System.out.println("---------------获取" + conn.getCatalog() + "库的所有表名----------------");
35             System.out.println(tables);
36 
37             // 获取表字段
38             for (String table : tables) {
39                 List<String> columns = getColumns(conn, table);
40                 System.out.println("---------------获取" + table + "表的所有字段----------------");
41                 System.out.println(columns);
42             }
43         } catch (SQLException e) {
44             e.printStackTrace();
45         }
46         return R.ok();
47     }
48 
49     /**
50      * 获取数据库中所有的表名称
51      *
52      * @param conn 数据库的连接
53      * @return 该数据库中所有的表名称
54      * @throws SQLException
55      */
56     private List<String> getTables(Connection conn) throws SQLException {
57         DatabaseMetaData metaData = conn.getMetaData();
58         ResultSet resultSet = metaData.getTables(conn.getCatalog(), "%", null, new String[]{"TABLE"});
59         List<String> tables = new ArrayList<>();
60         while (resultSet.next()) {
61             String tableName = resultSet.getString("TABLE_NAME");
62             tables.add(tableName);
63         }
64         return tables;
65     }
66 
67     /**
68      * 获取指定表的所有字段名称
69      *
70      * @param conn      数据库连接
71      * @param tableName 表名称
72      * @return 该表所有的字段名称
73      * @throws SQLException
74      */
75     private List<String> getColumns(Connection conn, String tableName) throws SQLException {
76         DatabaseMetaData metaData = conn.getMetaData();
77         ResultSet rs = metaData.getColumns(conn.getCatalog(), null, tableName, null);
78         List<String> columns = new ArrayList<>();
79         while (rs.next()) {
80             String name = rs.getString("COLUMN_NAME");
81             columns.add(name);
82         }
83         return columns;
84     }
85 }

 

posted @ 2019-11-02 20:11  xuebusi  阅读(2962)  评论(0编辑  收藏  举报