加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SQLITE3嵌入式数据库简单介绍

(2011-03-18 16:22:53)
标签:

sqlite3

嵌入式数据库

it

分类: 程序开发与测试

SQLite是一个非常轻量级自包含(lightweight and self-contained)的DBMS,它可移植性好,很容易使用,很小,高效而且可靠。SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。

嵌入式数据库的一大好处就是在你的程序内部不需要网络配置,也不需要管理。因为客户端和服务器在同一进程空间运行。SQLite 的数据库权限只依赖于文件系统,没有用户帐户的概念。SQLite 有数据库级锁定,没有网络服务器。它需要的内存,其它开销很小,适合用于嵌入式设备。你需要做的仅仅是把它正确的编译到你的程序。

SQLite使用起来非常方便,仅仅需要敲入带有SQLite数据库名字的"sqlite3"命令即可。如果文件不存在,则创建一个新的(数据库)文件。然后sqlite3程序将提示你输入SQL。敲入SQL语句(以分号“;”结束),敲回车键之后,SQL语句就会执行。例如,创建一个包含一个表"tb11"名字为"ex1"的SQLite数据库,你可以这样做:

$sqlite3 ex1
SQLite version 3.3.17
Enter ".help" for instructions
sqlite> create table tbl1(one varchar(10), two smallint);
sqlite> insert into tbl1 values('hello!', 10);
sqlite> insert into tbl1 values('goodbye', 20);
sqlite> select * from tbl1;
hello!|10
goodbye|20

其操作和普通的关系数据库没有太大的差异,可以很方便的对数据进行增、删、改、查。SQLite可以使用8种方式显示查询结果,大大方便了程序对数据的处理,sqlite3程序可以以八种不同的格式显示一个查询的结果:"csv", "列", "html", "插入", "行", "制表"和"tcl"。你可以用".mode"点命令在这些输出格式之间切换。并且可以使用.output将结果直接输出到文件。以列模式为例:

在列模式下,每条记录在一个单独的行中以数据列对齐的方式显示。列如:

sqlite> .mode column
sqlite> select from tbl1;
one         two       
----------  ----------
hello       10        
goodbye     20

SQLite支持很多程序开发语言,例如C#、PHP、Java、C/C++等,且提供了丰富的API使用起来十分方便简单,以C为例:

使用 sqlite 的 C/C++ 接口. 这个函数调用sqlite3_open() 打开数据库, sqlite3_get_table 执行 SQL 命令, 并且sqlite3_close() 关闭数据库连接。
代码:
#include <stdio.h>
#include <sqlite3.h>
int main( void )
{
    sqlite3 *db=NULL;
    char *zErrMsg = 0;
    int nrow = 0, ncolumn = 0;
    char **azResult; //二维数组存放结果
    int rc;
    rc = sqlite3_open("zieckey.db", &db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
    if( rc ){
         fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
         sqlite3_close(db);
         exit(1);
    }else printf("open zieckey.db successfully!\n");
    //也可以参考 sprintf 的用法
    //char *sql = "SELECT SensorParameter FROM SensorData WHERE SensorID = 1";
    char *sql = "SELECT * FROM SensorData ";

    sqlite3_get_table(db,sql,&azResult,&nrow,&ncolumn,&zErrMsg);
    int i=0;
    for(i=0;i<100;i++)
        printf("%s\n",azResult[i]);
    printf("row:%d column=%d \n",nrow,ncolumn);
    printf("zErrMsg = %s \n", zErrMsg);
    sqlite3_close(db); //关闭数据库
    return 0;
}

SQLite和其他关系数据库一样,也支持事务,而且对事务的使用非常简单:使用sql语句”begin;”表示事务开始,”rollback;”表示事务的回滚,“commit;”表示事务的提交。下面我们对上面例子中的代码作一下修改,给Insert操作添加事务支持:
bool is_succed = true;
sqlite3_exec(conn, "begin;", 0, 0, 0);  // 开启事务
//添加10条记录
for (int i = 0; i < 10; i++)
{
// 执行SQL
sprintf(sql, "INSERT INTO [test_for_cpp] ([id], [name], [age]) \
VALUES (%d, '%s', %d)", i, "JGood", i);
if (SQLITE_OK != sqlite3_exec(conn, sql, 0, 0, &err_msg))
{
is_succed = false;
break;
}
}
 
if (is_succed)
sqlite3_exec(conn, "commit;", 0, 0, 0);  // 提交事务
else
sqlite3_exec(conn, "rollback;", 0, 0, 0);  // 回滚事务

综上所述,SQLite是一个小巧方便且功能强大的嵌入式数据库,它实现了多数的SQL-92标准,包括数据库事务(Transaction),触发器(Trigger)和多数的复杂查询。它可以同时被多个进程或者线程访问,读访问可以并行进行,写访问只能单独进行。SQLite可以被为数众多的编程语言绑定使用并且支持多个系统平台,SQLite的官方网站称,SQLite是目前使用最广泛的数据库系统,SQLite有1.25亿份随Firefox发放、2千万份随Mac机发放、2千万随内建SQLite的PHP发放、3亿份随Skype发放、1千万份随AOL邮件客户端发放、2千万份随Symbian发放、1千万份随Solaris 10发放、还有数百万份的SQLite随McAfee、iPhones和众多手机厂商发放。由此看来SQLite在已经被广泛的应用。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有