【Java EE 学习 17 下】【数据库导出到Excel】【多条件查询方法】

时间:2022-08-27 21:16:57

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

运行结果:

  【Java EE 学习 17 下】【数据库导出到Excel】【多条件查询方法】

  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;
}
}

运行结果:

    【Java EE 学习 17 下】【数据库导出到Excel】【多条件查询方法】

二、多条件查询方法简介

  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);
}
}
}

【Java EE 学习 17 下】【数据库导出到Excel】【多条件查询方法】的更多相关文章

  1. 【Java EE 学习 24 下】【注解在数据库开发中的使用】【反射&plus;注解&plus;动态代理在事务中的应用service层】

    一.使用注解可以解决JavaBean和数据库中表名不一致.字段名不一致.字段数量不一致的问题. 1.Sun公司给jdbc提供的注解 @Table.@Column.@Id.@OneToMany.@One ...

  2. 【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】

    一.动态SQL 什么是动态SQL,就是在不同的条件下,sql语句不相同的意思,曾经在“酒店会员管理系统”中写过大量的多条件查询,那是在SSH的环境中,所以只能在代码中进行判断,以下是其中一个多条件查询 ...

  3. 【Java EE 学习 67 下】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】

    一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar ...

  4. 【Java EE 学习 69 下】【数据采集系统第一天】【实体类分析和Base类书写】

    之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个 ...

  5. 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】

    疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...

  6. 【Java EE 学习 77 下】【数据采集系统第九天】【使用spring实现答案水平分库】【未解决问题:分库查询问题】

    之前说过,如果一个数据库中要存储的数据量整体比较小,但是其中一个表存储的数据比较多,比如日志表,这时候就要考虑分表存储了:但是如果一个数据库整体存储的容量就比较大,该怎么办呢?这时候就需要考虑分库了, ...

  7. 【Java EE 学习 74 下】【数据采集系统第六天】【使用Jfreechart的统计图实现】【将JFreechart整合到项目中】

    之前说了JFreechart的基本使用方法,包括生成饼图.柱状统计图和折线统计图的方法.现在需要将其整合到数据采集系统中根据调查结果生成三种不同的统计图. 一.统计模型的分析和设计 实现统计图显示的流 ...

  8. 【Java EE 学习 72 下】【数据采集系统第四天】【移动&sol;复制页分析】【使用串行化技术实现深度复制】

    一.移动.复制页的逻辑实现 移动.复制页的功能是在设计调查页面的时候需要实现的功能.规则是如果在同一个调查中的话就是移动,如果是在不同调查中的就是复制. 无论是移动还是复制,都需要注意一个问题,那就是 ...

  9. 【Java EE 学习 70 下】【数据采集系统第二天】【Action中User注入】【设计调查页面】【Action中模型赋值问题】【编辑调查】

    一.Action中User注入问题 Action中可能会经常用到已经登陆的User对象,如果每次都从Session中拿会显得非常繁琐.可以想一种方法,当Action想要获取User对象的时候直接使用, ...

随机推荐

  1. C&num;&sol;ASP&period;NET MVC微信公众号接口开发之从零开发(四) 微信自定义菜单&lpar;附源码&rpar;

    C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...

  2. 利用百度地图开源sdk获取地址信息。

    注册百度开发者帐号,下载相关sdk 添加权限: 添加百度注册访问应用(AK)码 添加源代码文件到libs文件: 代码如下: package com.lixu.baidu_gps; import com ...

  3. j2ee学习笔记 Filter过滤器

    作用:过滤response和request对象的内容 使用: Filter是J2EE的一个接口,自定义Filter需要实现该接口,并重写所有的方法. Filter提供的方法: init() doFil ...

  4. CMake初步(1)

    转自:<你所不知的OSG>第一章:CMake初步(1)http://bbs.osgchina.org/forum.php?mod=viewthread&tid=1189&f ...

  5. mongoDB创建数据库用户

    运行mongo.exe >use demo //切换到要创建用户的数据库 >db.createUser({user: "admin",pwd: "admin& ...

  6. 【bzoj 1095】&lbrack;ZJOI2007&rsqb;Hide 捉迷藏

    题目链接: TP 题解: 样例好良心,调样例3h一A…… 细节好多……诸如没完没了的pop和push……搞得头都大了. 同情zzh……调了整一天了. 动态点分治裸题……果然每个“裸题”打起来都跟shi ...

  7. python 修改的函数装饰器

    把好的代码记录下来 方便以后学习 修改的函数参数装饰器 from functools import wraps import time import logging def warn(timeout) ...

  8. Android 性能优化-启动时间

    adb shell am start -W -n com.xxxx(包名)/xxx.xxxActivity(launch Activity)

  9. ALSA声卡驱动的DAPM(一)-DPAM详解

    最近使用tinymix 调试相应的音频通道,但是一直不知道音频通道的原理是什么.所以百度了一下,百度结果是与DPAM有关. 一.DAPM简介: DAPM是Dynamic Audio Power Man ...

  10. PHP - CentOS下开发运行环境搭建(Apache&plus;PHP&plus;MySQL&plus;FTP)

    本文介绍如何在 Linux下搭建一个 PHP 环境.其中 Linux 系统使用是 CentOS 7.3,部署在阿里云服务器上.   1,连接登录服务器 拿到服务器的 ip.初始密码以后.我们先通过远程 ...