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

开发 后端
最近研究了一下嵌入式数据库,并使用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表示建立数据库文件的地址和文件名。

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

  1. package sqlitetest; 
  2.  
  3. import java.sql.*; 
  4.  
  5. //import SQLite.*; 
  6.  
  7. import org.sqlite.JDBC; 
  8.  
  9. public class TestConn { 
  10.  
  11.     void test(){ 
  12.  
  13.         Connection conn = null
  14.  
  15.         Statement stmt = null
  16.  
  17.         ResultSet rset = null
  18.  
  19.         System.out.println(new java.util.Date()); 
  20.  
  21.         try {  Class.forName("org.sqlite.JDBC"); 
  22.  
  23.         conn = DriverManager.getConnection( "jdbc:sqlite:/d:/test.db"); 
  24.  
  25.         conn.setAutoCommit(false); 
  26.  
  27.         stmt = conn.createStatement(); 
  28.  
  29.         stmt.executeUpdate("create table hehe(id number, name varchar(32))"); 
  30.  
  31.         System.out.println("建表hehe成功!"); 
  32.  
  33.         for (int i=0; i<10000; i++) { 
  34.  
  35.             System.out.print("插入条目i/n"); 
  36.  
  37.             System.out.println(stmt.executeUpdate("INSERT INTO hehe VALUES(" + i + ", '我爱中国" + i + "')")); 
  38.  
  39.         } 
  40.  
  41.         conn.commit(); 
  42.  
  43.  
  44.  
  45.  
  46.  
  47.         System.out.println("不建索引查询:"); 
  48.  
  49.         System.out.println(new java.util.Date()); 
  50.  
  51.         rset = stmt.executeQuery("SELECT id, name FROM hehe where id>5"); 
  52.  
  53.         while (rset.next()){ 
  54.  
  55.             System.out.println(rset.getInt("id")); 
  56.  
  57.             System.out.println(rset.getString("name")); 
  58.  
  59.         } 
  60.  
  61.         if (rset!=null){ 
  62.  
  63.             rset.close(); rset = null
  64.  
  65.         } 
  66.  
  67.         System.out.println(new java.util.Date()); 
  68.  
  69.         System.out.println("建索引:"); 
  70.  
  71.         System.out.println(new java.util.Date()); 
  72.  
  73.         stmt.executeUpdate("CREATE INDEX hehe_idx on hehe(id)"); 
  74.  
  75.         stmt.executeUpdate("CREATE INDEX hehe_idx2 on hehe(name)"); 
  76.  
  77.         conn.commit(); 
  78.  
  79.         System.out.println(new java.util.Date()); 
  80.  
  81.         System.out.println("建索引后的查询:"); 
  82.  
  83.         System.out.println(new java.util.Date()); 
  84.  
  85.         rset = stmt.executeQuery("SELECT id, name FROM hehe where id > 5 "); 
  86.  
  87.         while (rset.next()){ 
  88.  
  89.             System.out.println(rset.getInt("id")); 
  90.  
  91.             System.out.println(rset.getString("name")); 
  92.  
  93.         } 
  94.  
  95.         System.out.println(new java.util.Date()); 
  96.  
  97.         stmt.executeUpdate("drop table hehe"); 
  98.  
  99.         System.out.println("删除表hehe成功!"); 
  100.  
  101.         conn.commit(); 
  102.  
  103.         System.out.println(new java.util.Date()); 
  104.  
  105.         } catch(ClassNotFoundException cnfe) 
  106.  
  107.         { 
  108.  
  109.             System.out.println("Can´t find class for driver: " + cnfe.getMessage()); 
  110.  
  111.             System.exit(-1); 
  112.  
  113.         } catch (SQLException e){ 
  114.  
  115.             System.out.println("SQLException :" + e.getMessage()); 
  116.  
  117.             System.exit(-1); } 
  118.  
  119.         finally { 
  120.  
  121.             try { 
  122.  
  123.                 if (rset!=null) rset.close(); 
  124.  
  125.                 stmt.close(); 
  126.  
  127.                 conn.close(); 
  128.  
  129.             } catch (SQLException e) { System.out.println("SQLException in finally :" + e.getMessage()); 
  130.  
  131.             System.exit(-1);} } } 
  132.  
  133.  
  134. public static void main(String[] args) { 
  135.  
  136.     TestConn conn = new TestConn(); 
  137.  
  138.     conn.test(); 
  139.  
  140.     System.out.print("Success!!"); 
  141.  
  142.  

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

原文链接:http://www.kankanews.com/ICkengine/archives/38027.shtml

责任编辑:陈四芳 来源: kankanews.com
相关推荐

2010-02-24 16:02:45

PerstSilverlight

2013-04-09 16:47:19

iOS嵌入式数据库SQLit

2011-03-11 11:19:05

嵌入式数据库

2011-03-07 09:57:24

Perst嵌入式数据库

2010-07-05 13:36:21

SQL Server

2010-03-23 09:08:05

2009-01-18 15:36:04

2013-09-22 10:39:00

MeayunDB

2011-07-08 10:45:19

SqlceSqlCeConnec

2011-06-15 10:18:12

Windows PhoPerst

2020-05-13 09:06:34

Java 数据库开发

2009-11-19 09:35:36

eXtremeDB嵌入式实时数据库McObject

2009-06-11 16:34:19

2024-03-05 18:40:15

LiteDB数据库NoSQL

2011-04-19 13:26:47

DB(BDB)SQLite

2010-03-19 13:05:11

Perst Lite

2020-09-18 09:15:22

数据库Sqlite3进阶

2024-08-08 15:03:00

2021-08-31 11:06:28

嵌入式数据库MySQL

2020-09-17 09:40:20

数据库Sqlite3命令
点赞
收藏

51CTO技术栈公众号