MySql导出excel,通过Java或sql语句实现

1 篇文章 0 订阅

一、前言

第一次开始记录自己学的东西,感觉不一样啊。本人Java新手,希望大佬们指正指正(?)

二、两种导出excel的方式

  1. 通过sql语句直接导出excel表,但是有一点缺点,就是excel没有列名,相当于只有数据库表的记录而已,没有属性名。并且excel表的每一格的样式不可以设置。(不推荐)
  2. java代码连接数据库导出excel表格,可以修改单元格样式,添加每一列的列名(推荐)

三、具体实现

sql语句如下:

use one;//使用哪一个数据库
select * from tb_driver order by id asc into outfile "G:/2.xls" character set gbk;


sql语句导出excel文件注意事项

  1. 对于我这里只可以导出xls文件,另外一种xlsx我电脑上打不开,之后遇到需要导出xlsx文件,我会补充在这?
  2. 在我这设置了导出文件的编码格式为gbk,不设置的话中文会显示乱码。这是excel表格打开文件的编码引起的(我认为,网上说excel打开文件默认gbk编码打开)

通过java实现导出待列名的excel表

Java代码如下

package function.java.utils;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.HorizontalAlignment;


public class DataToExcel {
	/**
	 * @Title: ToExcel
	 * @Description: TODO 导出excel表格
	 * @Param: @param rowDatas 每一条记录,就是总的记录, List<List<Object>> 第一个是列名,后面的才是记录,
	 * @Param: @param outputType 导出的种类 藕塘putType -1代表导出到本地,1代表网页上导出,下载
	 * @Param: @param path 导出的路径,如果是导出到本地
	 * @Param: @param fileName 导出的文件名
	 * @Param: @param response 用于下载
	 * @Param: @return true|false
	 * @Return: boolean 
	 * @Throws
	 */
	public static boolean ToExcel(List<List<Object>>rowDatas, Integer outputType, String path, String fileName, final HttpServletResponse response) {
		@SuppressWarnings("resource")
		HSSFWorkbook wb = new HSSFWorkbook();//定义一个excel文件
		HSSFSheet sheet = wb.createSheet();//创建第一页
		HSSFCellStyle style = wb.createCellStyle();//创建样式风格
		style.setAlignment(HorizontalAlignment.CENTER);//为样式设置值,这里是居中
		HSSFRow row;
		HSSFCell cell;
		for(int i = 0; i < rowDatas.size(); i++) {
			row = sheet.createRow(i);
			for(int j = 0; j < rowDatas.get(i).size(); j++) {
				cell = row.createCell(j);//创建单元格
				cell.setCellStyle(style);//单元格应用样式
				Object o = rowDatas.get(i).get(j);
				//转换为文本格式,这样在导出文件中展示完全,可以自己尝试
				if(o instanceof Integer || o instanceof Double || o instanceof Float)
					cell.setCellValue(Double.parseDouble(""+o));//这里转换为文本格式
				else {
					cell.setCellValue(""+o);//这里转换为文本格式
				}
			}
		}
		if(outputType==-1) {
			try {
				FileOutputStream fout = new FileOutputStream(path+"//"+fileName);
				wb.write(fout);
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
		else if(outputType == 1) {
			OutputStream out = null;  
			try {  
				out = response.getOutputStream();   
				response.setContentType("application/x-msdownload");  
				response.setHeader("Content-Disposition", "attachment; filename="  
						+ URLEncoder.encode(fileName, "UTF-8"));  
				wb.write(out);  
			} catch (Exception e) {  
				e.printStackTrace();  
			} finally {    
				try {     
					out.close();    
				} catch (IOException e) {    
					e.printStackTrace();  
				}    
			}   
		}
		return false;
	}

	public static void main(String args[]) {
		//实例
		List<List<Object>>rowDatas = new ArrayList<List<Object>>();
		List<Object>datas = null;
		for(int j = 0; j < 5; j++) {
			datas = new ArrayList<Object>();
			for(int i = 0; i < 10;i++) {
				datas.add(i+"");
			}
			rowDatas.add(datas);
		}
		DataToExcel.ToExcel(rowDatas, -1,"G:", "tb.driver.xls", null);
		System.out.println("OKs");
	}
}

代码说明

如果看不懂,那请注意看一下这个说明
上述代码是一个静态工具类。

方法ToExcel是实现一个List<List>rowDatas中的数据导出成excel表中的数据,get(0)是列名,后面的才是数据。

outputType代表输出种类,其实用户下面判断,-1代表导出到本地,1代表网页上用于下载的.

path代表导出路径,比如可以是“G:”,或者“F:”,或者"G:/1"(代表g盘的文件夹1下面)

fileName代表文件名称,比如“one.xls”, “two.xls”,

response如果是想导出excel,通过网页上点击导出然后下载的话,就需要传递response对象进来

Java导出excel注意事项

  1. List<List>rowDatas中第一个(就是get(0)这里代表列名)代表的列名,后面的代表的记录数据
  2. 设置的单元格样式可以更改
  3. 这里需要导入某一个jar包。这里给这个jar的下载地址http://central.maven.org/maven2/org/apache/poi/poi/4.1.0/poi-4.1.0.jar。这是直接到maven中下的
    在这里插入图片描述

可以直接复制代码,在eclipse中运行,直接成功,然后自己分析

总结

这是很久之前写的代码,突然想记录下来,以便下次参考,小白第一次写≧ ﹏ ≦,有点说不清楚,大家不要见怪"★,°:.☆( ̄▽ ̄)/$:.°★ 。"

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要通过easyexcel导出SQL查询语句,可以使用以下步骤: 1. 使用Java中的EasyExcel库来读写Excel文件,可以在代码中添加以下依赖项: ``` <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency> ``` 2. 创建一个实体类来存储查询结果,例如: ``` public class QueryResult { private String column1; private String column2; // ... // getter and setter methods } ``` 3. 使用JDBC连接到数据库并执行SQL查询: ``` String url = "jdbc:mysql://localhost:3306/mydb"; String user = "root"; String password = "password"; Connection conn = DriverManager.getConnection(url, user, password); String sql = "SELECT column1, column2, ... FROM mytable WHERE ..."; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); List<QueryResult> results = new ArrayList<>(); while(rs.next()) { QueryResult result = new QueryResult(); result.setColumn1(rs.getString("column1")); result.setColumn2(rs.getString("column2")); // ... results.add(result); } ``` 4. 通过EasyExcel的写操作,将查询结果导出Excel文件中: ``` String fileName = "query_results.xlsx"; ExcelWriter writer = EasyExcel.write(fileName, QueryResult.class).build(); Sheet sheet = new Sheet(1, 0, QueryResult.class); writer.write(results, sheet); writer.finish(); ``` 5. 遍历查询结果并生成SQL查询语句: ``` StringBuilder sqlBuilder = new StringBuilder(); for(QueryResult result : results) { sqlBuilder.append("SELECT * FROM mytable WHERE column1 = '") .append(result.getColumn1()).append("' AND column2 = '") .append(result.getColumn2()).append("' AND ...;\n"); } ``` 6. 将生成的SQL查询语句写入磁盘: ``` String sqlFileName = "query.sql"; FileWriter sqlWriter = new FileWriter(sqlFileName); sqlWriter.write(sqlBuilder.toString()); sqlWriter.close(); ``` 请注意,在处理大量数据时,内存可能会成为一个问题。您可以考虑使用SXSSFWorkbook来处理大量数据,它可以在内存中保持较小的数据集,并将其写入磁盘。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值