场景:现在就是有个需求,需要按照文本文件里面的表名 去查询这些表的一些相应字段,以及字段类型、字段长度、和字段的中文描述,然后将这些数据导出成excel文件。
1.首先创建maven文件,导入pom文件(注意!该代码基于达梦数据库以及jdk1.8)
org.apache.poi
poi
4.1.2
org.apache.poi
poi-ooxml
4.1.2
com.dameng
Dm7JdbcDriver18
7.6.0.165
com.dameng
DmDialect-for-hibernate5.3
8.1.1.49
2.用poi类库
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* desc
* date 2023/6/14
* @author houhou
* @param
* @return null
**/
public class DatabaseMetadataExporter {
public static void main(String[] args) {
String jdbcUrl = "你自己的数据库地址"; // 替换为实际的数据库连接URL
String username = "你自己的数据库名称"; // 替换为实际的数据库用户名
String password = "你自己的数据库密码"; // 替换为实际的数据库密码
String filePath = "/Users/houhou/kettle-1/test2/1.txt"; // 替换为实际的文本文件路径
String excelFilePath = "/Users/houhou/kettle-1/test2/table_fields4.xlsx"; // 替换为实际的Excel文件路径
try {
// 连接到数据库
Connection connection = DriverManager.getConnection(jdbcUrl, username, password);
// 创建工作簿和工作表
XSSFWorkbook workbook = new XSSFWorkbook();
org.apache.poi.ss.usermodel.Sheet sheet = workbook.createSheet("Table Metadata");
// 读取文本文件中的表名
BufferedReader reader = new BufferedReader(new FileReader(filePath));
String line;
int rowNumber = 0;
while ((line = reader.readLine()) != null) {
// 查询表的字段列表、字段类型、主键和字段中文描述
String tableName = line.trim();
String query = "SELECT utc.COLUMN_NAME, utc.DATA_TYPE, utc.COLUMN_NAME, ucc.COMMENTS FROM USER_TAB_COLUMNS utc LEFT JOIN USER_COL_COMMENTS ucc ON utc.TABLE_NAME = ucc.TABLE_NAME AND utc.COLUMN_NAME = ucc.COLUMN_NAME WHERE utc.TABLE_NAME = '" + tableName + "'";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(query);
// 创建表头行
if (rowNumber == 0) {
Row headerRow = sheet.createRow(rowNumber);
headerRow.createCell(0).setCellValue("表名");
headerRow.createCell(1).setCellValue("字段名");
headerRow.createCell(2).setCellValue("字段类型");
headerRow.createCell(3).setCellValue("主键");
headerRow.createCell(4).setCellValue("字段中文描述");
rowNumber++;
}
// 填充数据行
while (resultSet.next()) {
Row dataRow = sheet.createRow(rowNumber);
dataRow.createCell(0).setCellValue(tableName);
dataRow.createCell(1).setCellValue(resultSet.getString(1));
dataRow.createCell(2).setCellValue(resultSet.getString(2));
dataRow.createCell(3).setCellValue(resultSet.getString(3));
dataRow.createCell(4).setCellValue(resultSet.getString(4));
rowNumber++;
}
resultSet.close();
statement.close();
}
reader.close();
// 保存Excel文件
FileOutputStream outputStream = new FileOutputStream(excelFilePath);
workbook.write(outputStream);
workbook.close();
outputStream.close();
System.out.println("数据导出成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
|