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);
WorkBook wb = Workbook.getWorkbook(file); //创建一个工作簿对象wb,该对象的引用指向某个待读取的Excel文件 Sheet sheet = wb.getSheet(0); // 创建一个工作簿wb中的工作表对象(0代表第一张工作表,工作簿、工作表的关系,就好比一个记账本和账本上某页记账表的关系) int stRows = sheet.getRows(); //得到当前工作表中所有非空行的数目;
for(int i=0;i<stRows;i++){ Cell cell = sheet.getCell(j, i); //创建一个单元格对象,来存放从sheet的(第j列,第i行)读取的单元格; s += cell.getContents(); //单元格.getContents()方法,会从当前单元格对象中获得一个已经转换为字符串类型的字符串,如需获得原型(如整形数据),可自查API中相关方法; }
使用完后,使用wb.close()的方法关闭文件流即可。
------------
2,java与SQLite3的连接:
java与SQLite3的连接,以及写入数据,需要如下的准备工作:
1,通过Class.forName()方法,载入需要连接数据库的类
Class cl = Class.forName("org.sqlite.JDBC") ; //如果想要了解关于这个方法的意义,可看百度来的这篇文章:http://goo.gl/OpXUG
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() 这两个方法即可)。
------------
程序源码说明:
源码内容经过自己精心整理,注释也很详细,是尽量做到每个小模块都附上一段注释,所以想要学习的就快快下载吧!
本程序源码下载:传送门
还是第一次写编程技术分享类的博文,如有不到之处,还望见谅指正。
如有问题,可在下方留言,或者跟我在微博上交流。