一、导出到Excel
1.使用DatabaseMetaData分析数据库的数据结构和相关信息。
(1)测试得到所有数据库名:
private static DataSource ds=DataSourceUtils_C3P0.getDataSource();
Connection conn=ds.getConnection();
DatabaseMetaData dbmd=conn.getMetaData();
ResultSet rs=dbmd.getCatalogs();
while(rs.next())
{
System.out.println(rs.getString("TABLE_CAT"));
}
String dbName=dbmd.getDatabaseProductName();
String dbVersion=dbmd.getDatabaseProductVersion();
System.out.println(dbName+":"+dbVersion);
运行结果:
information_schema
bms
bookstore
contacts
day20
mysql
performance_schema
shopping
test
user
users
MySQL:5.5.25
(2)根据数据库名得到所有表名
public void testGetTalbesByDBName() throws SQLException
{
Connection conn=ds.getConnection();
DatabaseMetaData dbmd=conn.getMetaData();
ResultSet rs=dbmd.getTables("test", "test", null, new String[]{"TABLE"});
while(rs.next())
{
System.out.println(rs.getString("TABLE_NAME"));
}
}
运行结果:
people
user
2.使用ResultSetMetaData分析表结构。
public void testTest1() throws SQLException
{
Connection conn=ds.getConnection();
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery("select id,name,age,sex from people");
ResultSetMetaData rsmd=rs.getMetaData();
int columnsCount=rsmd.getColumnCount();
System.err.println("一共有"+columnsCount+"列!");
for(int i=0;i<columnsCount;i++)
{
String columnName=rsmd.getColumnName(i+1);
System.out.print(columnName+"\t\t");
}
System.out.println();
while(rs.next())
{
for(int i=0;i<columnsCount;i++)
{
String columnName=rsmd.getColumnName(i+1);
System.out.print(rs.getString(columnName)+"\t\t");
}
System.out.println();
}
conn.close();
}
运行结果:
id name age sex
001 张三 12 男
002 李四 13 男
003 王五 15 男
3.使用第三方jar包测试操作Excel文件。
(1)POI下载:http://poi.apache.org/download.html
(2)测试POI
package day17.kdyzm.Test; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; public class TestPOI {
public static void main(String[] args) throws Exception {
FileOutputStream fos=new FileOutputStream("first.xls");
Workbook workbook=new HSSFWorkbook();
Sheet sheet=workbook.createSheet("第一张表");
Row row=sheet.createRow(0);
Cell cell1=row.createCell(0);
cell1.setCellValue("第一行第一列第一个数据");
Cell cell2=row.createCell(1);
cell2.setCellValue("第一行第二列第一个数据");
workbook.close();
workbook.write(fos);
fos.close();
}
}
运行结果:
4.导出数据库到Excel,每一个标签页对应着一张表,而且要求灵活更换内容。
package day17.kdyzm.exportToExcel; import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import day17.regular.utils.DataSourceUtils_C3P0; /**
* 将数据库中的表数据导出到Excel表格中
* @author kdyzm
*
*/
public class ExportDataToExcel {
private static String dbname="bookstore";
public static void main(String[] args) throws Exception {
List<String>tablenames=getAllTableNames(dbname);
backupToXls(tablenames);
}
//通过所有的表名将数据被分到xls文件中
private static void backupToXls(List<String> tablenames) throws Exception {
Connection conn=DataSourceUtils_C3P0.getConnection();
Workbook wb=new HSSFWorkbook();
FileOutputStream fos=new FileOutputStream(dbname+".xls");
Statement st=conn.createStatement();
for(String tablename:tablenames)
{
Sheet sheet=wb.createSheet(tablename);
String sql="select * from "+dbname+"."+tablename;
ResultSet rs=st.executeQuery(sql);
ResultSetMetaData rsmt=rs.getMetaData();
int columns=rsmt.getColumnCount();
//写入第一行tablehead
Row tablehead=sheet.createRow(0);
for(int i=0;i<columns;i++)
{
String columnName=rsmt.getColumnName(i+1);
Cell cell=tablehead.createCell(i);
cell.setCellValue(columnName);
}
//写入数据
int index=1;
while(rs.next())
{
Row row=sheet.createRow(index++);
for(int i=0;i<columns;i++)
{
String columnName=rsmt.getColumnName(i+1);
String value=rs.getString(columnName);
Cell cell=row.createCell(i);
cell.setCellValue(value);
}
}
}
wb.write(fos);
wb.close();
fos.close();
conn.close();
}
//首先获得所有的表名列表
private static List<String> getAllTableNames(String dbname) throws SQLException {
Connection conn=DataSourceUtils_C3P0.getConnection();
DatabaseMetaData dmd=conn.getMetaData();
ResultSet rs=dmd.getTables(dbname, dbname, null, new String[]{"TABLE"});
List<String>tablenames=new ArrayList<String>();
while(rs.next())
{
tablenames.add(rs.getString("TABLE_NAME"));
}
conn.close();
return tablenames;
}
}
运行结果:
二、多条件查询方法简介
1.核心思想: where 1=1 使用的要恰到好处
2.实现方法:
package day17.kdyzm.searchByMultipleInput;
public class People {
private String id;
private String name;
private int age;
private String sex; public People() {
}
public People(String id, String name, int age, String sex) {
super();
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "People [id=" + id + ", name=" + name + ", age=" + age
+ ", sex=" + sex + "]";
}
}
package day17.kdyzm.searchByMultipleInput; import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import javax.sql.DataSource; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler; import day17.regular.utils.DataSourceUtils_C3P0; /**
* 多条件查询方法:可以极大提高代码书写效率
* 结合dbutils
* 结合java Bean
* @author kdyzm
*
*/
public class SearchByMultipleInput {
public static void main(String args[]) throws SQLException{
DataSource ds=DataSourceUtils_C3P0.getDataSource();
String sql="select * from people where 1=1";
People p=new People();
p.setId(null);
p.setName(null);
p.setAge(0);
p.setSex("女");
List<String>list=new ArrayList<String>();
if(p.getId()!=null){
sql=sql+" and id=?";
list.add(p.getId());
}
if(p.getName()!=null){
sql=sql+" and name like ?";
list.add("%"+p.getName()+"%");
}
if(p.getAge()!=0){
sql=sql+" and age=?";
list.add(p.getAge()+"");
}
if(p.getSex()!=null){
sql=sql+" and sex=?";
list.add(p.getSex());
}
QueryRunner run=new QueryRunner(ds);
List<People>peoples=run.query(sql,new BeanListHandler<People>(People.class),list.toArray());
for(People pp:peoples)
{
System.out.println(pp);
}
}
}