1. 环境要求

本文环境为: 数据库为oracle,jdk为jdk7,依赖jar包为ojdbc6-11.2.0.4.0.jar+poi-3.14.jar

2.POI 使用

1. 建立工作空间
2. 获取sheet
3. 使用row
4. 使用cell

3. 代码部分一

3.1 使用方法导出,代码如下

private static void test1() {
Connection con=null;
PreparedStatement preStatement=null;
ResultSet result=null;
try{
/**
* 数据库连接
*/
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("开始尝试连接数据库!");
String url = "jdbc:oracle:" + "thin:@127.0.0.1:1521:localOracle";
String user = "hsm";
String password = "1994713";
con = DriverManager.getConnection(url, user, password);
System.out.println("连接成功!开始查询数据");
/**
* 执行sql语句,将结果保存在result中
*/
String sql = "select dict_type,dict_value,dict_desc from frp_dict ";
preStatement = con.prepareStatement(sql);
result = preStatement.executeQuery();
/**
* 创建excel头
*/
List<String> headers=new ArrayList<String>();
headers.add("dict_type");
headers.add("dict_value");
headers.add("dict_desc"); //创建新工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//新建工作表
HSSFSheet sheet = workbook.createSheet("frp_dict");
//创建行,行号作为参数传递给createRow()方法,第一行从0开始计算
HSSFRow row = sheet.createRow(0);
for(int i=0;i<headers.size();i++){
HSSFCell cell=row.createCell(i);
cell.setCellValue(headers.get(i));
}
int rowTemp=1;
while(result.next()){
row = sheet.createRow(rowTemp);
for(int i=0;i<headers.size();i++){
HSSFCell cell=row.createCell(i);
cell.setCellValue(result.getString(headers.get(i)));
}
rowTemp++;
}
FileOutputStream fos = new FileOutputStream(new File("C:\\Users\\hsm\\Desktop\\exportTest.xls"));
workbook.write(fos);
workbook.close();
fos.close();
}catch (Exception e){
e.printStackTrace();
}finally{
try{
// 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
// 注意关闭的顺序,最后使用的最先关闭
if (result != null)
result.close();
if (preStatement != null)
preStatement.close();
if (con != null)
con.close();
System.out.println("数据库连接已关闭!");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

3.2 导出结果展示

4 代码部分二

4.1 调用方法导入,方法如下

private static void test3(){
Connection con=null;
PreparedStatement preStatement=null;
ResultSet result=null;
try{
/**
* 数据库连接
*/
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("开始尝试连接数据库!");
String url = "jdbc:oracle:" + "thin:@127.0.0.1:1521:localOracle";
String user = "hsm";
String password = "1994713";
con = DriverManager.getConnection(url, user, password);
System.out.println("连接成功!开始查询数据");
/**
* 执行sql语句,将结果保存在result中
*/
String sql = ""; FileInputStream fis = new FileInputStream(new File("C:\\Users\\hsm\\Desktop\\exportTest2.xls"));
//创建新工作簿
HSSFWorkbook workbook = new HSSFWorkbook(fis);
//获取第一个sheet
HSSFSheet sheet = workbook.getSheetAt(0);
HSSFRow row=sheet.getRow(0);
StringBuffer columns=new StringBuffer(row.getCell(0).getStringCellValue());
StringBuffer param=new StringBuffer("?");
for(int i=1;i<row.getLastCellNum();i++){
columns.append(",").append(row.getCell(i).getStringCellValue());
param.append(",").append("?");
}
System.out.println(columns.toString());
sql="insert into frp_dict_test ("+columns+") values ("+param+")";
preStatement = con.prepareStatement(sql); for(int i=1;i<sheet.getLastRowNum();i++){
row=sheet.getRow(i);
for(int j=0;j<row.getLastCellNum();j++){
preStatement.setString(j+1, row.getCell(j).getStringCellValue());
}
preStatement.addBatch();;
if(i%100==0){
preStatement.executeBatch();
}
}
preStatement.executeBatch();
con.commit();
fis.close();
workbook.close();
}catch (Exception e){
e.printStackTrace();
}finally{
try{
// 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
// 注意关闭的顺序,最后使用的最先关闭
if (result != null)
result.close();
if (preStatement != null)
preStatement.close();
if (con != null)
con.close();
System.out.println("数据库连接已关闭!");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

4.2 导入结果显示

5.代码优化,形成工具类

5.1源代码

package com.hsm.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
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; /**
* @author hsm
* excel相关的操作
*/
public class ExcelUtil {
private String driverType=null;
private String url=null;
private String userName=null;
private String password=null;
private ExcelUtil(){ }
/**
* 获取excel的实例
* @param driverType数据库类型
* @param url 数据库地址
* @param userName 用户名
* @param password 密码
* @return 当前实例
*/
public static ExcelUtil getInstance(String driverType,String url,String userName,String password){
ExcelUtil excelUtil=new ExcelUtil();
excelUtil.driverType=driverType;
excelUtil.url=url;
excelUtil.userName=userName;
excelUtil.password=password;
return excelUtil;
}
/**
* 下载excel<br/>
* 从数据库中导出相应表相关的字段的excel表格
* @param param 表格头部内容
* @param tableName 表名
* @param file 文件位置及文件名
*/
public void downloadSqlPara(List<String> param,String tableName,String file){
Connection con=null;
PreparedStatement preStatement=null;
ResultSet result=null;
try{
/**
* 数据库连接
*/
Class.forName(this.driverType);
System.out.println("================开始尝试连接数据库!===================");
String url = this.url;
String user = this.userName;
String password = this.password;
con = DriverManager.getConnection(url, user, password);
System.out.println("=================连接成功!开始查询数据================");
/**
* 执行sql语句,将结果保存在result中
*/
StringBuffer buffer=new StringBuffer(param.get(0));
for(int i=1;i<param.size();i++){
buffer.append(",").append(param.get(i));
}
String sql = "select "+buffer+" from "+tableName;
preStatement = con.prepareStatement(sql);
result = preStatement.executeQuery();
/**
* 创建excel工作区
*/
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(tableName);
HSSFRow row = sheet.createRow(0);
for(int i=0;i<param.size();i++){
HSSFCell cell=row.createCell(i);
cell.setCellValue(param.get(i));
}
int rowTemp=1;
System.out.println("================开始写入文件!===================");
while(result.next()){
row = sheet.createRow(rowTemp);
for(int i=0;i<param.size();i++){
HSSFCell cell=row.createCell(i);
cell.setCellValue(result.getString(param.get(i)));
}
rowTemp++;
}
System.out.println("================文件写入结束!===================");
FileOutputStream fos = new FileOutputStream(new File(file));
workbook.write(fos);
workbook.close();
fos.close();
}catch (Exception e){
e.printStackTrace();
}finally{
try{
// 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
// 注意关闭的顺序,最后使用的最先关闭
if (result != null)
result.close();
if (preStatement != null)
preStatement.close();
if (con != null)
con.close();
System.out.println("数据库连接已关闭!");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
/**
* 导入excel表格内容
* @param headers
* @param tableName
* @param file
*/
public void importSqlExcel(List<String> headers,String tableName,String file){
Connection con=null;
PreparedStatement preStatement=null;
ResultSet result=null;
try{
/**
* 数据库连接
*/
Class.forName(this.driverType);
System.out.println("开始尝试连接数据库!");
String url = this.url;
String user = this.userName;
String password = this.password;
con = DriverManager.getConnection(url, user, password);
System.out.println("连接成功!开始查询数据");
/**
* 打开文件
*/
FileInputStream fis = new FileInputStream(new File(file));
/**
* 创建excel工作区
*/
//创建新工作簿
HSSFWorkbook workbook = new HSSFWorkbook(fis);
HSSFSheet sheet = workbook.getSheetAt(0);
HSSFRow row=sheet.getRow(0);
/**
* 获取excel传入的字段,并对sql进行初始化
*/
StringBuffer columns=new StringBuffer(row.getCell(0).getStringCellValue());
StringBuffer param=new StringBuffer("?");
for(int i=1;i<row.getLastCellNum();i++){
columns.append(",").append(row.getCell(i).getStringCellValue());
param.append(",").append("?");
}
String sql = "";
sql="insert into "+tableName+" ("+columns+") values ("+param+")";
preStatement = con.prepareStatement(sql);
/**
* 遍历sheet中的内容,将内容批量插入数据库中
*/
for(int i=1;i<sheet.getLastRowNum();i++){
row=sheet.getRow(i);
for(int j=0;j<row.getLastCellNum();j++){
preStatement.setString(j+1, row.getCell(j).getStringCellValue());
}
preStatement.addBatch();;
if(i%100==0){
preStatement.executeBatch();
}
}
preStatement.executeBatch();
con.commit();
fis.close();
workbook.close();
}catch (Exception e){
e.printStackTrace();
}finally{
try{
// 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
// 注意关闭的顺序,最后使用的最先关闭
if (result != null)
result.close();
if (preStatement != null)
preStatement.close();
if (con != null)
con.close();
System.out.println("数据库连接已关闭!");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}

5.2优化代码测试

package com.hsm.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
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; import com.hsm.util.ExcelUtil; public class TestMain {
public static void main(String[] args) {
test4();
}
private static void test4(){
/**
* 数据库相关内容
*/
String driverType="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@127.0.0.1:1521:localOracle";
String userName="hsm";
String password="1994713";
ExcelUtil excelUtil=ExcelUtil.getInstance(driverType, url, userName, password);
/**
* excel导入
*/
List<String>param=new ArrayList<String>();
param.add("dict_type");
param.add("dict_value");
param.add("dict_desc");
String file="C:\\Users\\hsm\\Desktop\\exportTest2.xls";
excelUtil.importSqlExcel(param, "frp_dict_test", file);
}
private static void test2(){
/**
* 数据库相关内容
*/
String driverType="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@127.0.0.1:1521:localOracle";
String userName="hsm";
String password="1994713";
ExcelUtil excelUtil=ExcelUtil.getInstance(driverType, url, userName, password);
/**
* excel下载
*/
List<String>param=new ArrayList<String>();
param.add("dict_type");
param.add("dict_value");
param.add("dict_desc");
String file="C:\\Users\\hsm\\Desktop\\exportTest2.xls";
excelUtil.downloadSqlPara(param, "frp_dict", file);
}
}

java实现excel和数据的交互的更多相关文章

  1. JAVA处理Excel表格数据并写入数据库

    package com.hncj.test; import java.io.FileInputStream; import java.sql.Connection; import java.sql.D ...

  2. java导出excel模板数据

    Java导出excel数据模板,这里直接贴代码开发,流程性的走下去就是步骤: String[] colName=new String[]{"期间","科目代码" ...

  3. java 导出Excel 大数据量,自己经验总结!(二)

    在上一次的基础上加上了样式,以及中文列名 package com.tommy.fundation.util; import java.io.OutputStream; import java.util ...

  4. java 导出Excel 大数据量,自己经验总结!

    出处: http://lyjilu.iteye.com/ 分析导出实现代码,XLSX支持: /** * 生成<span style="white-space: normal; back ...

  5. JAVA实现Excel导出数据(以写好的Excel模版导出)

    工作中经常会有将后台数据以Excel导出的功能. 简单的方法有将response的contentType设置为application/vnd.ms-excel: 或在JSP页面直接设置成: <% ...

  6. java读取excel获取数据写入到另外一个excel

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  7. java导入Excel表格数据

    首先导入Excel数据需要几样东西 第一需要两个依赖包,这里直接是在pom注入依赖 <!--excel--> <dependency> <groupId>org.a ...

  8. java读取excel文件数据导入mysql数据库

    这是我来公司的第二周的一个小学习任务,下面是实现过程: 1.建立maven工程(方便管理jar包) 在pom.xml导入 jxl,mysql-connector 依赖 可以在maven仓库搜索 2.建 ...

  9. java读取excel文件数据

    package com.smp.server.Ctrl; import java.io.File;import java.io.FileInputStream;import java.io.FileN ...

随机推荐

  1. View.post() 不靠谱的地方你知道吗?

    版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章. 未经允许,不得转载. 一.前言 有时候,我们会需要 ...

  2. 转python爬虫:BeautifulSoup 使用select方法详解

    1 html = """ 2 <html><head><title>The Dormouse's story</title> ...

  3. 在Linux 环境下搭建 JDK 和 Tomcat

      在Linux 环境下搭建 JDK 和 Tomcat 参考地址:http://www.cnblogs.com/liulinghua90/p/4661424.html   [JDK安装] 1.首先下载 ...

  4. python专题-爬虫功能

    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片鼠标右键的 ...

  5. [2017-07-18]logstash配置示例

    提醒 /etc/logstash/conf.d/下虽然可以有多个conf文件,但是Logstash执行时,实际上只有一个pipeline,它会将/etc/logstash/conf.d/下的所有con ...

  6. 【译】怎样处理 Safari 移动端对图片资源的限制

    原文作者:Thijs van der Vossen 本文翻译自<How to work around the Mobile Safari image resource limit>,原文写 ...

  7. Mysql介绍和实践总结

    本文首先介绍mysql的安装和基本使用.进阶操作.讲解mysql的导入导出和自动备份,然后介绍安全模式修改密码和mysql的全文本搜索功能,最后记录了个人使用mysql中遇到的问题集. 开始安装: s ...

  8. [置顶] Chat Room:基于JAVA Socket的聊天室设计

    d0304 更新功能实现 d0312 更新部分图片&UI设计部分 d0318 更新功能实现 d1222 实现添加好友功能.实现注册功能.修改大量BUG github:https://githu ...

  9. 【★】RSA-什么是不对称加密算法?

    不对称加密算法RSA浅析 本文主要介绍不对称加密算法中最精炼的RSA算法.我们先说结论,也就是RSA算法怎么算,然后再讲为什么. 随便选取两个不同的大素数p和q,N=p*q,r=(p-1)*(q-1) ...

  10. 团队作业9——测试与发布(Beta版本)

    Beta版本测试报告 一bug汇总 计时没有显示即倒计时,难度不同的功能没有实现(已修复) 没有导入试卷和错题功能(不打算修复) 前台管理功能(部分修复) 界面美观问题(没有修复也不打算修复) 二.场 ...