用java连接Excel和SQLite3数据库

java与Excel的连接用到了jxl.jar开源包,与SQLite3的连接用到了sqlitejdbc-v056.jar这个开源包,两个开源包打包下载:传送门

如果使用的eclipse做开发,解压后按下所示导入两个开源包即可:

对着工程右击>Build Path>Add External Archives,然后选择这两个开源包引入即可。

------------

1,java与Excel的连接:

(jxl.jar开源包的源码,以及使用API下载:传送门 )

java与Excel的连接,只需引入jxl的相关包(见最下方源码),即可实现与Excel文件的连接;

String s = "" ;
File file = new File("D:\\hello\\1.xls);

//创建一个工作簿对象wb,该对象的引用指向某个待读取的Excel文件
WorkBook wb = Workbook.getWorkbook(file);
//创建一个工作簿wb中的工作表对象(0代表第一张工作表,工作簿、工作表的关系,就好比一个记账本和账本上某页记账表的关系)
Sheet sheet = wb.getSheet(0);
//得到当前工作表中所有非空行的数目;    
int stRows = sheet.getRows();  
for(int i=0;i<stRows;i++){
   //创建一个单元格对象,来存放从sheet的(第j列,第i行)读取的单元格;
  Cell cell = sheet.getCell(j, i); 
  //单元格.getContents()方法,会从当前单元格对象中获得一个已经转换为字符串类型的字符串,如需获得原型(如整形数据),可自查API中相关方法;
   s += cell.getContents();
}//for()

使用完后,使用wb.close()的方法关闭文件流即可。

------------

2,java与SQLite3的连接:

java与SQLite3的连接,以及写入数据,需要如下的准备工作:

1,通过Class.forName()方法,载入需要连接数据库的类

//如果想要了解下面这个方法的意义,可看百度来的这篇文章:http://goo.gl/OpXUG
Class cl = Class.forName("org.sqlite.JDBC") ; 

 2,之后与数据库建立连接,代码如下:

//通过JDBC:Sqlite与D:\\123目录下的AllClasses.db文件(SQLite3的数据库文件)建立连接;
Connect conn = DriverManager.getConnection("jdbc:sqlite:d:/123/AllClasses.db");
Statement stm =conn.createStatement();
           
//下面这句sql语句的意思是:如果数据库中没有"OtherClasses"这张表,则创建之;
//加上自加的KC_ID,一列共九个数据;
stm.executeUpdate("create table if not exists OtherClasses(" +
   "KC_ID integer primary key autoincrement," +
   "KC_NAME vachar(15) ," + "KC_TEACHER vachar(5) ," +  
   "KC_CLASSES vachar(10) ," + "KC_ROOM vachar(6) ," +  
   "KC_ENDTIME vachar(5) ," + "KC_YUANXI vachar(4) ," +     
   "KC_POSITION vachar(3) ," + "KC_MARK vachar(3) );");    
           
/**PreparedStatement 类,通俗来讲,就像文件流的BufferedReader一样,只不过它是用来存放Sql语句的缓冲内容(如有精力,可参考java API)
   1,PreparedStatement prs = conn.prepareStatement("insert into OtherClasses values (?,?,?,?,?,?,?,?,?);") 这句话用来预定义你即将插入的一列数据规范,如上那个方法,就是说我准备每次暂存9个待插入的数据(9个问号);
   2,prs 的setString()用来设置Sql语句的内容,一组共九个参数,setString(2,"nihao")就是说,设置本行待插入的第二个数据为“nihao"(从2开始,共9个数据,为什么不是从1开始?因为1是”KC_ID integer primary key autoincrement“,它会根据本行数据添加情况自增,无需赋值);
  3,一组九个数据设定完成后,通过prs.addBatch()方法,将这次的批处理命令添加到prs中去,
  4,通过 conn.setAutoCommit(false); prs.executeBatch(); conn.setAutoCommit(true);这三个方法,便可以将缓存于prs中的一批sql执行命令,真正执行,并将之前一组九个数据,插入到数据库文件中去.
*/
  PreparedStatement prs = conn.prepareStatement("insert into OtherClasses values (?,?,?,?,?,?,?,?,?);");
  //下面这段代码,便可以插入一列数据;
  //为什么从2开始?因为第一个数据是自增型计数器,详见上面第2条解释;
  for( int i = 2; i<9; i++ ) {
    prs.setString( i, "本次数据" + i ) ;
  }
   prs.addBatch();
   conn.setAutoCommit(false);
   prs.executeBatch();
  conn.setAutoCommit(true);

上面一段代码执行后,效果如下图:

(想要这款图形界面的SQLite3数据库浏览器的朋友,可以到此下载:传送门):

------------

3,java如何缓存数据实现excel与sqlite的连接?

我使用了ArrayList来缓存数据。

每一行的数据,存入一个新new出来的ArrayList<String>中;

当读取完该行的所有数据后,将ArrayList<String>存入一个已经new好的 ArrayList<ArrayList<String>> 当中,直到数据表所有数据被读取出来。

具体操作,可参考下方提供的源码中的内容(只需查看ReadDataFromExcel() 和 WriteDataToSQLite() 这两个方法即可)。

------------

程序源码说明:

源码内容经过自己精心整理,注释也很详细,是尽量做到每个小模块都附上一段注释,所以想要学习的就快快下载吧!

本程序源码下载:传送门

还是第一次写编程技术分享类的博文,如有不到之处,还望见谅指正。

如有问题,可在下方留言,或者跟我在微博上交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值