纯干货:
获取数据库名称:
1 /**
2 * 获取数据库的名称
3 */
4 public void getDataBaseName() throws Exception {
5 Connection con = DSUtils.getConnection();
6 // 获取DataBasematedata
7 DatabaseMetaData db = con.getMetaData();
8 System.err.println(db.getDatabaseProductName());// 数据库的名称
9 System.err.println(db.getDatabaseMajorVersion());// 数据库的主版本
10 System.err.println(db.getDatabaseMinorVersion());// 数据库的小版本
11 System.err.println(db.getDriverName());// 驱动器的名称
12 }
获取数据库表名:
这里有一个地方是要注意:查询mysql数据库的时候要在getTables的前两个参数里传入自己数据库名称,两个一样就行了
但是查询Oracle数据库的时候需要传入用户名但是必须大写!必须大写!必须大写!
/**
* 获取某个数据库中有多少表
*/public void testGetTable() throws Exception {
Connection con = DSUtils.getConnection();
DatabaseMetaData db = con.getMetaData();
// 获取这个数据库中所有的表的结果集
// 访问oracle时要大写!!!
ResultSet rs = db.getTables("BAI", "BAI", null, new String[] { "TABLE" });
while (rs.next()) {
String tName = rs.getString("TABLE_NAME");
System.err.println(tName);
}
con.close();
}
分析一个表有多少列及列的类型:
1 /**
2 * 使用ResultSetMatedata分析一个表有多少列 及列的类型
3 */
4 public void testTableColumns() throws Exception {
5 Connection con = DSUtils.getConnection();
6 Statement st = con.createStatement();
7 String sql = "select * from person";
8 ResultSet rs = st.executeQuery(sql);
9 // 获取结果集的元信息
10 ResultSetMetaData rsmd = rs.getMetaData();
11 // 获取列的数量
12 int cols = rsmd.getColumnCount();
13 // 遍历列的的数量获取列的名称
14 for (int i = 1; i <= cols; i++) {
15 String name = rsmd.getColumnName(i);
16 String type = rsmd.getColumnTypeName(i);
17 int size = rsmd.getColumnDisplaySize(i);
18 System.err.println(name + " " + type + "(" + size + ")");
19 }
20 }
拐个弯先弄个表:
1 /**
2 * 创建一个新的Excel文件
3 */
4 public void createExcel() throws Exception {
5 // 1:创建一个工作文件
6 HSSFWorkbook book = new HSSFWorkbook();
7 // 2:创建一个工作表
8 HSSFSheet sheet = book.createSheet("Sheet1");
9 // 3:创建一行
10 HSSFRow row = sheet.createRow(0);
11 // 创建一个单元格
12 HSSFCell cel = row.createCell(0);
13 // 保存数据
14 cel.setCellValue("hello");
15 // 保存这个文件
16 book.write(new FileOutputStream("f:/a.xls"));
17 }
好吧,元数据分析到底有啥用?我也没搞明白点啥,不过可以开发一个工具类玩玩:
1 package cn.qlu.utils;
2
3 import java.io.FileOutputStream;
4 import java.sql.Connection;
5 import java.sql.DatabaseMetaData;
6 import java.sql.ResultSet;
7 import java.sql.ResultSetMetaData;
8 import java.sql.Statement;
9 import java.util.ArrayList;
10 import java.util.List;
11
12 import org.apache.poi.hssf.usermodel.HSSFCell;
13 import org.apache.poi.hssf.usermodel.HSSFRow;
14 import org.apache.poi.hssf.usermodel.HSSFSheet;
15 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
16 import org.junit.Test;
17
18 public class XlsOutputUtils {
19 String dbName;
20 String file;
21 public XlsOutputUtils(String dbmane,String file) {
22 this.dbName=dbmane;
23 this.file=file;//类似这玩意"f:/xls/"
24 }
25 /**
26 * 导出指定的数据库中的所有表 – 表中的数据
27 */
28 public void exportTableDatas() throws Exception {
29
30
31 HSSFWorkbook book = new HSSFWorkbook();
32
33
34 Connection con = DSUtils.getConnection();
35 DatabaseMetaData db = con.getMetaData();
36 // 获取这个数据库中所有的表的结果集
37 ResultSet rs = db.getTables(dbName, dbName, null, new String[] { "TABLE", "VIEW" });
38 // 将所有表名先保存到一个集合中去
39 List<String> tables = new ArrayList<String>();
40 while (rs.next()) {
41 String tName = rs.getString("TABLE_NAME");
42 tables.add(tName);
43 }
44 System.err.println("tales:" + tables);
45 Statement st = con.createStatement();
46 // 遍历所有表
47 for (String table : tables) {
48 // 创建一个工作表
49 HSSFSheet sheet = book.createSheet(table);
50
51 // 每遍历 一个表,就查询这个表
52 String sql = "select * from " + dbName + "." + table;
53 rs = st.executeQuery(sql);// 执行查询
54 // 获取结果集的元信息
55 ResultSetMetaData rsmd = rs.getMetaData();
56 int cols = rsmd.getColumnCount();
57 // 创建第一行
58 HSSFRow row = sheet.createRow(0);
59
60 // 获取列名
61 for (int i = 0; i < cols; i++) {
62 String colName = rsmd.getColumnName(i + 1);
63 // 创建一个单元格
64 HSSFCell cel = row.createCell(i);
65 // 设置值
66 cel.setCellValue(colName);
67 }
68 // 获取里面的数据
69 int rowIndex = 1;
70 while (rs.next()) {
71
72 // 行
73 row = sheet.createRow(rowIndex++);
74
75 // 再遍历列
76 for (int i = 0; i < cols; i++) {
77 // 直接获取这一列的数据
78 Object val = rs.getObject(i + 1);
79 //
80 HSSFCell cel = row.createCell(i);
81 cel.setCellValue("" + val);
82 }
83 }
84 }
85
86 con.close();
87 book.write(new FileOutputStream(file + dbName + ".xls"));
88 }
89
90 }
还可以搞个实用一点的:数据操作工具类,提供对任意表的查询, 对任意对象(Bean)的封装
1 package cn.qlu.utils;
2
3 import java.beans.PropertyDescriptor;
4 import java.lang.reflect.Method;
5 import java.sql.Connection;
6 import java.sql.ParameterMetaData;
7 import java.sql.PreparedStatement;
8 import java.sql.ResultSet;
9 import java.sql.ResultSetMetaData;
10 import java.sql.SQLException;
11 import java.sql.Statement;
12 import java.util.ArrayList;
13 import java.util.List;
14
15 import javax.sql.DataSource;
16
17 import org.apache.commons.beanutils.BeanUtils;
18
19
20 /**
21 * 数据操作工具类,提供对任意表的查询, 对任意对象(Bean)的封装
22 * @author baix
23 */
24 @SuppressWarnings("unused")
25 public class QueryUtils {
26 /**
27 * 获取连接可以通过接收DataSource
28 */
29 private DataSource dataSource;
30
31 /**
32 * 在实例化这个类时,接收数据源
33 */
34 public QueryUtils(DataSource ds) {
35 this.dataSource = ds;
36 }
37
38 /**
39 * 接收两个参数
40 *
41 * @param sql
42 * : 执行的SQL
43 * @param Class
44 * : 可以传递Person.class
45 * @return
46 */
47 public <T> List<T> query(String sql, Class<T> cls, Object... params) {
48 List<T> list = new ArrayList<T>();
49 Connection con = null;
50 PreparedStatement st = null;
51 ResultSet rs = null;
52 try {
53 con = dataSource.getConnection();
54 st = con.prepareStatement(sql);
55 // 判断 参数的个数
56 ParameterMetaData pmd = st.getParameterMetaData();
57 if (pmd.getParameterCount() != params.length) {
58 throw new RuntimeException("何不自挂东南枝,参数个数不一样!");
59 }
60 // 设置参数
61 for (int i = 0; i < params.length; i++) {
62 st.setObject(i + 1, params[i]);
63 }
64
65 rs = st.executeQuery();
66
67 // 获取结果集的元数据
68 ResultSetMetaData rsmd = rs.getMetaData();
69 int cols = rsmd.getColumnCount();
70
71 // 以下开始叫DAO数据封装
72 while (rs.next()) {
73 T p = cls.newInstance();
74 // 获取列的名称 id - > p.setId
75 for (int i = 0; i < cols; i++) {
76 // 获取列名
77 String colName = rsmd.getColumnName(i + 1);// id - > p.setId
78 // 获取列值
79 Object obj = rs.getObject(i + 1);
80 // BeanButils
81 BeanUtils.setProperty(p, colName, obj);
82 }
83 list.add(p);
84 }
85
86 } catch (Exception e) {
87 throw new RuntimeException(e);
88 } finally {
89 try {
90 if (rs != null) {
91 rs.close();
92 }
93 if (st != null) {
94 st.close();
95 }
96 con.close();
97 } catch (SQLException e) {
98 throw new RuntimeException(e);
99 }
100 }
101 return list;
102 }
103 }
好了先这样