Java与嵌入式数据库SQLite的结合

      最近研究了一下嵌入式数据库,并使用Java与一个叫做SQLite的轻量级数据库结合写了个小程序,这个过程中也获得了不少经验,下面来总结一下。

      本来是决定用Flex写的,因为它做出的界面比较美观,但是写完了界面发现连接数据库这方面Flex还处于幼儿阶段,而且支持的数据库也不多....所以不得不放弃而转向Java了。

      首先解释下为什么用嵌入式数据库,一是程序比较小,数据也不多,二是对于用户比较麻烦,安装一个小程序还要安装一个数据库软件。。。其次就是感觉有点大材小用了。

      原来也写了不少数据库变成的小程序,但有的细节还是没去研究,就像preparedStatement的executeUpdate()方法是返回一个整型数,当返回大于0的数,表示更新了 返回值的这么多条记录,而返回0时则有两种情况:

(1)  所执行的SQL语句是对数据库管理系统的记录进行操作;并且没有记录被更新

(2)  所执行的SQL语句是对数据库管理系统的表、视图等对象进行操作的DDL语言,没有数据记录被直接修改。

下面介绍一下SQLite:

      SQLite 是一款轻量级的、基于文件的嵌入式数据库,2000年就已经诞生,经过7年多的发展,直到今天已经成为最流行的嵌入式数据库,包括google在内的公司在其桌面软件中亦使用 SQLite 存储用户数据。由此可以看出,已经没有任何理由去怀疑SQLite的稳定性了。

SQLite的优势在哪呢?

1. 免配置,和access一样,只要把数据库文件通过ftp上传到服务器上就可以使用,不需要服务器的额外支持

2. 备份方便,因为只是一个文件,只要复制一份该文件,就能备份整个数据库

3. 虽然是轻量级数据库,但他支持最大 2tb 的单个库文件。

4. 快,无与伦比的快。经过实际测试,在几百万记录的情况下,SQLite的插入和查询速度和 mysql 不分上下,快于 sql server,10倍于 access (但这并不意味着它可以替代 sql server )

      这个程序使用SQLite作为数据库,嵌入在程中,但是在使用之前要下载它的驱动sqlitejdbc-v054.jar。

然后将这个包导入你的工程,然后导入org.sqlite.JDBC包即可,驱动程序名也是org.sqlite.JDBC,驱动程序地址:jdbc:sqlite:/d:/test.db。其中/d:/test.db表示建立数据库文件的地址和文件名。

最后给出一个测试程序,简单易懂:

1package sqlitetest; 2import java.sql.*; 3//import SQLite.*; 4import org.sqlite.JDBC; 5public class TestConn { 6 void test(){ 7 Connection conn = null; 8 Statement stmt = null; 9 ResultSet rset = null; 10 System.out.println(new java.util.Date()); 11 try { Class.forName("org.sqlite.JDBC"); 12 conn = DriverManager.getConnection( "jdbc:sqlite:/d:/test.db"); 13 conn.setAutoCommit(false); 14 stmt = conn.createStatement(); 15 stmt.executeUpdate("create table hehe(id number, name varchar(32))"); 16 System.out.println("建表hehe成功!"); 17 for (int i=0; i<10000; i++) { 18 System.out.print("插入条目i/n"); 19 System.out.println(stmt.executeUpdate("INSERT INTO hehe VALUES(" + i + ", '我爱中国" + i + "')")); 20 } 21 conn.commit(); 22 23 24 System.out.println("不建索引查询:"); 25 System.out.println(new java.util.Date()); 26 rset = stmt.executeQuery("SELECT id, name FROM hehe where id>5"); 27 while (rset.next()){ 28 System.out.println(rset.getInt("id")); 29 System.out.println(rset.getString("name")); 30 } 31 if (rset!=null){ 32 rset.close(); rset = null; 33 } 34 System.out.println(new java.util.Date()); 35 36 37 38 39 System.out.println("建索引:"); 40 System.out.println(new java.util.Date()); 41 stmt.executeUpdate("CREATE INDEX hehe_idx on hehe(id)"); 42 stmt.executeUpdate("CREATE INDEX hehe_idx2 on hehe(name)"); 43 conn.commit(); 44 System.out.println(new java.util.Date()); 45 System.out.println("建索引后的查询:"); 46 System.out.println(new java.util.Date()); 47 rset = stmt.executeQuery("SELECT id, name FROM hehe where id > 5 "); 48 while (rset.next()){ 49 System.out.println(rset.getInt("id")); 50 System.out.println(rset.getString("name")); 51 } 52 System.out.println(new java.util.Date()); 53 stmt.executeUpdate("drop table hehe"); 54 System.out.println("删除表hehe成功!"); 55 conn.commit(); 56 System.out.println(new java.util.Date()); 57 } catch(ClassNotFoundException cnfe) 58 { 59 System.out.println("Can´t find class for driver: " + cnfe.getMessage()); 60 System.exit(-1); 61 } catch (SQLException e){ 62 System.out.println("SQLException :" + e.getMessage()); 63 System.exit(-1); } 64 finally { 65 try { 66 if (rset!=null) rset.close(); 67 stmt.close(); 68 conn.close(); 69 } catch (SQLException e) { System.out.println("SQLException in finally :" + e.getMessage()); 70 System.exit(-1);} } } 71 72public static void main(String[] args) { 73 TestConn conn = new TestConn(); 74 conn.test(); 75 System.out.print("Success!!"); 76} 77}

好了,谢谢大家赏脸,睡觉时间到!!

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )