知识点1:数据库元数据操作
元数据:描述数据的诗句
获取数据库的元信息
站在数据库的角度操作
通过
DatabaseMetaData dm = con.getMetaData();
动态获取数据库名:
相当于执行: show databases;
ResultSet rs = dm.getCatalogs();//相当于执行: show databases;
知道了数据名,动态获取表名
ResultSet rs2 = dm.getTables("aa", "aa", null, new String[]{"TABLE"});
while(rs2.next()){
System.out.println(rs2.getString("TABLE_NAME"));
}
在知道数据库名与表名的情况下,可以通过跨库查询,把表头和表内容都查询出来
输出表头信息
ResultSetMetaData rsmt = rs.getMetaData();
int columns = rsmt.getColumnCount();
for(int i=0;i<columns;i++){
System.out.print(rsmt.getColumnName(i+1)+"\t");
}
输出表数据:
while(rs.next()){
System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getInt(3)+"\t"+rs.getString(4)+"\t"+rs.getInt(5));
}
知识点二:通过Apache公司的poi的jar包可以将数据导出,这里我们着重将导出到xls表格。
思想是与dom模型一样的
2007版本之前用xls—HSSF
2007版之后用xlsx—XSSF
本质是new一个HSSFWorkbook对象(工作薄)写到文件流FileOutputStream中去。
建立表:
HSSFSheet sheet = book.createSheet();
建立行
HSSFRow row1 =sheet.createRow(1);
插入列:
row1.createCell(3).setCellValue("这是我测试的字符");
这里要注意的是,因为xls本质是帮我们建好了表格,所以我们可以直接指定行号和列号使用。 在xls显示的时候行列号是从1开始的,但是在我们代码中行列号是从0开始的
小细节:
我们写代码的时候,要尽量避免结果集套接:在一个结果集操作的内部进行其他结果集操作,一个结果集的回退或者提交会波及另一个。
本文知识点练习代码如下:
MetaDataDemo
注意:要导入数据库连接jar包才能成功连接数据库
package cn.hncu.meta;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import org.junit.Test;
import cn.hncu.pool.day2.v2.ConnsUtils3;
/**
* 元数据操作 元数据:描述数据的数据
*
* @author <a href="mailto:wyj950411@foxmail.com">军街</a>
*
* @version 1.0 2016-8-10
*/
public class MetaDataDemo {
/**
* 站在数据库的角度操作
* @throws Exception
*/
@Test
public void databaseMetaDataDemo() throws Exception{
Connection con = ConnsUtils3.getCon();
DatabaseMetaData dm = con.getMetaData();
//获取数据库的元信息
System.out.println(dm.getDriverName());
System.out.println(dm.getURL());
System.out.println(dm.getDriverVersion());
System.out.println(dm.getMaxStatements());
System.out.println(dm.getJDBCMajorVersion());
System.out.println("=========================");
//动态获取数据库名
ResultSet rs = dm.getCatalogs();//相当于执行: show databases;
while(rs.next()){
System.out.println(rs.getString(1));
}
System.out.println("------------下面输出表名-------------");
con.createStatement().execute("use aa");//使用aa数据库
//知道了数据名,动态获取表名
ResultSet rs2 = dm.getTables("aa", "aa", null, new String[]{"TABLE"});
while(rs2.next()){
System.out.println(rs2.getString("TABLE_NAME"));
}
}
//在知道数据库名与表名的情况下,可以通过跨库查询,把表头和表内容都查询出来
@Test
public void ResultSetMetaDataDemo() throws Exception{
Connection con = ConnsUtils3.getCon();
Statement st = con.createStatement();
String sql ="select * from test.sstud";
ResultSet rs = st.executeQuery(sql);
//输出表头信息
ResultSetMetaData rsmt = rs.getMetaData();
int columns = rsmt.getColumnCount();
for(int i=0;i<columns;i++){
System.out.print(rsmt.getColumnName(i+1)+"\t");
}
System.out.println();
System.out.println("-------------------------------------------------");
while(rs.next()){
System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getInt(3)+"\t"+rs.getString(4)+"\t"+rs.getInt(5));
}
}
}
XlsDataDemo
注意:练习这个的时候一定要导poi的jar包才能使用
package cn.hncu.meta;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.junit.Test;
import cn.hncu.pool.day2.v2.ConnsUtils3;
public class XlsDataDemo {
@Test
public void xlsDemo() throws Exception{
HSSFWorkbook book = new HSSFWorkbook();
FileOutputStream fout = new FileOutputStream("a.xls");
HSSFSheet sheet = book.createSheet();
HSSFRow row1 =sheet.createRow(1);
row1.createCell(3).setCellValue("这是我测试的字符");
book.write(fout);
}
/**
* 做一个将数据库的数据导出到一个xls表格当中
* @throws Exception
*/
@Test
public void import2XLS () throws Exception{
String databaseName = "aa";//要导出的数据库
String fileName = "b.xls";//要导出的xls的文件名
doImport2XLS(databaseName,fileName);
}
private void doImport2XLS(String databaseName,String fileName) throws Exception{
Connection con = ConnsUtils3.getCon();
Statement st = con.createStatement();
DatabaseMetaData dm = con.getMetaData();
ResultSet rs = dm.getTables(databaseName, databaseName, null, new String[]{"TABLE"});
List<String> list = new ArrayList<String>();
while(rs.next()){
list.add(rs.getString("TABLE_NAME")); //将此数据库中的每一个表都加到list中去
}
HSSFWorkbook book = new HSSFWorkbook();
FileOutputStream fout = new FileOutputStream(fileName);
for(String tableName: list){ //对于每一个表 我们都去把它导出到xls中
String sql = "select * from "+tableName;
HSSFSheet sheet = book.createSheet(tableName);
rs = st.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int columns = rsmd.getColumnCount();
int index = 0;
while(rs.next()){
HSSFRow row = sheet.createRow(index++);
for(int i=0;i<columns;i++){
row.createCell(i).setCellValue(rs.getString(i+1));
}
}
}
book.write(fout);
}
}