文档章节

用C语言操作Sqlite数据库

学习环境
 学习环境
发布于 2015/10/14 19:13
字数 698
阅读 217
收藏 7
点赞 0
评论 0

在工作中,我总是使用编译后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
博文 49
码字总数 115814
作品 0
长春
【防衰老教程】-windows环境下安装SQLite

什么是 SQLite? SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。...

Weijue ⋅ 05/09 ⋅ 0

python中的SQLite数据库

python中的SQLite数据库 Python SQLITE数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身。它使用一个文件存储整个数据库,操作十分方便...

幸运券发放 ⋅ 05/03 ⋅ 0

安卓应用安全指南 4.5.3 使用 SQLite 高级话题

安卓应用安全指南 4.5.3 使用 SQLite 高级话题 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0 4.5.3.1 在 SQL 语句的断言中使用通配符...

apachecn_飞龙 ⋅ 03/22 ⋅ 0

Android_6.数据存储3_SQLite存储之创建数据库

本文是以Android Studio为开发工具,<> 为学习指导书籍的学习记录 6.4 SQLite数据 SQLite用于存储大量复杂的关系型数据,是内置在Android系统的一种轻量级的关系型数据库,它有速度快,占用资...

橄榄工作室 ⋅ 05/26 ⋅ 0

Xamarin SQLite教程数据库访问与生成

Xamarin SQLite教程数据库访问与生成 在本教程中,我们将讲解如何开发SQLite相关的App。在编写程序前,首先需要做一些准备工作,如了解Xamarin数据库访问方式,添加引用,构建使用库文件等。...

大学霸 ⋅ 昨天 ⋅ 0

【Kotlin For Android】(三): Anko 库

一、简介 Github地址 是一个使 Android应用程序 开发更快,更容易的库。它使你的代码变得简洁易读,并让您忘记 的粗糙边缘。 Anko 由几部分组成: :一个轻量级的库,里面充满了,对话框,日...

Agnes2017 ⋅ 04/27 ⋅ 0

安卓应用安全指南 4.5.1 使用 SQLite 示例代码

安卓应用安全指南 4.5.1 使用 SQLite 示例代码 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0 4.5.1.1 创建/操作数据库 在 Android ...

apachecn_飞龙 ⋅ 03/22 ⋅ 0

C语言实现的CGI,完成了留言板功能

地址:https://github.com/zhouweiit/cgi 基于ngnix+spawn_cgi+fastcgi作为服务器,使用C语言编写的cgi,实现了简单的留言板功能; 项目结构简介: 1.conf主要包含了nginx与fastcig的配置 2....

zhouweiit_ ⋅ 05/09 ⋅ 0

写一个“特殊”的查询构造器 - (一、程序结构,基础封装)

程序的结构 本篇开始,正式进入编码实践中。首先,简单的规划下程序的结构。 如上一篇所说的,我们需要一个基类 PDODriver 用来封装 PDO 的一些公用的方法,Mysql 等每个数据库都新建一个类 ...

MrQ被抢注了 ⋅ 05/11 ⋅ 0

EFCore2.0@Xamarin.Forms

由于忙于Xamarin的书的创作很久没有和大家见面了,回到博客我会陆续更新一些最新的Xamarin技术,还有最近一直在努力的人工智能相关知识。话说csdn的博客改版了。总觉得变化是好事情啊。 这篇...

dotNET跨平台 ⋅ 05/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

来自一个优秀Java工程师的简历

写在前面: 鉴于前几天的一份前端简历,虽然带着很多不看好的声音,但却帮助了很多正在求职路上的人,不管评论怎么说,我还是决定要贴出一份后端的简历。 XXX ID:357912485 目前正在找工作 ...

颖伙虫 ⋅ 24分钟前 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部