用java连接Excel和SQLite3,实现从excel文件读取数据并将其存入SQLite3数据库中

时间:2021-09-17 22:58:07

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数据库浏览器的朋友,可以到此下载:传送门):

用java连接Excel和SQLite3,实现从excel文件读取数据并将其存入SQLite3数据库中

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

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

我使用了ArrayList来缓存数据。

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

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

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

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

程序源码说明:

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

本程序源码下载:传送门

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

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