Java获取数据库所有表的所有字段、类型、注释、值
@Test
public void testUpdate(){
String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true";
String username = "root";
String password = "root";
try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password)) {
DatabaseMetaData metaData = connection.getMetaData();
ResultSet tables = metaData.getTables(null, null, null, new String[]{"TABLE"});
while (tables.next()) {
String tableName = tables.getString("TABLE_NAME");
System.out.println("Table: " + tableName);
if (shouldSkipTable(tableName)) {
continue;
}
try(Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM " + tableName)) {
ResultSetMetaData rsMetaData = resultSet.getMetaData();
int columnCount = rsMetaData.getColumnCount();
Map<String, String> columnComments = getColumnComments(metaData, tableName);
while (resultSet.next()) {
for (int i = 1; i <= columnCount; i++) {
String columnName = rsMetaData.getColumnName(i);
String columnTypeName = rsMetaData.getColumnTypeName(i);
String columnValue = resultSet.getString(i);
String columnComment = columnComments.get(columnName);
System.out.println("表名:->>"+tableName+" 字段名:->>"+columnName + " 字段类型:->>"+columnTypeName + " 字段值:" + columnValue + " 字段注释:" + columnComment);
}
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private boolean shouldSkipTable(String tableName) {
return tableName.matches("QRTZ_.*") || tableName.contains("log") || tableName.contains("blade");
}
private Map<String, String> getColumnComments(DatabaseMetaData metaData, String tableName) throws SQLException {
Map<String, String> columnComments = new HashMap<>();
try (ResultSet columns = metaData.getColumns(null, null, tableName, null)) {
while (columns.next()) {
String columnName = columns.getString("COLUMN_NAME");
String columnComment = columns.getString("REMARKS");
columnComments.put(columnName, columnComment);
}
}
return columnComments;
}