欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库数据导入到excel,源代码 博客分类: java 数据库excel源代码

程序员文章站 2024-03-17 10:36:34
...

1.支持包

    1.1commons-dbutils-1.3.jar                   操作数据库数据

    1.2mysql-connector-java-5.0.8-bin.jar   用于连接数据库

    1.3poi-3.7-20101029.jar                       POI提供API给Java程序对Microsoft Office格式档案读和写的功能

    1.4支持包使用方法:

       1.4.1在java工程文件夹中新建一个文件夹lib 然后把jar包复制到该文件夹中
       1.4.2.对该jar包单击右键,选择build path 然后选择add to build path 就可以了

 

2.源代码(只能应用于mysql数据库)

   2.1connection类,用于获取数据库的连接,使用需要修改密码和用户名

package s0505将数据库的数据转移到excel中;
import java.sql.Connection;
import java.sql.DriverManager;
/**
 * 用静态工厂方法管理一个唯一的可重用的连接
 */
public class Connection2 {
	private static Connection con;
	//在静态代码块中创建与数据库的连接
	static{
		try{
			Class.forName("com.mysql.jdbc.Driver");
			String url="jdbc:mysql://localhost:3306/first"; 
			String user="root";
			String password="admin";
			con = DriverManager.getConnection(url, user, password);
		}catch(Exception e){
			throw new RuntimeException(e.getMessage(),e);
		}
	}
	//使用一个静态方法-静态工厂方法,返回connection实例
	public static Connection getCon(){
		return con;
	}
}

 

 2.2 主方法

package s0505将数据库的数据转移到excel中;
//将一个数据库中的所有数据导入到excel中
//每一个数据库table表对应一个excel的工作表
import java.io.FileOutputStream;
import java.io.IOException;
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.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;


public class DatabaseToExcel {
	
	public void export(){
		//声明需要导出的数据库
		try {
			String dbName = "first";

			//获取Connection,获取db的元数据
			Connection con = Connection2.getCon();
			//声明statement
			Statement st = con.createStatement();
			//st.execute("use "+dbName);
		
			DatabaseMetaData dmd = con.getMetaData();
			//获取数据库有多少表
			ResultSet rs = dmd.getTables(dbName,dbName,null,new String[]{"TABLE"});
		
			//获取所有表名 - 就是一个sheet
			List<String> tables = new ArrayList<String>();
			while(rs.next()){
				tables.add(rs.getString("TABLE_NAME"));//得到数据库中所有的table名字,并存入list中
			}
			
			//声明表
			HSSFWorkbook book = new HSSFWorkbook();
			
			//遍历表,转移数据
			for(String tableName:tables){
				HSSFSheet sheet = book.createSheet(tableName);
				//声明sql
				String sql = "select * from "+dbName+"."+tableName;
				//查询数据
				rs = st.executeQuery(sql);
				//根据查询的结果,分析结果集的元数据
				ResultSetMetaData rsmd = rs.getMetaData();
				//获取这个表table,查询有多少列
				int cols = rsmd.getColumnCount();
				//创建第一行
				HSSFRow row = sheet.createRow(0);
				
				for(int i=0;i<cols;i++){
					//创建一个新的列
					HSSFCell cell = row.createCell(i);
					//写入列名
					cell.setCellValue(rsmd.getColumnName(i+1));//第一个列名下标从1开始,获取列名之后就对excel表格赋值
				}
				
				//遍历数据
				int index = 1;
				while(rs.next()){
				    //创建第index+1行,因为第一行下标是0,而且第一行用来做属性名,所以数据从第二行开始,下标就是1
					row = sheet.createRow(index++);
					//声明列
					for(int i=0;i<cols;i++){
						//得到数据的值
						String val = rs.getString(i+1);
						//声明列
						HSSFCell cel = row.createCell(i);
						//放数据
						cel.setCellValue(val);
						
					//就是只要还有数据,就一行一行填满数据,直到没有数据为止
					}
				}
			}
			
			con.close();
			book.write(new FileOutputStream("C:/Users/Administrator/Desktop/"+dbName+".xls"));
		} catch (SQLException | IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args){

			new DatabaseToExcel().export();
		}
		
}