一、导出到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);
}
}
}

最新文章

  1. JavaScript练习之for循环语句
  2. WebHeaderCollection 类
  3. UI学习笔记---第三天
  4. AndroidSDK无法下载API包的解决方法
  5. Spring源码入门——XmlBeanDefinitionReader解析
  6. 4种字符串匹配算法:BS朴素 Rabin-karp(上)
  7. Longest Ordered Subsequence
  8. Schema-based AOP support
  9. Javascript 基础编程练习一
  10. 帝国cms语句调用
  11. web 安全知识
  12. leetcode409
  13. 《C++之那些年踩过的坑(二)》
  14. /VAR/LOG/各个日志文件分析
  15. 2.13 break和continue
  16. jquery easyui的应用-2
  17. BZOJ4992 [Usaco2017 Feb]Why Did the Cow Cross the Road 最短路 SPFA
  18. epoll惊群原因分析
  19. Python 安装 lxml 插件
  20. Unity3D研究院之设置自动旋转屏幕默认旋转方向

热门文章

  1. js打开新页面与关闭当前页面
  2. samsung bios configuration怎么设置U盘启动
  3. 解决:/bin/bash: mvn: 未找到命令
  4. PathGradientBrush类进行渐变颜色的填充
  5. shell中$0,$?,$!等的特殊用法
  6. win7电脑怎么修改计算机用户名Administrator
  7. JVM内存模型、指令重排、内存屏障概念解析
  8. 获取centos6.5系统信息脚本
  9. LoadRunner 获取接口请求响应信息
  10. JS 面向对象随笔