介绍一种乌班图中使用sqlite的用法,非常简单,下面的例子是在乌班图12.04中实现的:

1,先安装两个东西

sudo apt-get install sqlite sqlite3

sudo apt-get install libsqlite3-dev  // 不然可能会报 没有头文件 sqlite3.h

2,C/C++接口:一般用到下面这三个,详情请参考sqlite官方文档。

(1)sqlite3_open(const char *filename, sqlite3 **ppDb)

    打开一个数据库连接, 返回sqlite3对象。

(2)sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)

    解析并执行由 sql 参数所给的每个命令,直到字符串结束或者遇到错误为止。

(3)sqlite3_close(sqlite3*)

    关闭之前打开的数据库。

3、打开数据库并创建表

#include<stdio.h>
#include<sqlite3.h> // 暂时先不管
static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i = ;
for(i = ; i < argc; i++)
{
printf("%s = %s\n",azColName[i], argv[i]?argv[i]:"NULL");
} printf("\n");
return ;
} int main()
{
sqlite3* db;
char *zErrMsg = ;
int rc;
char *sql; rc = sqlite3_open("test.db", &db); // 打开数据库
if(rc)
{
fprintf(stderr, "Can't open database:%s\n", sqlite3_errmsg(db));
// exit(0);
return -;
}
else
{
fprintf(stderr,"open database succeddfully\n");
} sql = "create table company(ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE TEXT NOT NULL, ADDRESS CHAR(50))"; rc = sqlite3_exec(db, sql, callback, , &zErrMsg); // 执行上面sql中的命令
if(SQLITE_OK != rc)
{
fprintf(stderr, "SQL error: %s\n", zErrMsg);
}
else
{
fprintf(stdout, "create table successfully\n");
} sqlite3_close(db);
return ;
}

运行:需要链接sqlite3库,下面的其他操作也是如此。

 gcc sqlite3test.c -o create -l sqlite3

4、插入数据:

#include<stdio.h>
#include<sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i = ;
for(i = ; i < argc; i++)
{
printf("%s = %s\n",azColName[i], argv[i]?argv[i]:"NULL");
} printf("\n");
return ;
} int main()
{
sqlite3* db;
char *zErrMsg = ;
int rc;
char *sql; rc = sqlite3_open("test.db", &db);
if(rc)
{
fprintf(stderr, "Can't open database:%s\n", sqlite3_errmsg(db));
// exit(0);
return -;
}
else
{
fprintf(stderr,"open database succeddfully\n");
} // sql = "create table company(ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE TEXT NOT NULL, ADDRESS CHAR(50))"; sql = "insert into company(ID, NAME, AGE, ADDRESS) values(1, 'Paul', 25, 'USA');\
insert into company(ID, NAME, AGE, ADDRESS) values(, 'James', , 'JAP');\
insert into company(ID, NAME, AGE, ADDRESS) values(, 'Yao', , 'CHA');\
insert into company(ID, NAME, AGE, ADDRESS) values(, 'kobe', , 'USA');"; rc = sqlite3_exec(db, sql, callback, , &zErrMsg);
if(SQLITE_OK != rc)
{
fprintf(stderr, "SQL error: %s\n", zErrMsg);
}
else
{
fprintf(stdout, "insert table successfully\n");
} sqlite3_close(db);
return ;
}

5、查询数据:

注意:这里的callback函数,是sqlite的一个回调函数,格式如下(必须按照这个格式):
int sqlite_callback(
    void* NotUsed,    /* 由 sqlite3_exec() 的第四个参数传递而来 */
    int argc,        /* 表的列数 */
    char** argv,    /* 指向查询结果的指针数组, 可以由 sqlite3_column_text() 得到 */
    char** azColName /* 指向表头名的指针数组, 可以由 sqlite3_column_name() 得到 */
);

执行sqlite3_exec() 时作为参数传进去。

说明:

