`
zhaohaolin
  • 浏览: 1011365 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

嵌入式数据库SQLite与Java

阅读更多

SQLite 作为一个开源的嵌入式数据库产品,具有系统开销小,检索效率高的特性,适用于手机、 PDA 、机顶盒设备等电器,并且作为嵌入式数据库在可下载的消费类应用程序中运行的很好。这篇文章介绍嵌入式数据库产品 SQLite 的技术特点,并着重讨论研究与 Java 语言之间的接口,并以实例说明如何使用 JAVA 开发基于 SQLite 的应用程序。

通常我们采用各种数据库产品来实现对数据的存储、检索等功能,例如, Oracle SQL Server MySQL 等 等。这些产品除提供基本的查询,删除,添加等功能外,也提供了很多高级特性,如触发器,存储过程,数据备份恢复,全文检索功能等。但实际上,很多的应用, 仅仅利用到了这些数据库产品的基本特性而已。而且在一些小型应用上,或者某些特殊场合的应用,比如桌面程序,这些数据库产品就明显有一些臃肿。在这些情况 下,嵌入式数据库的优势就特别明显了。

嵌入式数据库无须独立运行的数据库引擎,它是由程序直接调用相应的 API 去实现对数据的存取操作。更直白的讲,嵌入式数据库是一种具备了基本数据库特性的数据文件。嵌入式数据库与其它数据库产品的区别是,前者是程序驱动式 , 而后者是引擎响应式。嵌入式数据库的一个很重要的特点是它们的体积非常小,编译后的产品也不过几十 K 。这不但对桌面程序的数据存储方案是一个很好的选择,也使得它们可以应用到一些移动设备上。同时,很多嵌入式数据库在性能上也优于其它数据库,所以在高性能的应用上也常见嵌入式数据库的身影。

下面介绍的是开放源代码的嵌入式数据库, SQLite 。同时侧重研究如何应用 Java 连接 SQLite 数据库,并开发基于 SQLite 的应用程序。

SQLite D · 理查德 · 希普开发出来的用一个小型 C 库实现的一种强有力的嵌入式关系数据库管理体制。它提供了对 SQL92 的大多数支持 : 支持多表和索引、事务、视图、触发和一系列的用户接口及驱动

SQLite 实现了完备的、可嵌入的、零配置的 SQL 数据库引擎。它的特点包括:

1 、事务处理是原子的、一致的、独立的和持久的( ACID , 即使在系统崩溃和掉电以后。

2 、零配置,即不需要设置和管理。

3 、实现了绝大部分的 SQL92 标准。

4 、一个单独的磁盘文件存储一个完整的数据库。

5 、数据库文件在机器之间可自由共享。

6 、支持数据库文件大小至 2TB

7 、字符串和 BLOG 的大小只受限于可用存储器容量。

8 、代码量小,即小于 30K C 代码行和小于 250K 的代码空间( gcc i486 上)

9 、对于绝大多数普通操作来说,比流行的 C/S 模式的数据库引擎运行速度快。

10 API 简单、易用。

可以看出,基于以上特点, SQLite 非常适合应用于嵌入式移动数据库。 SQLite 的版权允许无任何限制的应用,包括商业性的产品。 SQLite 官方主站上可以下载到编译后的 SQLite 程序。

SQLite 是无数据类型的数据库。虽然在生成表结构的时候,要声明每个域的数据类型,但 SQLite 并不做任何检查。开发人员要靠自己的程序控制输入与读出数据的类型是正确的。这里有一个例外,就是当主键为整型值时,如果要插入一个非整型值时会产生异常。另外,虽然在插入或读出数据的时候是不区分类型的,但在比较的时候,不同数据类型是有区别的。比如:

CREATE TABLE MyTable(a INTEGER, b TEXT);

INSERT INTO MyTable VALUES(0,0);

当执行下面的查询:

SELECT count(*) FROM MyTable WHERE a=='00';

会返回一条记录,因为字段 a 的类型是整型,而数字 00 0 是相等的。而执行下面的查询则不会返

 

回记录:

SELECT count(*) FROM MyTable WHERE b=='00';

因为字段 b 是字符类型,字符 "00" "0" 是不相等的。

SQLite 提供了对 Transaction 的支持。应用 Transaction 即保证了数据的完整性,也会提高运行速度,因为多条语句一起提交给数据库的速度会比一条一条的提交方式更快。

SQLite 库包括一个简单的命令行工具,该工具名称对应 SQLite-3_2_2 版本叫做 sqlite3, 用户使用这个工具可以对一个 SQLite 数据库手工输入和执行 SQL 命令。例如建立一个名叫 wgy SQLite 数据库,并建立一个名叫 user 的表的步骤如下:

Sqlite3 wgy

SQLite version 3.2.1

Enter ".help" for instructions

sqlite> create table user(username varchar(10), password varchar(10));

sqlite> insert into user values('Marry', '111111');

sqlite> insert into tbl1 values('Helen', '222222');

sqlite> select * from user;

Marry|111111

Helen|222222

Sqlite>

用户结束操作只需按 CTRL+C 组合键。注意每条 SQL 命令后要加分号。

用户可能对命令行方式的操作感到不直观,不太容易使用。那么用户可以使用 SQLite Database Browser 软件,这是一个免费的、公用域的、开源的可视化工具,可以用来建立、编辑 SQLite 数据库文件。这就意味着用户可以不必学习复杂的 SQL 命令,而直接使用熟悉的可视化图形界面设计、编辑 SQLite 数据库。用户可从 http://sqlitebrowser.sourceforge.net/ 下载该工具软件。

SQLite 源代码是 C ,而且官方网站上只提供了 C Tcl 语言的接口。为了应用 Java 接口,要采用第三方的接口驱动程序,可在 http://www.ch-werner.de/javasqlite 中找到这个 Java 接口程序。这个接口提供了两种连接 SQLite 的方式:一是直接用 JNI 技术调用 SQLite C 语言接口,这种方式要求开发人员要对 SQLite 本身的 API 也有一定的了解。在第二种方式中,接口程序实现了 Java 标准规范的 JDBC 接口,这样开发人员只要对 JDBC 有了解就可以了。

第三方接口库中的 Java 代码包含 JNI 接口和多个版本的 JDBC 接口程序,可根据你的 JRE 的版本选择相应的 JDBC 程序。 Java 类包加上 Sqlite_jni.dll 文件,组成了 SQLite Java 接口库,在应用 Java 语言调用 JDBC JNI 接口时,都是通过应用 Java 的本地化技术调用 Sqlite_jni.dll 文件,完成对 SQLite 数据库的操作。

下面这段代码演示如何应用 JNI 接口操作 SQLite 。可以看到 Database 类的 exec() 方法是执行 SQL 语句的关键:

Database db = new Database();

try {

// 打开数据库

db.open("c:\\temp\\mydata.slt", 0666);

db.interrupt();

db.busy_timeout(1000);

db.busy_handler(null);

db.exec("create table account (name varchar(10),gale boolean)",result);

db.exec("insert into account values('steve','m')", result);

db.exec("select * from account",result);


Author YiYun QQ 33252040 / 99593311

// 关闭数据库

db.close();

} catch (Exception e) {

e.printStackTrace();

}

用户一定要保证在类路径 class_path 中有 “sqlite.jar”, 并且保证在你的 JAVA 库路径 JAVA library path 中有本地库 native library 。用 "SQLite.JDBCDriver" 作为 JDBC 的驱动程序类名。连接 JDBC URL 格式为 jdbc:sqlite:/path 。这里的 path 为指定到 SQLite 数据库文件的路径,例如:

jdbc:sqlite://dirA/dirB/dbfile

jdbc:sqlite://DRIVE:/dirA/dirB/dbfile

jdbc:sqlite://COMPUTERNAME/shareA/dirB/dbfile

参考下面的应用 JDBC 连接 SQLite 的例程:

// 声明 JDBC 驱动程序

Class clz = Class.forName("SQLite.JDBCDriver");

// 连接数据库

Connection conn = DriverManager.getConnection("jdbc:sqlite:/c:/temp/e2.db");

Statement stmt = conn.createStatement();

// 生成 person 表,包含名子和年龄字段

stmt.execute("create table person (name varchar(100),age int)");

// 插入数据

stmt.execute("insert into person values('steve',25)");

// SQL 语句读出数据

result = stmt.executeQuery("select * from person");

while(result.next()){

System.out.println(result.getString(1));

System.out.println(result.getInt(2));

}

运行程序时要在 Java.exe 命令行加入选项 java.library.path 指定到 Sqlite_jni.dll 所在的路径。例如,如果 Sqlite_jni.dll 放在 c:\sqliteNative 路径下面,运行类 com.YiYun.MyClass 的命令行将会是这样: java -Djava.library.path=c:\sqliteNative com.YiYun.MyClass

SQLite 已于 2005 6 13 发布了 Version 3.2.2, 该版本不仅修正了许多的 BUG, 而且访问速度更快,产生的代码量更少。而 JAVA 程序又具有简单易学、面向对象、平台无关性、稳定安全等特点。两者结合起来开发的应用程序必然兼具两方面的优势。

分享到:
评论

相关推荐

    嵌入式数据库SQLite

    嵌入式数据库SQLite与Java2009-01-06 19:54SQLite作为一个开源的嵌入式数据库产品,具有系统开销小,检索效率高的特性,适用于手机、PDA、机顶盒设备等电器,并且作为嵌入式数据库在可下载的消费类应用程序中运行的...

    嵌入式数据库SQlite和JAVA

    ### 嵌入式数据库SQLite与Java:技术特点与接口应用 #### 一、嵌入式数据库概述 在探讨SQLite之前,我们先简要了解一下嵌入式数据库的基本概念及其应用场景。传统的数据库管理系统如Oracle、SQL Server和MySQL等,...

    JAVA在SQLite嵌入式数据库中的应用.rar

    这篇文章介绍嵌入式数据库产品SQLite 的技术特点,并着重讨论研究与Java语言之间的接口,并以实例说明如何使用JAVA 开发基于SQLite 的应用程序。 正文: 通常我们采用各种数据库产品来实现对数据的存储、检索等...

    JAVA在SQLite嵌入式数据库中的应用

    JAVA在SQLite嵌入式数据库中的应用,很专业的问题

    嵌入式数据库SQLite入门与分析(1-9).

    ### 嵌入式数据库SQLite入门与分析 #### 一、SQLite简介 SQLite是一种轻量级的嵌入式关系型数据库管理系统,最初于2000年由D.Richard Hipp开发并发布。作为一种嵌入式数据库,SQLite与其他传统数据库管理系统(如...

    嵌入式数据库原理与应用

    在Java中,常见的嵌入式数据库有H2、SQLite、Derby(Apache)等。例如,H2数据库是一个完全开源的、支持SQL标准的轻量级数据库,它可以被内嵌到Java应用程序中,提供单用户或多用户访问。SQLite则是一个轻量级的、零...

    JAVA在SQLite 嵌入式数据库中的应用

    【Java在SQLite嵌入式数据库中的应用】 在许多软件开发场景中,特别是在移动设备和桌面应用程序中,嵌入式数据库由于其轻量级、高效的特点,成为了一个理想的选择。SQLite是一个开源的嵌入式数据库系统,它具有体积...

    商业也免费的嵌入式数据库sqlite源码

    SQLite是一款广泛应用的开源嵌入式数据库,其特点在于轻量级、高效且易于集成。它遵循SQL92标准,提供了一套完整的SQL语法支持,使得开发者可以在多种项目中灵活运用。"商业也免费"的特性使得SQLite在商业环境中受到...

    基于嵌入式数据库的英汉汉英双向电子词典(论文+源程序)

    在选择数据库引擎的过程中,作者对比了多种嵌入式数据库,最终选择了SQLite。SQLite因其高效查询性能和优秀的存储空间优化能力,成为构建电子词典的理想选择。系统功能设计上,参考了金山词霸,选取了核心功能,包括...

    JAVA在SQLite_嵌入式数据库中的应用

    作为一个开源的嵌入式数据库产品,具有系统开销小,检索效率高的特性...这篇文章介绍嵌入式数据库产品SQLite 的技术特点,并着重讨论研究与Java 语言之间的接口,并以实例说明如何使用JAVA 开发基于SQLite 的应用程序。

    sqlite驱动 java数据库驱动 sqlite连接java sqlite sqlite.jar

    在Java中,我们通常使用SQLite JDBC驱动来与SQLite数据库进行交互,这就是"sqlite驱动 java数据库驱动"所指的内容。SQLite JDBC驱动允许Java应用程序通过标准的JDBC接口来连接和操作SQLite数据库。 `sqlitejdbc-v...

    JAVA在SQLite_嵌入式数据库中的应用.pdf

    Java在SQLite嵌入式数据库中的应用是一个广泛的领域,涉及到许多重要的技术知识点。SQLite是一个轻量级、开源的SQL数据库引擎,常被用于嵌入式系统和移动应用中,因为它无需服务器进程,可以直接在应用程序中使用。...

    嵌入式数据库使用java进行开发的一款android端的学生信息管理系统

    总的来说,“StudentMangerSystem”展示了如何在Android环境中利用Java和嵌入式数据库SQLite来开发一个实用的学生信息管理系统。它不仅涉及到数据库设计和操作,还包括Android应用的架构和用户交互设计,对于学习...

    数据库sqlite 小型数据库

    在使用SQLite时,我们通常需要与之交互的Java开发环境会用到`sqlitejdbc-v056.jar`,这是一个SQLite的Java驱动,它允许Java应用程序通过JDBC接口连接并操作SQLite数据库。 `sqlite命令.txt`可能包含SQLite的命令行...

    Java嵌入式数据库程序的开发.pdf

    在探讨Java嵌入式数据库程序的开发时,首先需要了解嵌入式数据库的定义及其在不同应用场景中的重要性。嵌入式数据库是一种小型的数据库管理系统,常被嵌入到应用程序中,使得数据处理更加轻量级和本地化。相比大型...

    sqlite3嵌入式数据库的ARM-Linux移置详解

    《SQLite3嵌入式数据库在ARM-Linux平台上的移植详解》 嵌入式数据库在近年来得到了广泛的关注,尤其在移动设备和物联网(IoT)领域。SQLite作为一个轻量级的、无服务器、自包含的、开源的SQL数据库引擎,因其高效、...

    Java嵌入式数据库程序的开发.zip

    在Java领域,一些常用的嵌入式数据库有H2、SQLite、Derby(Apache)和HSQLDB。 **H2数据库** H2是一款开源的、高性能的Java嵌入式数据库,支持多种数据库模式,包括SQL92、SQL:2003等。它可以在内存中运行,也可以...

    APP开发教程 Java Android移动端开发 11、SQLite嵌入式数据库 共66页.pptx

    SQLite是一款广泛应用于移动开发领域的开源嵌入式数据库,尤其在Java Android平台上。SQLite具有轻量级、绿色软件、单一文件等特点,使得它成为许多小型应用和嵌入式系统的首选数据库解决方案。 SQLite的主要特性:...

Global site tag (gtag.js) - Google Analytics