java直接访问excel的demo

今天一个哥们问,用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/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值