java直接访问excel的demo

简介: 今天一个哥们问,用jdbc能不能把excel作为数据源访问? 考虑之前写的一个java访问access的例子,稍加修改,测试可以用。 测试例子,新建一个excel,命名为Mobile.

今天一个哥们问,用jdbc能不能把excel作为数据源访问?

考虑之前写的一个java访问access的例子,稍加修改,测试可以用。

测试例子,新建一个excel,命名为Mobile.xls,在Sheet1里写入如下两行:

手机号

13900000001.0

 

java代码如下:

 

import java.sql.*;

public class javaExcel{

 public static void main(String args[]) throws Exception{

  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

  String dburl ="jdbc:odbc:driver={Microsoft Excel Driver (*.xls)};DBQ=Mobile.xls";//此为NO-DSN方式

  //String dburl ="jdbc:odbc:odbcName";//此为ODBC连接方式

  Connection conn=DriverManager.getConnection(dburl);

  Statement stmt=conn.createStatement();

  ResultSet rs=stmt.executeQuery("select Top 20 * from [Sheet1$]");

  while(rs.next()){

   System.out.println(rs.getString(1));

  }

  rs.close();

  stmt.close();

  conn.close();

 }

}

运行以上代码,显示:

13900000001.0

 

 

没有读到第一行,考虑到程序是否默认第一行为列名了呢?试一下用metadata是否可以拿到。如下修改代码:

 

import java.sql.*;

public class javaExcel{

 public static void main(String args[]) throws Exception{

  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

  String dburl ="jdbc:odbc:driver={Microsoft Excel Driver (*.xls)};DBQ=Mobile.xls";//此为NO-DSN方式

  //String dburl ="jdbc:odbc:odbcName";//此为ODBC连接方式

  Connection conn=DriverManager.getConnection(dburl);

  PreparedStatement stmt=conn.prepareStatement("select Top 20 * from [Sheet1$]");

  ResultSet rs=stmt.executeQuery();

  ResultSetMetaData rsmd=stmt.getMetaData();

  System.out.println(rsmd.getColumnName(1));

  while(rs.next()){

   System.out.println(rs.getString(1));

  }

  rs.close();

  stmt.close();

  conn.close();

 }

}

运行以上代码,显示:

 

 

手机号

13900000001.0

 

 

看来猜测没错。

 

此方法使用excel,只在windows并安装excel的机器上测试过,没有测试其他环境。

此方法的限制,对数据类型受制于excel,细心点可以看到手机号后面多了一个.0,变成了数字型;所以访问excel还是建议使用jxls或jexcelapi等api来操作,这样可以访问类型更丰富的、布局更复杂的excel。

jxls:

http://jxls.sourceforge.net

jexcelapi:

http://jexcelapi.sourceforge.net/

目录
相关文章
|
3天前
|
存储 Java
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
18 2
|
7天前
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
28 6
|
7天前
|
NoSQL JavaScript Java
Java Python访问MongoDB
Java Python访问MongoDB
14 4
|
1月前
|
Java
【Java基础面试三】、说一说你对Java访问权限的了解
这篇文章介绍了Java中的四种访问权限:private、default(无修饰符时的访问权限)、protected和public,以及它们分别在修饰成员变量/方法和类时的不同访问级别和规则。
【Java基础面试三】、说一说你对Java访问权限的了解
|
23天前
|
算法 Java 测试技术
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
|
27天前
|
Java 开发工具
【Azure Developer】Java代码访问Key Vault Secret时候的认证问题,使用 DefaultAzureCredentialBuilder 或者 ClientSecretCredentialBuilder
【Azure Developer】Java代码访问Key Vault Secret时候的认证问题,使用 DefaultAzureCredentialBuilder 或者 ClientSecretCredentialBuilder
|
28天前
|
存储 Java Apache
|
7天前
|
JavaScript 前端开发 Java
通过JUnit5访问Java静态、私有、保护变量和方法
在《通过Gtest访问C++静态、私有、保护变量和方法》一文中介绍了如何通过Gtest访问C++静态、私有、保护变量和方法,本文介绍如何通过Junit5访问Java静态、私有、保护变量和方法。
13 0
|
1月前
|
easyexcel Java 关系型数据库
阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
该文章主要介绍了在Java应用中如何使用EasyExcel技术完成对Excel文件的导入和导出操作,包括环境搭建、基本概念、快速入门、进阶操作和综合应用等内容,并提供了相关代码示例和注意事项。
 阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
|
1月前
|
SQL Java Apache
实时计算 Flink版操作报错合集之使用parquet时,怎么解决报错:无法访问到java.uti.Arrays$ArrayList类的私有字段
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。