目的
通过数据库的表名,获取到此表的所有表字段,以用作统一的批量新增。
代码
package org.springblade.test;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class QueryColumnsByTableName {
/**
* 获取数据库连接
*
* @return 返回数据库连接对象
* @throws SQLException 如果连接失败或无法建立连接时抛出异常
*/
public static Connection getConnection() throws SQLException {
// 加载并注册JDBC驱动
// Class.forName("com.mysql.jdbc.Driver");
String JDBC_URL = "your_jdbc_url";
String USER = "your_username";
String PASSWORD = "your_password";
// 使用DriverManager获取数据库连接
return DriverManager.getConnection(JDBC_URL, USER, PASSWORD);
}
/**
* 根据表名查询字段列表
*
* @param tableName 表名
* @return 包含表名和字段列表的映射关系
*/
public Map<String, List<String>> queryColumnsByTableName(String tableName) {
Map<String, List<String>> tableFieldMap = new HashMap<>();
try (Connection connection = getConnection()) {
DatabaseMetaData metaData = connection.getMetaData();
ResultSet columnsRs = metaData.getColumns(null, null, tableName, "%");
while (columnsRs.next()) {
String columnName = columnsRs.getString("COLUMN_NAME");
// 使用表名作为键存储字段列表
if (!tableFieldMap.containsKey(tableName)) {
tableFieldMap.put(tableName, new ArrayList<>());
}
tableFieldMap.get(tableName).add(columnName);
}
columnsRs.close();
} catch (SQLException e) {
e.printStackTrace();
}
return tableFieldMap;
}
@org.junit.jupiter.api.Test
public void queryColumnsByTableNameTest() {
String tableName = "your_table_name";
Map<String, List<String>> dqGzfwYqjd = queryColumnsByTableName(tableName);
System.out.println("Table '" + tableName + "' fields:");
for (String field : dqGzfwYqjd.get(tableName)) {
System.out.println(field);
}
}
}