Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3892235
  • 博文数量: 146
  • 博客积分: 3918
  • 博客等级: 少校
  • 技术积分: 8585
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-17 13:52
个人简介

个人微薄: weibo.com/manuscola

文章分类

全部博文(146)

文章存档

2016年(3)

2015年(2)

2014年(5)

2013年(42)

2012年(31)

2011年(58)

2010年(5)

分类: SQLite/嵌入式数据库

2012-04-04 11:59:42

    最近三四天学习的主要内容是数据库相关的知识,本科时初步学习过数据库的知识,通过了三级数据库考试,但是蜻蜓点水,没啥收获。本文主要是讲一下在linux下进行sqlite接口调用的一些体会和心得。


    首先是安装,我用的是Ubuntu系统,安装就比较简单了,直接apt-get就搞定了。

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<sqlite3.h>


  4. int main()
  5. {
  6.     sqlite3* db;
  7.         int ret;
  8.         char *sql;
  9.         char *zerr;

  10.         ret = sqlite3_open("test.db",&db);
  11.         if(ret)
  12.         {
  13.          fprintf(stderr,"cannot open db : %s\n",sqlite3_errmsg(db));
  14.                 sqlite3_close(db);
  15.                 return 1;
  16.         }

  17.         sql = "create table episodes(id int ,name text)";
  18.         ret = sqlite3_exec(db,sql,NULL,NULL,&zerr);
  19.         if(ret != SQLITE_OK)
  20.         {
  21.          if(zerr!=NULL)
  22.                 {
  23.                  fprintf(stderr,"SQL error:%s\n",zerr);
  24.                         sqlite3_free(zerr);
  25.                 }
  26.         }
  27.         sql = "insert into episodes values(10,'the dinner party')";
  28.         ret = sqlite3_exec(db,sql,NULL,NULL,&zerr);

  29.         sqlite3_close(db);
  30.         return 0;
  31. }
    首先遇到的问题是,没有头文件,我去官网下载了sqlite-amalgamation-3071100.zip,解压下来,把头文件sqlite3.h放入到了/usr/include/ 路径下。 

    然后遇到的问题是 没有动态库,我加上 -lsqlite3选项还是无法找到动态库。看了网上说了中方法,说是可以通过apt-get install libsqlite3-dev的方法解决,我尝试了下,果然,再次编译就成功了。

   上面是我遇到的问题,我也不知道我解决问题的办法是不是正确的,更优雅的做法应该是什么样的,如果有路过高手,请不吝赐教。

点击(此处)折叠或打开

  1. root@libin:~/program/DB/sqlite# gcc -o test test.c -lsqlite3
  2. root@libin:~/program/DB/sqlite# ./test
  3. root@libin:~/program/DB/sqlite# ll
  4. 总用量 24
  5. drwxr-xr-x 2 root root 4096 2012-04-04 12:08 ./
  6. drwxr-xr-x 3 root root 4096 2012-04-04 10:04 ../
  7. -rwxr-xr-x 1 root root 7343 2012-04-04 12:08 test*
  8. -rw-r--r-- 1 root root 666 2012-04-04 12:08 test.c
  9. -rw-r--r-- 1 root root 2048 2012-04-04 12:08 test.db
我们可以看到生成了数据库test.db.


点击(此处)折叠或打开

  1. root@libin:~/program/DB/sqlite# sqlite3 test.db
  2. SQLite version 3.6.22
  3. Enter ".help" for instructions
  4. Enter SQL statements terminated with a ";"
  5. sqlite> select * from episodes ;
  6. 10|the dinner party
  7. sqlite>


参考文献:
1 SQLite 权威指南
2 cannot find lxxx 问题总结
阅读(7406) | 评论(8) | 转发(1) |
给主人留下些什么吧!~~

GFree_Wind2012-04-05 12:32:54

兄弟,我也用过sqlite。还看了一小部分源代码。。。。
不知道你要拿sqlite来做什么?它可是轻量级的数据库,当数据太多的时候,它就扛不住了啊。

GFree_Wind2012-04-05 12:32:02

Heartwork: 以前接触过一点Berkley DB,本来是打算用来做db的cache层,取代之前使用的rb tree和b+tree,后来发现bdb的缓存文件一直在增长,一直增长到4G左右,当保存内容超.....
我以前也用过sqlite。
sqlite的数据库文件也不会随着数据的减小而减小——至少3.2那个版本是这样。
删除数据操作,并不减小数据库文件。

另外,sqlite总的来说,还是一个轻量级的数据库,只适用于嵌入式设备。后来我们就改用Postgre了。

Heartwork2012-04-04 22:27:51

以前接触过一点Berkley DB,本来是打算用来做db的cache层,取代之前使用的rb tree和b+tree,后来发现bdb的缓存文件一直在增长,一直增长到4G左右,当保存内容超过4G的容量时还会有问题(具体问题忘了),而且文件的大小并不会随着记录数的减少而变小,因为这些限制,所以就放弃了这种技术……

兄弟可以关注一下sqlite是怎么处理类似的问题的,到时候再顺便给我普及一下:)