抽取oracle 所有表


package db;

import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class DbUpload {

// 主方法
public static void main(String[] args) {

try {

List<DbModel> listTab = getListTab();

Map<String, List<DbModel>> map = getListCol(listTab);

db_down(listTab, map);

} catch (Exception e) {
e.printStackTrace();
}

}

// --------------- DB Start --------------------
public static List<DbModel> getListTab() throws Exception {

List<DbModel> tabList = new ArrayList<DbModel>();

// 定义了数据库连接串
String dbUrl = getProValue("DB.Url");
// 数据库的用户名
String user = getProValue("DB.NAME");
// 数据库的用户口令
String password = getProValue("DB.PASSWORD");
// 加载jdbc-odbc bridge驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
// 与url指定的数据源建立连接
Connection c = DriverManager.getConnection(dbUrl, user, password);
// 采用Statement进行查询
PreparedStatement p = c
.prepareStatement("SELECT A.TABLE_NAME, B.COMMENTS FROM DBA_TABLES A,USER_TAB_COMMENTS B WHERE A.TABLE_NAME=B.TABLE_NAME AND OWNER=? ");

p.setString(1, user);

ResultSet r = p.executeQuery();

while (r.next()) {

DbModel model = new DbModel();
model.setTableName(r.getString(1));
model.setTableComments(r.getString(2));
tabList.add(model);
}
r.close();
p.close();
c.close();
return tabList;
}

public static Map<String, List<DbModel>> getListCol(List<DbModel> modelList)
throws Exception {

Map<String, List<DbModel>> m = new HashMap<String, List<DbModel>>();

// 定义了数据库连接串
String dbUrl = getProValue("DB.Url");
// 数据库的用户名
String user = getProValue("DB.NAME");
// 数据库的用户口令
String password = getProValue("DB.PASSWORD");
// 加载jdbc-odbc bridge驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
// 与url指定的数据源建立连接

String sql = "SELECT DISTINCT(A.COLUMN_NAME),A.COMMENTS ,B.DATA_TYPE,B.DATA_LENGTH "
+ "FROM USER_COL_COMMENTS A, ALL_TAB_COLUMNS B "
+ "WHERE A.TABLE_NAME = B.TABLE_NAME AND A.TABLE_NAME = ?";

if (modelList.size() != 0 && modelList != null) {

for (int i = 0; i < modelList.size(); i++) {

Connection c = DriverManager.getConnection(dbUrl, user,
password);

PreparedStatement p = null;
ResultSet r = null;

List<DbModel> tabList = new ArrayList<DbModel>();

// 采用Statement进行查询
p = c.prepareStatement(sql);

p.setString(1, modelList.get(i).getTableName());

r = p.executeQuery();

while (r.next()) {
DbModel model = new DbModel();
model.setColName(r.getString(1));
model.setColComments(r.getString(2));
model.setDataType(r.getString(3));
model.setDataLength(r.getString(4));
tabList.add(model);
}
m.put(modelList.get(i).getTableName(), tabList);
r.close();
p.close();
c.close();
}
}

return m;
}

// --------------------DB End -----------------------

// -------------Properties Start-----------------------
public static String getProValue(String key) throws Exception {

Configuration config = new PropertiesConfiguration(
"filePath.properties");
String value = config.getString(key);

return value;
}

// -------------Properties End-----------------------

// -----------------------DB down start----------------------

private static void db_down(List<DbModel> tab,
Map<String, List<DbModel>> col) throws Exception {

String outputFile = getProValue("DOWN_FILE_PATH");

// 工作簿
HSSFWorkbook hssfworkbook = new HSSFWorkbook();

String tableName = "";
String tableComments = "";
if (tab.size() != 0 && tab != null) {

for (int i = 0; i < tab.size(); i++) {

tableName = tab.get(i).getTableName();
tableComments = tab.get(i).getTableComments();
List<DbModel> colList = col.get(tableName);

// 创建sheet页
HSSFSheet hssfsheet = hssfworkbook.createSheet();

// sheet名称乱码处理
hssfworkbook.setSheetName(i, tableName);

hssfsheet.setColumnWidth(0, 20 * 256);
hssfsheet.setColumnWidth(1, 30 * 256);
hssfsheet.setColumnWidth(2, 15 * 256);
if (colList.size() != 0 && colList != null) {

//------------------表 名称 start--------------
// 取得第一行
HSSFRow hssfrow_table_title = hssfsheet.createRow(0);

HSSFCell cell_table_title_name = hssfrow_table_title.createCell((short) 0);
cell_table_title_name.setCellType(HSSFCell.CELL_TYPE_STRING);
cell_table_title_name.setCellValue(changeCharset("表名称"));


HSSFCell cell_table_title_0 = hssfrow_table_title.createCell((short) 1);
cell_table_title_0.setCellType(HSSFCell.CELL_TYPE_STRING);
cell_table_title_0.setCellValue(changeCharset(tableName));

HSSFCell cell_table_title_1 = hssfrow_table_title.createCell((short) 2);
cell_table_title_1.setCellType(HSSFCell.CELL_TYPE_STRING);
cell_table_title_1.setCellValue(changeCharset(tableComments));

//------------------表 名称 start--------------

// -------------标题 start----------------------

// 取得第一行
HSSFRow hssfrow = hssfsheet.createRow(1);

// 创建第一个单元格 并处理乱码
HSSFCell cell_t_0 = hssfrow.createCell((short) 0);

cell_t_0.setCellType(HSSFCell.CELL_TYPE_STRING);
// 对第1个单元格赋值
cell_t_0.setCellValue(changeCharset("字段"));

// 创建第1个单元格 并处理乱码
HSSFCell cell_t_1 = hssfrow.createCell((short) 1);

cell_t_1.setCellType(HSSFCell.CELL_TYPE_STRING);
// 对第1个单元格赋值
cell_t_1.setCellValue(changeCharset("注释"));

// 创建第2个单元格 并处理乱码
HSSFCell cell_t_2 = hssfrow.createCell((short) 2);

cell_t_2.setCellType(HSSFCell.CELL_TYPE_STRING);
// 对第2个单元格赋值
cell_t_2.setCellValue(changeCharset("类型"));

// 创建第3个单元格 并处理乱码
HSSFCell cell_t_3 = hssfrow.createCell((short) 3);

cell_t_3.setCellType(HSSFCell.CELL_TYPE_STRING);
// 对第4个单元格赋值
cell_t_3.setCellValue(changeCharset("长度"));

// -------------标题 End----------------------

for (int j = 0; j < colList.size(); j++) {

HSSFRow hssfrow_c = hssfsheet.createRow(j + 2);

HSSFCell cell_c_0 = hssfrow_c.createCell((short) 0);
cell_c_0.setCellType(HSSFCell.CELL_TYPE_STRING);
cell_c_0.setCellValue(changeCharset(colList.get(j)
.getColName()));

HSSFCell cell_c_1 = hssfrow_c.createCell((short) 1);
cell_c_1.setCellType(HSSFCell.CELL_TYPE_STRING);
cell_c_1.setCellValue(changeCharset(colList.get(j)
.getColComments()));

HSSFCell cell_c_2 = hssfrow_c.createCell((short) 2);
cell_c_2.setCellType(HSSFCell.CELL_TYPE_STRING);
cell_c_2.setCellValue(changeCharset(colList.get(j)
.getDataType()));

HSSFCell cell_c_3 = hssfrow_c.createCell((short) 3);
cell_c_3.setCellType(HSSFCell.CELL_TYPE_STRING);
cell_c_3.setCellValue(changeCharset(colList.get(j)
.getDataLength()));

}

}

}
}

// 输出
System.out.println("PATH:"+outputFile);
FileOutputStream fileoutputstream = new FileOutputStream(outputFile);
hssfworkbook.write(fileoutputstream);
fileoutputstream.close();

System.out.println("文件生成完了。。。。。。。。。。。。。。。。");
}

// -----------------------DB down End----------------------

// ------------字符编码 Start---------------------------
private static String changeCharset(String str) throws Exception {
if (str != null) {
// 用默认字符编码解码字符串。
byte[] bs = str.getBytes();
// 用新的字符编码生成字符串
return new String(bs, "UTF-8");
}
return "";
}
// ------------字符编码 End---------------------------
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值