标签:
纯干货:
获取数据库名称:
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 }
好了先这样
标签:
原文地址:http://www.cnblogs.com/baix/p/5445925.html