使用java读写excel的方法不胜枚举,这里介绍的把excel文件当作一个数据库来对待并使用jdbc连接去读写它。还是那句话,存在就是合理的。每种读写excel的方法都有其优点和缺点,都有它所侧重的地方,都有适合它的应用场景。多掌握一种方法可能就意味着多一种选择,可能恰恰有的场景下这种解决方法就是最优的。当然勤于发现,善于发现就能看到更多的好处。jdbc早已经成为一种标准,正是因为它是一种标准,所以你如果掌握了这种标准就意味着你可以用最小的学习成本去学习这一类的东西。比如你只会写sql或者擅长写sql,那么使用sql处理问题就可能事半功倍了。毕竟使用自己不擅长的东西多少有些不适感。在windows下使用sql读写excel仍然存在一些限制,比如说程序最好是32位的,而且对sql语法的支持是相对较弱的。

1)、以jdk1.8 32位为例 以下代码实现了对excel文件(.xlsx)的查询、插入、修改等操作

package com.lbz;import sun.jdbc.odbc.JdbcOdbcDatabaseMetaData;import java.lang.reflect.Field;
import java.sql.*;
import java.util.*;public class Excel{private Connection connection;public Excel(){try {Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//注意32系统与64位系统,此处只能用32位系统String path = System.getProperty("excelfilepath");boolean useXlsOnly = false;String url = "jdbc:odbc:driver={Microsoft Excel Driver (*.xls)};READONLY=false;DBQ="+path;;if(!useXlsOnly){url = "jdbc:odbc:Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};READONLY=false;DBQ="+path;}Properties prop = new Properties();prop.put("charSet","gbk");prop.put("user","");prop.put("password","");Connection con = null;try {con = DriverManager.getConnection(url, prop);//没有用户名和密码的时候直接为空JdbcOdbcDatabaseMetaData meta = (JdbcOdbcDatabaseMetaData) con.getMetaData();ResultSet resultSet = meta.getTables(null,null,null,null);ResultSetMetaData resultSetMetaData = resultSet.getMetaData();List<String> tables = new ArrayList<String>();while(resultSet.next()){String tableName = resultSet.getString(3);tables.add(tableName);}System.out.println(tables);//System.out.println(meta.getStringFunctions());//System.out.println(meta.getNumericFunctions());//System.out.println(meta.getTimeDateFunctions());}catch (Exception exc){exc.printStackTrace();}this.connection = con;}catch(Exception e) {e.printStackTrace();}}public Excel insert(String sql) {Statement statement = null;try {statement = this.connection.createStatement();statement.executeUpdate(sql);statement.close();} catch (SQLException e) {e.printStackTrace();}return this;}public Excel update(String sql) {Statement statement = null;try {statement = this.connection.createStatement();statement.executeUpdate(sql);statement.close();} catch (SQLException e) {e.printStackTrace();}return this;}public <T> List<T> select(String sql,Class c) {Statement statement = null;List<T> list = new ArrayList<T>();try {statement = this.connection.createStatement();ResultSet result = statement.executeQuery(sql);Field[] flds = c.getDeclaredFields();while (result.next()) {T t = (T)c.newInstance();for(Field f : flds){if("id".equals(f.getName())){continue;}f.setAccessible(true);f.set(t,result.getString(f.getName()));}list.add(t);}statement.close();} catch (SQLException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();}return list;}public Excel ddl(String sql){Statement statement = null;try {statement = this.connection.createStatement();statement.executeUpdate(sql);statement.close();} catch (SQLException e) {e.printStackTrace();}return this;}public List<Map> selectMap(String sql) {Statement statement = null;List<Map> list = new ArrayList<>();try {statement = this.connection.createStatement();ResultSet result = statement.executeQuery(sql);ResultSetMetaData metaData = result.getMetaData();List<String> colList= new ArrayList<>();for(int i=0;i<metaData.getColumnCount();i++){String colName = metaData.getColumnName(i + 1);colList.add(colName);}while (result.next()) {Map<String,String> map = new HashMap<>();for(int i = 0;i<colList.size();i++){String colName = colList.get(i);Object v = result.getObject(colName);if(v == null || "null".equals(v)){v = "";}map.put(colName,String.valueOf(v));}list.add(map);}statement.close();} catch (SQLException e) {e.printStackTrace();}return list;}public void releaseConnection(){try{this.connection.close();} catch (SQLException e) {e.printStackTrace();}}public static void main(String[] args){System.setProperty("excelfilepath","E:/git/StoreHouseEnv/lib/test.xlsx");Excel excel = new Excel();List<Map> list = excel.selectMap("select * from [Sheet1$]");System.out.println(list);list = excel.selectMap("select max(len(NAME)) as namelength from [Sheet1$]");System.out.println(list);for(int i=0;i<5;i++){excel.insert("insert into [Sheet1$](ID,NAME) values('222','测试插入')");}excel.update("update [Sheet1$] set name='pingping'");list = excel.selectMap("select max(len(NAME)) as namelength from [Sheet1$]");System.out.println(list);excel.releaseConnection();}
}

2. odbc数据源

很多odbc数据源都是只支持32位的,比如我们常用的oracle数据库,jdbc中我们一般可能用的是"thin"方式连接的,也可以用odbc连接,用odbc连接的话一般找32位的。odbc数据源可以在控制面板中查看。

代码中数据库连接字符串为

jdbc:odbc:Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};READONLY=false;

这里的Excel数据源要结合实际情况 去调整配置,可能需要手动安装。readonly=false表示该excel文件可以被写入,readonly=true表示只读。

office其它的产品比如access数据库的连接字符串基本和excel的相似,修改对应的odbc数据源即可。

3、jdk版本的问题

使用jdk1.7 32位版本的运行上面的代码基本没有什么问题,但是使用jdk1.8 32位的话是需要做一些额外的工作。

找到jdk1.7下的jre\lib\rt.jar 并提取出部分文件夹目录

因为rt.jar本身文件比较大,所有没有全部解压缩,所以上图中使用jar命令解压部分目录

sun\jdbc和sun\security\action

因为jdk1.8是没有这些目录,所以把这些目录提取出来打成一个额外的jar包进行引用。当然不打jar包也可以引用。

使用 jar cvf sunjdbcodbc.jar sun 命令将sun目录打成一个jar包

除了需要引用上述的类之外,还需要将jdk1.7安装目录下的JdbcOdbc.dll拷到jdk1.8的相同结构目录下,当然还可以用别的方式进行加载。

 4.运行结果

windows下使用jdbc读写excel文件相关推荐

  1. c# 中wpfexcel_VS2017下编写C#程序读写Excel文件

    原标题:VS2017下编写C#程序读写Excel文件 前言: 有时候我们需要对Excel文件进行特殊处理,这种情况下写个小程序是很方便的.最近刚开始学C#,正好有同学需要处理个Excel文件,我就写了 ...

  2. R读写Excel文件中数据的方法

    用R语言读写Excel的方法有很多,但每种方法都有让人头疼的地方,比如xlsx包的代码复杂,只支持Excel2007:RODBC不易理解,限制太多,程序不稳定,会出各种怪毛病.另存为csv格式的方法倒 ...

  3. 功能丰富的Perl:用Perl读写Excel文件

    功能丰富的Perl:用Perl读写Excel文件 2001年08月31日 16:00 来源:ChinaUnix文档频道 作者:HonestQiao 编辑:周荣茂 级别: 初级 Teodor Zlata ...

  4. python更新excel内容_[原创]使用 Python 读写 Excel 文件(一)更新

    项目要求 如果说是 Office 办公软件使得 Windows 成为主流的操作系统,那么 Excel 就是使得微软硬起来的法宝! Word 和 PowerPoint 都有不相上下的对手,但 Excel ...

  5. python暴力破解excel_使用 Python 读写 Excel 文件(一)

    项目要求 如果说是 Office 办公软件使得 Windows 成为主流的操作系统,那么 Excel 就是使得微软硬起来的法宝! Word 和 PowerPoint 都有不相上下的对手,但 Excel ...

  6. python处理office文件的第三方库_Python读写Excel文件第三方库汇总,你想要的都在这儿!...

    Python Python开发 Python语言 Python读写Excel文件第三方库汇总,你想要的都在这儿! ---恢复内容开始--- 常见库简介 xlrd xlrd是一个从Excel文件读取数据 ...

  7. python怎么读excelsheet_python3 excle(python怎么读写excel文件)

    python读取已经打开的3个word和excle文件的路径 用 win32com 操控 word和Excel就可以实现 咋样把python写入excle中 # 需安装 xlrd-0.9.2 和 xl ...

  8. python pandas读取excel-Python使用Pandas读写EXCEL文件教程

    欢迎,来自IP地址为:211.103.135.163 的朋友 教程开始之前,我们需要首先了解一下什么是Excel,这有助于理解之后教程中的内容. 什么是Excel Excel  是微软出品的和款办公软 ...

  9. C++读写EXCEL文件方式比较 .

    C++读取Excel的XLS文件的方法有很多,但是也许就是因为方法太多,大家在选择的时候会很疑惑. 由于前两天要做导表工具,比较了常用的方法,总结一下写个短文, 1.OLE的方式 这个大约是最常用的方 ...

最新文章

  1. OpenCV中Mat数据结构使用举例
  2. GigaScience:ASaiM基于Galaxy微生物组分析框架
  3. drozer与adb工具的安装与使用
  4. TensorFlow基于cifar10数据集实现进阶的卷积网络
  5. nodejs异步读取文件与同步读取文件的区别
  6. Linux安装RabbitMQ及问题
  7. 进程之 回收子进程之避免僵尸进程的产生
  8. HDU - 4422 The Little Girl who Picks Mushrooms
  9. matlab简单分析信号调制解调
  10. L1-027 出租 (20 分)—团体程序设计天梯赛
  11. PL/SQL基础入门,史上最全的教程
  12. 关于微信小程序下拉刷新、上拉触底方法的实现
  13. 互联网寒冬,这个技术领域的人才需求却持续爆表
  14. 微信公众号迁移流程和公众号迁移公证书办理步骤
  15. PLC基础——1.自保持回路
  16. 吴式太极拳的特点-和基础要求
  17. ei检索的cpss_国际检索系统收录我校期刊
  18. Java学生学籍管理系统
  19. MacBook m1 芯片快速下载 ndk 和环境配置,防止脱发
  20. 如何备份VMware虚拟磁盘文件并移植到其他虚拟机

热门文章

  1. 飞桨领航团AI达人创造营学习笔记1
  2. SQL入门学习(3)子查询
  3. 完美攻略之雪のとける頃に...雪融化的时候…(雪融化的时刻…)
  4. Java - Naming Conventions
  5. 浙江省高级工程师职称申报业绩条件
  6. 微软 服务器系统 版本号,微软 Win10 版本 1909 Build 18363.959 正式推送
  7. 腾讯通(RTX) 自动关闭 及解决方案
  8. Hibernate-validator(HV)异常
  9. 《追风筝的人》寻找救赎之道
  10. 《山居秋暝》 王维