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

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

 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 = getTablesconn);
34             System.out.println"---------------获取" + conn.getCatalog) + "库的所有表名----------------");
35             System.out.printlntables);
36 
37             // 获取表字段
38             for String table : tables) {
39                 List<String> columns = getColumnsconn, table);
40                 System.out.println"---------------获取" + table + "表的所有字段----------------");
41                 System.out.printlncolumns);
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> getTablesConnection conn) throws SQLException {
57         DatabaseMetaData metaData = conn.getMetaData);
58         ResultSet resultSet = metaData.getTablesconn.getCatalog), "%", null, new String[]{"TABLE"});
59         List<String> tables = new ArrayList<>);
60         while resultSet.next)) {
61             String tableName = resultSet.getString"TABLE_NAME");
62             tables.addtableName);
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> getColumnsConnection conn, String tableName) throws SQLException {
76         DatabaseMetaData metaData = conn.getMetaData);
77         ResultSet rs = metaData.getColumnsconn.getCatalog), null, tableName, null);
78         List<String> columns = new ArrayList<>);
79         while rs.next)) {
80             String name = rs.getString"COLUMN_NAME");
81             columns.addname);
82         }
83         return columns;
84     }
85 }

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注