文档章节

用C语言操作Sqlite数据库

学习环境
 学习环境
发布于 2015/10/14 19:13
字数 698
阅读 256
收藏 7

在工作中,我总是使用编译后sqlite3可执行程序,进行数据库的创建;其实我们操作sqlite数据库,

也可是使用源代码级别的形式去操作数据库。我在网上查找,对部分代码进行修改,添加上注释,

形式如下代码,其中包含对数据表的创建,添加数据,查询数据功能,代码如下:

#include <stdio.h>

#include <sqlite3.h>


//查询的回调函数声明

int select_callback(void * data, int col_count, char ** col_values, char ** col_Name);


int main(int argc, char * argv[])

{

  const char * sSQL1 = "create table users(userid varchar(20) PRIMARY KEY, age int, birthday datetime);";

  char * pErrMsg = 0;

  int result = 0;

  // 连接数据库

  sqlite3 * db = 0;

  int ret = sqlite3_open("./test.db", &db);

  if( ret != SQLITE_OK ) {

    fprintf(stderr, "无法打开数据库: %s", sqlite3_errmsg(db));

    return(1);

  }

  printf("数据库连接成功!\n");


  // 执行建表SQL

  sqlite3_exec( db, sSQL1, 0, 0, &pErrMsg );

  if( ret != SQLITE_OK ){

    fprintf(stderr, "SQL error: %s\n", pErrMsg);

    sqlite3_free(pErrMsg);

  }


  // 执行插入记录SQL

  result = sqlite3_exec( db, "insert into users values('张三',20,'2011-7-23');", 0, 0, &pErrMsg);

  if(result == SQLITE_OK){

    printf("插入数据成功\n");

  }

  result = sqlite3_exec( db, "insert into users values('李四',20,'2012-9-20');", 0, 0, &pErrMsg);

  if(result == SQLITE_OK){

    printf("插入数据成功\n");

  }


  // 查询数据表

  printf("查询数据库内容\n");

  sqlite3_exec( db, "select * from users;", select_callback, 0, &pErrMsg);


  // 关闭数据库

  sqlite3_close(db);

  db = 0;

  printf("数据库关闭成功!\n");


  return 0;

}


int select_callback(void * data, int col_count, char ** col_values, char ** col_Name)

{

  // 每条记录回调一次该函数,有多少条就回调多少次

  int i;

  for( i=0; i < col_count; i++){

    printf( "%s = %s\n", col_Name[i], col_values[i] == 0 ? "NULL" : col_values[i] );

  }


  return 0;

}

编写好代码后,我们需要进行编译。

我使用的ubuntu10.04自带的gcc编译器gcc4.4.3进行编译。

如果你使用 $ gcc sqlitetest.c

进行编译时,会出现如下的错误:

/tmp/ccyxvdme.o: In function `main':

sqlitetest.c:(.text+0x31): undefined reference to `sqlite3_open'

sqlitetest.c:(.text+0x48): undefined reference to `sqlite3_errmsg'

sqlitetest.c:(.text+0xa5): undefined reference to `sqlite3_exec'

sqlitetest.c:(.text+0xd6): undefined reference to `sqlite3_free'

sqlitetest.c:(.text+0x102): undefined reference to `sqlite3_exec'

sqlitetest.c:(.text+0x12e): undefined reference to `sqlite3_exec'

sqlitetest.c:(.text+0x15a): undefined reference to `sqlite3_exec'

sqlitetest.c:(.text+0x166): undefined reference to `sqlite3_close'

collect2: ld returned 1 exit status

这是因为gcc找不到定义sqlite3_open等等的头文件,经过在网上查找资料,

找到了解决方法,使用如下的方法进行编译:

$ gcc -o hello -L /usr/local/sqlite-autoconf-3070400/lib -I/usr/local/sqlite-autoconf-307040/include sqlitetest.c  -lsqlite3

上面的编译主要意义时-L 代码你安装sqlite3类库所在的路径, -I代表安装sqlite3的头文件路径 而-l表示

可执行程序的名称

经过上面的编译,即可成功。

执行结果如下:

~$ ./hello

数据库连接成功!

插入数据成功

插入数据成功

查询数据库内容

userid = 张三

age = 20

birthday = 2011-7-23

userid = 李四

age = 20

birthday = 2012-9-20

数据库关闭成功!


© 著作权归作者所有

共有 人打赏支持
学习环境
粉丝 3
博文 51
码字总数 115814
作品 0
长春
私信 提问
sqlite数据库乱码

我在对sqlite的db文件进行操作的时候,用的C语言直接读取信息。从手机上down下来的db文件,读到的汉字是乱码,而我自己在sqlite环境下,利用sql语句将汉字写入表中,再读的时候没有乱码。都是...

file.me
2012/02/28
2.1K
3
【我的Android进阶之旅】SQLite出错时候的错误码整理

版权声明:本文为【欧阳鹏】原创文章,欢迎转载,转载请注明出处! 【http://blog.csdn.net/ouyang_peng】 https://blog.csdn.net/qq446282412/article/details/85235154 一、背景 今天收到一...

欧阳鹏
2018/12/24
0
0
Database (SQLite)--数据库(SQLite)

一、SQLite简介 SQLite 的网站 (sqlite.org) 对SQL进行了如下描述:“SQLite 是一个可实现独立、无服务器、零配置、事务性 SQL 数据库引擎的软件库”。这句话中的关键要素都围绕着“库”这一...

失足处男的倒霉孩子
2013/12/27
1K
0
轻巧的本地数据库 - sqlite

  前言   SQLite,是一款轻型的数据库,它的设计目标是嵌入式的,而且现在很多嵌入式产品中使用它,它占资源非常低,在嵌入设备中,可能只需要几百K的内存就够了。它能够支持Windows/Lin...

linux运维菜
2018/11/01
0
0
Android 开发中使用 SQLite 数据库

SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都...

红薯
2010/08/22
67.2K
32

没有更多内容

加载失败,请刷新页面

加载更多

多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
7
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
7
0
Mac Vim配置

1.升级 vim   我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger
昨天
8
0
vmware安装Ubuntu上不了网?上网了安装不了net-tools,无法执行ifconfig?

1.重新设置网络适配器还是不行,如下指定nat 2.还需要指定共享网络,我是在无线环境下 3.无法执行ifconfig https://packages.ubuntu.com/bionic/net-tools到这个网站下载net-tools的deb文件...

noob_chr
昨天
4
0
解决SVN:E210007无法协商认证机制

svn:E210007 svn: Cannot negotiate authentication mechanism 执行下面代码即可 sudo yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-ldap...

临江仙卜算子
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部