参数:
    NotUsed:由sqlite3_exec传递的初始化参数
    argc:表头的列数
    azColName:表头的名字数组指针,在我们的例子就是指向{ID, NAME, AGE, ADDRESS}的指针
    argv:表头的数据数组指针
返回值:
    1:中断查找
    0:继续列举查询到的数据

#include<stdio.h>
#include<sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i = ;
for(i = ; i < argc; i++)
{
printf("%s = %s\n",azColName[i], argv[i]?argv[i]:"NULL");
} printf("\n");
return ;
} int main()
{
sqlite3* db;
char *zErrMsg = ;
int rc;
char *sql; rc = sqlite3_open("test.db", &db);
if(rc)
{
fprintf(stderr, "Can't open database:%s\n", sqlite3_errmsg(db));
// exit(0);
return -;
}
else
{
fprintf(stderr,"open database succeddfully\n");
} sql = "select * from company;"; rc = sqlite3_exec(db, sql, callback, , &zErrMsg);
if(SQLITE_OK != rc)
{
fprintf(stderr, "SQL error: %s\n", zErrMsg);
}
else
{
fprintf(stdout, "select table successfully\n");
} sqlite3_close(db);
return ;
}

请看输出:

6、更新并查询:

#include<stdio.h>
#include<sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i = ;
for(i = ; i < argc; i++)
{
printf("%s = %s\n",azColName[i], argv[i]?argv[i]:"NULL");
} printf("\n");
return ;
} int main()
{
sqlite3* db;
char *zErrMsg = ;
int rc;
char *sql; rc = sqlite3_open("test.db", &db);
if(rc)
{
fprintf(stderr, "Can't open database:%s\n", sqlite3_errmsg(db));
// exit(0);
return -;
}
else
{
fprintf(stderr,"open database succeddfully\n");
} sql = "update company set ADDRESS = 'RUS' where ID = 3;\
select * from company;"; rc = sqlite3_exec(db, sql, callback, , &zErrMsg);
if(SQLITE_OK != rc)
{
fprintf(stderr, "SQL error: %s\n", zErrMsg);
}
else
{
fprintf(stdout, "update table successfully\n");
} sqlite3_close(db);
return ;
}

7、删除并查询:

#include<stdio.h>
#include<sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i = ;
for(i = ; i < argc; i++)
{
printf("%s = %s\n",azColName[i], argv[i]?argv[i]:"NULL");
} printf("\n");
return ;
} int main()
{
sqlite3* db;
char *zErrMsg = ;
int rc;
char *sql; rc = sqlite3_open("test.db", &db);
if(rc)
{
fprintf(stderr, "Can't open database:%s\n", sqlite3_errmsg(db));
// exit(0);
return -;
}
else
{
fprintf(stderr,"open database succeddfully\n");
} sql = "delete from company where ID = 2;\
select * from company;"; rc = sqlite3_exec(db, sql, callback, , &zErrMsg);
if(SQLITE_OK != rc)
{
fprintf(stderr, "SQL error: %s\n", zErrMsg);
}
else
{
fprintf(stdout, "delete table successfully\n");
} sqlite3_close(db);
return ;
}

8,上面的例子可在下面找到:

https://github.com/xcywt/MySQLite

