JDBC导出到Excel

/**
JDBC工具类

**/
package com.hl.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 
 * @author marver
 *
 */
public class JdbcUtil {
	public static String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
	public static String username="orcl";
	public static String password="orcl";
	public static Connection conn;
	public static PreparedStatement pstm;
	public static ResultSet rs;
	public static Statement st;
	
	//连接数据库的方法
	public static Connection getConnection(){
		//加载驱动包
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			if(conn==null||conn.isClosed()){
				conn=DriverManager.getConnection(url,username, password);
				System.out.println("获取连接成功");
			}
		} catch (Exception e) {
			System.out.println("加载驱动失败。"+e);
		}
		return conn;
	}
	
	//查询方法
	public static List query(String sql){
		List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
		conn=getConnection();
		try {
			st=(Statement)conn.createStatement();   //创建执行sql的statement对象
			ResultSet rs=st.executeQuery(sql);  //执行sql语句
			ResultSetMetaData md = rs.getMetaData(); //获得结果集结构信息,元数据
		    int columnCount = md.getColumnCount();   //获得列数
			while(rs.next()){
				Map<String,Object> rowData = new HashMap<String, Object>();
				for (int i = 1; i <= columnCount; i++) {
			        rowData.put(md.getColumnName(i), rs.getObject(i));
			      }
				list.add(rowData);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
	}
	
	
	/*
	 * 关闭连接
	 */
	public static void closeAll(){
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(pstm!=null){
			try {
				pstm.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(conn!=null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	 //测试能否与oracle数据库连接成功     
    public static void main(String[] args) {  
    	getConnection();
    }    
}


/**
查询数据导出到Excel

**/

package com.hl;

import java.io.File;
import java.io.FileOutputStream;
import java.io.Reader;
import java.sql.Clob;
import java.util.List;
import java.util.Map;

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;

import com.hl.util.JdbcUtil;

public class PoiExportExcel {
	//定义Excel存放目录
	public static String outputFile="D:\\marver";
	public static String fileName="test.xls";
	public static void exportExcel() {
		try {
			//创建工作薄
			HSSFWorkbook workBook=new HSSFWorkbook();
			//创建一工作表
			HSSFSheet sheet=workBook.createSheet("通过POI创建的工作表");
			List<Map<String, Object>> list=queryDispose();
			for(int i=0;i<list.size();i++){
				Map<String, Object> map=list.get(i);
				//创建行
				HSSFRow row=sheet.createRow(i);
				int j=0;
				for(String name:map.keySet()){
					Object obj= map.get(name);
					//创建列
					HSSFCell cell=row.createCell(j);
					j++;
					cell.setCellValue(String.valueOf(mClob(obj)));//赋值
				}
			}
			//新建一个文件输出流
			File file=new File(outputFile);
			if(!file.exists()){
				file.mkdirs();
			}
			FileOutputStream fOut=new FileOutputStream(outputFile+"\\"+fileName);
			workBook.write(fOut);  //存盘
			fOut.flush();	
			fOut.close();	//关闭
			System.out.println("文件生成成功");
		} catch (Exception e) {
			System.out.println("写入Excel文件失败 "+e);
		}finally{
			JdbcUtil.closeAll();
		}
	}
	
	/**
	 * 调用jdbc查询
	 * @return
	 */
	public static List<Map<String, Object>> queryDispose(){
		String sql="select * from user where create_time>=to_date('2015-12-20','yyyy-mm-dd')";
		List<Map<String, Object>> list=JdbcUtil.query(sql);
		return list;
	}
	
	/**
	 * 处理clob字段
	 * @param clob
	 * @return
	 * @throws Exception
	 */
	public static String mClob(Object clob) throws Exception {
		if (clob == null) {
			return "";
		}
		StringBuffer clobString = new StringBuffer();
		if (clob instanceof Clob) {
			int y;
			char ac[] = new char[4096];
			Reader reader = ((Clob) clob).getCharacterStream();
			while ((y = reader.read(ac, 0, 4096)) != -1) {
				clobString.append(new String(ac, 0, y));
			}
		} else {
			clobString.append(clob.toString());
		}
		return clobString.toString();
	}
	
	public static void main(String[] args) {
		exportExcel();
	}
}


转载于:https://my.oschina.net/mavers/blog/549155

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要使用Apache POI库来处理Excel文件,然后按照以下步骤进行操作: 1. 首先,你需要定义一个实体类,用于映射到数据库表中的数据。例如,我们将创建一个名为“Person”的实体类。 ```java @Entity @Table(name = "person") public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private int age; private String email; // getters and setters } ``` 2. 在你的控制器中,定义一个方法来获取要导出的数据。在这个例子中,我们将获取所有的Person实体。 ```java @GetMapping("/export") public void exportToExcel(HttpServletResponse response) throws IOException { List<Person> persons = personRepository.findAll(); // call the method to export the data to excel export(persons, response); } ``` 3. 创建一个名为“export”的方法,该方法将Person实体列表作为参数传入,并将数据导出Excel文件中。 ```java private void export(List<Person> persons, HttpServletResponse response) throws IOException { // create the workbook and sheet Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Persons"); // create the header row Row header = sheet.createRow(0); header.createCell(0).setCellValue("ID"); header.createCell(1).setCellValue("Name"); header.createCell(2).setCellValue("Age"); header.createCell(3).setCellValue("Email"); // create the data rows int rowNum = 1; for (Person person : persons) { Row row = sheet.createRow(rowNum++); row.createCell(0).setCellValue(person.getId()); row.createCell(1).setCellValue(person.getName()); row.createCell(2).setCellValue(person.getAge()); row.createCell(3).setCellValue(person.getEmail()); } // set the response headers response.setHeader("Content-Disposition", "attachment; filename=\"persons.xlsx\""); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); // write the workbook to the response output stream workbook.write(response.getOutputStream()); workbook.close(); } ``` 4. 最后,在你的应用程序中,你需要配置JPA以连接到数据库。在这个例子中,我们将使用Spring Data JPA来完成这个任务。在你的应用程序中添加以下依赖项。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` 然后,配置JPA数据源和实体管理器工厂。在application.properties文件中添加以下配置。 ``` spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update ``` 这将为你的应用程序提供一个JPA数据源,并且自动创建表格。 以上是利用jpa实现数据导出Excel的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值