sqlite学习笔记7:C语言中使用sqlite之打开数据库

时间:2022-05-28 22:26:52

数据库的基本内容前面都已经说得差点儿相同了。接下看看如何在C语言中使用sqlite。

一 接口

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

打开数据库,假设数据库不存在则新建一个数据库,并打开

sqlite3_close(sqlite3*)

关闭数据库。假设关闭之前还存在没有运行完的语句,将会返回SQLITE_BUSY

二 实例

1 文件夹结构

Projects{

main.c// 代码所在文件

sqlite{// 官网下载下来的sqlite压缩包解压之后的文件文件夹

shell.c// 本文件在项目中实际上是用不上的。这个文件是用来生成sqlite命令工具的,详细能够參考:sqlite学习笔记1

sqlite3.c

sqlite3.h

sqlite3ext.h

}

}

2 源码

// main.c
#include <stdio.h>
#include <stdlib.h>
#include "sqlite/sqlite3.h" #define DB_NAME "hanfeng.db" int main()
{
sqlite3* db = NULL ;
char* msg = NULL ;
int ret = 0 ; ret = sqlite3_open(DB_NAME, &db);
if (ret){
fprintf(stderr, "error open datebase:%s\n.", DB_NAME) ;
exit(0) ;
}
else{
fprintf(stdout, "successfully open datebase.\n") ;
}
sqlite3_close(db) ;
return 0;
}

为了今后扩展方便,现将代码改动例如以下:

#include <stdio.h>
#include <stdlib.h>
#include "sqlite/sqlite3.h" #define DB_NANE "sqlite/test.db" sqlite3 *db = NULL;
char* sql = NULL;
char *zErrMsg = NULL;
int ret = 0; typedef enum{
false,
true
} bool; static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i = 0;
for(i=0; i < argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n"); return 0;
} bool connectDB()
{
ret = sqlite3_open(DB_NANE, &db); if( ret != SQLITE_OK){
fprintf(stderr, "Error open database: %s\n", sqlite3_errmsg(db));
sqlite3_free(zErrMsg); return false;
} fprintf(stdout, "Successfully opened database\n");
return true;
} bool closeDB()
{
int ret = 0;
ret = sqlite3_close(db);
if ( ret == SQLITE_BUSY ){
return false;
} return true;
} int main(int argc, char* argv[])
{
connectDB();
closeDB(); return 0;
}

3 编译执行

执行有两种方式,基于前面的笔记。我们并没有配置sqlite的环境。不过下载解压得到列一个目录sqlite,因此。须要用例如以下命令:

gcc -o main main.c ./sqlite/sqlite3.c -lpthread -ldl

假设下载配置安装了sqlite,则须要将上面的头文件包括改为:

#include <sqlite3.h>

然后运行命令:

gcc -o main main.c  -lsqlite3

命令运行完毕之后会生成一个叫main的可运行文件,输入:

./main

既能够看到结果。

#在编译时使用g++会报错: error: invalid conversion from ‘const void*’ to ‘const char*’

g++貌似对类型转换要求更为严格,不支持这种转换。

路过的大侠,知道如何用g++编译的,请不吝赐教......

sqlite学习笔记7:C语言中使用sqlite之打开数据库的更多相关文章

  1. R语言学习笔记1——R语言中的基本对象

    R语言,一种*软件编程语言与操作环境,主要用于统计分析.绘图.数据挖掘.R本来是由来自新西兰奥克兰大学的Ross Ihaka和Robert Gentleman开发(也因此称为R),现在由“R开发核心 ...

  2. C语言学习笔记:15&lowbar;c语言中的进制操作&period;c

    /* * 15_c语言中的进制操作.c * * Created on: 2015年7月5日 * Author: zhong */ #include <stdio.h> #include & ...

  3. Sqlite学习笔记&lpar;四&rpar;&amp&semi;&amp&semi;SQLite-WAL原理

    Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...

  4. Sqlite学习笔记&lpar;四&rpar;&amp&semi;&amp&semi;SQLite-WAL原理(转)

    Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...

  5. SQLite学习笔记&lpar;七&rpar;&amp&semi;&amp&semi;事务处理

    说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性.对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性.sqlite也不例外,虽然简单,依然 ...

  6. 23 DesignPatterns学习笔记:C&plus;&plus;语言实现 --- 2&period;7 Proxy

    23 DesignPatterns学习笔记:C++语言实现 --- 2.7 Proxy 2016-07-18 (www.cnblogs.com/icmzn) 模式理解

  7. 23 DesignPatterns学习笔记:C&plus;&plus;语言实现 --- 2&period;6 Facade

    23 DesignPatterns学习笔记:C++语言实现 --- 2.6 Facade 2016-07-22 (www.cnblogs.com/icmzn) 模式理解

  8. 23 DesignPatterns学习笔记:C&plus;&plus;语言实现 --- 2&period;5 Factory

    23 DesignPatterns学习笔记:C++语言实现 --- 2.5 Factory 2016-07-18 (www.cnblogs.com/icmzn) 模式理解   1. Flyweight ...

  9. 23 DesignPatterns学习笔记:C&plus;&plus;语言实现 --- 2&period;4 Composite

    23 DesignPatterns学习笔记:C++语言实现 --- 2.4 Composite 2016-07-22 (www.cnblogs.com/icmzn) 模式理解

随机推荐

  1. mysql load data 乱码的问题

    新学mysql在用load data导入txt文档时发现导入的内容,select 之后是乱码,先后把表,数据库的字符集类型修改为utf8,但还是一样,最后在 http://bbs.chinaunix. ...

  2. ASP&period;NET MVC网站在opera mobile emulator中浏览

         众所周知,ASP.NET MVC4有一个Moblie Application,我们都可以通过这个来开发手机网站,当然为了简单,也可以在一般的MVC中的View下面加个后缀mobile,形如I ...

  3. C&num;手工注入辅助工具

    看了某牛出版的MySql手注天书一神书,基本上解决了SQL注入上的知识点,于是打完(酱油)省赛回来通宵了一晚上写了个工具 方便语句构造SQL 联合查询 报错注入 盲注 读写 命令执行 基本都有整合 遇 ...

  4. python 文件及文件夹操作

    python 文件.目录操作(新增.移动.删除等) python 文件夹与文件操作 mport string, os, sys dir = '/var' print '----------- no s ...

  5. unix c 09

    IPC - 进程间通信   文件/信号/管道/共享内存/消息队列/信号量集/网络   XSI IPC (共享内存.消息队列和信号量集)   使用方式 非常的类似. 共享内存的使用步骤:     1 生 ...

  6. Liunx find的运用

    find命令 一.根据 -name 查找 find[搜索范围][搜索条件] find /root -name a1 若是模糊查询,则使用通配符 *匹配任意字符{find /root -name &qu ...

  7. 微信小程序内嵌网页 网站生成小程序

    1. 进入小程序后台 - 设置 - 开发设置 2. 添加业务域名(小程序只支持https) 3. 小程序代码 <web-view src="网址"></web-v ...

  8. 走进异步编程的世界 - 开始接触 async&sol;await(转)

    序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $"" 来拼接字符串,相当于string.Fo ...

  9. Web中的积累:外观模式 Facade

    摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 壹 前言 目测好久没写文章了,距离上一篇文章也有二十多天.我是怎么了?哈 ...

  10. vue&plus;webpack 安装常见插件

    html-webpack-plugin 插件地址:https://www.npmjs.com/package...安装指令: npm install html-webpack-plugin --sav ...