学习SQLite之路(五) C/C++ SQLite开发实例的更多相关文章

  1. 我的VSTO之路(五):Outlook初步开发之联系人扩展

    原文:我的VSTO之路(五):Outlook初步开发之联系人扩展 上一讲我们完成对Word的介绍,文本开始,我将着重介绍Outlook.Outlook是微软Office中一个非常实用的工具,尤其在一个 ...

  2. python3.4学习笔记(二十五) Python 调用mysql redis实例代码

    python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...

  3. javaweb学习总结(二十五)——jsp简单标签开发(一)

    一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编 ...

  4. SpringCloud学习成长之路 五 路由器网关

    在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: ...

  5. UNP学习笔记(第五章 TCP客户/服务程序实例)

    我们将在本章使用前一章中介绍的基本函数编写一个完整的TCP客户/服务器程序实例 这个简单得例子是执行如下步骤的一个回射服务器: TCP回射服务器程序 #include "unp.h" ...

  6. 学习SQLite之路(三)

    20160616更新 参考: http://www.runoob.com/sqlite/sqlite-tutorial.html 1. SQLite  PRAGMA:可以用在 SQLite 环境内控制 ...

  7. android安卓 SQLite教程:内部架构及SQLite使用办法

    SQLite 介绍 SQLite一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能.由于JDBC不适合手机这种内存受限设备,所以Android开发人员需要学习新的API ...

  8. [Sqlite]--&gt;Java采用jdbc联系Sqlite各种特定的工艺数据库的数据操作

    引:     1, Sqlite在Windows.Linux 和 Mac OS X 上的安装过程     2.嵌入式数据库的安装.建库.建表.更新表结构以及数据导入导出等等具体过程记录     3,嵌 ...

  9. SQLite 数据类型(http://www.w3cschool.cc/sqlite/sqlite-data-types.html)

    SQLite 数据类型 SQLite 数据类型是一个用来指定任何对象的数据类型的属性.SQLite 中的每一列,每个变量和表达式都有相关的数据类型. 您可以在创建表的同时使用这些数据类型.SQLite ...

  10. 学习WCF之路,长期更新

    我学习WCF之路:创建一个简单的WCF程序   为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本 ...

随机推荐

  1. android动态注册监听网络变化异常

    在使用广播接收器监听网络变化的时候,在AndroidManifest.xml中加入<user-permission android:name="android.permission.A ...

  2. 今天说一下 Group by 这个东西

    group by 这个关键字,这个语句太平凡了~基本上只要有报表的地方,就会有它的身影. 常规用法就是 INSERT INTO #TypeValue ( TypeID, Col2 ) , N , N ...

  3. 烂泥:高负载均衡学习haproxy之关键词介绍

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 上一篇文章我们简单讲解了有关haproxy的安装与搭建,在这篇文章我们把haproxy配置文件中使用到的关键词一一介绍下. 关注我微信ilann ...

  4. Windows Azure CN 超业余性能测试

    先来说说为什么会有这篇文章吧.从朋友那里搞来个Windows Azure CN的测试帐号,在公司的时候领导的朋友有一个阿里云的服务器,平时部署小东西都往上面丢,不过那是人家的东西,还有其他的应用跑在上 ...

  5. win7 telnet

    一.telnet连接 1.linux linux下可以通过net stat 查看22端口来确认端口是否开放. 然后在cmd中可通过telnet 10.0.200.151 22来连接. 2.win7 w ...

  6. Ganglia安装扩容

    现有的环境中Hbase集群的机器需要安装ganglia,遂采取了以下步骤. 查看机器的信息, uname –a cat /etc/issue 查看当前环境是x86的,安装的是red hat 6.4 之 ...

  7. 150924-还是起得来床的好-HTML(CSS)

    一早醒来是9:10,这些天最晚的了,也可能是睡的最爽的了. 不废话,早上Matlab仿真干不出来,不如学学html,上代码~ <!DOCTYPE HTML><html>< ...

  8. 三维网格分割算法(Random Walks)

    首先以一维随机游走(1D Random Walks)为例来介绍下随机游走(Random Walks)算法,如下图所示,从某点出发,随机向左右移动,向左和向右的概率相同,都为1/2,并且到达0点或N点则 ...

  9. Unity减少GC Alloc之 使用for替换foreach

    Unity中foreach会增加GC unity中for效率比foreach高? 在unity中使用foreach遍历集合会增加gc alloc,参考的话题:作为Unity3D的脚本而言,c#中for ...

  10. javascript高级程序设计 读书笔记2

    第五章 引用类型 对象是引用类型的实例,引用类型是一种数据结构,将数据和功能组织在一起.描述的是一类对象所具有的属性和方法.对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数俩创建 ...