sqlite学习笔记7:C语言中使用sqlite之打开数据库
数据库的基本内容前面都已经说得差点儿相同了。接下看看如何在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之打开数据库的更多相关文章
- R语言学习笔记1——R语言中的基本对象
R语言,一种自由软件编程语言与操作环境,主要用于统计分析.绘图.数据挖掘.R本来是由来自新西兰奥克兰大学的Ross Ihaka和Robert Gentleman开发(也因此称为R),现在由“R开发核心 ...
- C语言学习笔记:15_c语言中的进制操作.c
/* * 15_c语言中的进制操作.c * * Created on: 2015年7月5日 * Author: zhong */ #include <stdio.h> #include & ...
- Sqlite学习笔记(四)&&SQLite-WAL原理
Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...
- Sqlite学习笔记(四)&&SQLite-WAL原理(转)
Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...
- SQLite学习笔记(七)&&事务处理
说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性.对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性.sqlite也不例外,虽然简单,依然 ...
- 23 DesignPatterns学习笔记:C++语言实现 --- 2.7 Proxy
23 DesignPatterns学习笔记:C++语言实现 --- 2.7 Proxy 2016-07-18 (www.cnblogs.com/icmzn) 模式理解
- 23 DesignPatterns学习笔记:C++语言实现 --- 2.6 Facade
23 DesignPatterns学习笔记:C++语言实现 --- 2.6 Facade 2016-07-22 (www.cnblogs.com/icmzn) 模式理解
- 23 DesignPatterns学习笔记:C++语言实现 --- 2.5 Factory
23 DesignPatterns学习笔记:C++语言实现 --- 2.5 Factory 2016-07-18 (www.cnblogs.com/icmzn) 模式理解 1. Flyweight ...
- 23 DesignPatterns学习笔记:C++语言实现 --- 2.4 Composite
23 DesignPatterns学习笔记:C++语言实现 --- 2.4 Composite 2016-07-22 (www.cnblogs.com/icmzn) 模式理解
随机推荐
- IPv6通讯原理(1) - 不能忽略的网卡启动过程
本文主题:通过抓包分析,深入观察网卡启动过程的每个步骤,从而逐步掌握通讯原理.
- flex和layout移动端布局
1.九宫格 样式为: ul{ display: flex; flex-wrap: wrap;//超出换行 } li{ width: 33%; height: 60px; display: flex; ...
- MVC学习日记(三)EntityFramework
其实学会了第一篇的创建和第二篇的使用以后,基本的mvc操作足够了,至于验证神马的,还不如用Jquery.h5的好看适用,所以接下来, 后续上会讲一些比较实用的. 在之前的文章说到了基础的使用, 那么, ...
- LayoutInflater源码解析
Android使用LayoutInflater来进行布局加载,通常获取方式有两种: 第一种: LayoutInflater layoutInflater = LayoutInflater.from(c ...
- rem简单实现移动端适配
rem:移动web开发 默认字体大小是16px 在<html>中设置字体大小 与em的区别: em是在父级设置字体大小受影响 移动端适配 首先获取屏幕的宽度 计算当前屏幕宽度和640的比例 ...
- BeautifulSoup 库的使用记录
BeautifulSoup 有何用途 如果我们需要通过脚本来抓取网络中的数据时,使用传统的字符解析等方法时是非常低效的,而BeautifulSoup则可以方便的通过接口来获取标签中所想要得到的数据.主 ...
- Android入门知识
1.Android开发环境 Android常用的开发环境包括两个:Eclipse + ADT 和Android Studio,Android Studio作为google官方推出的开发环境自然有得天独 ...
- PHP中的字符串类型
PHP支持两种类型的字符串,这些字符串用引号说明. 1.如果希望赋值一个字面意义的字符串,精确保存这个字符串的内容,应该用单引号标注,例如: $info='You are my $sunshine'; ...
- Websphere 手动模拟删除应用操作
Websphere 手动模拟删除应用操作 切记:不要在程序还在运行的时候,直接的remove掉应用程序,不然,会发生意外的错误. 最近,在项目中,不小心手动移除了正在运行的应用,发现se ...
- 关于 Windows 10 如何扩展分区与合并分区
前言 相信大部分人都遇见磁盘不够用的问题吧,然后都在后悔当初为什么就给 x 盘分了 10G 的容量吧. 不过没关系,自从 Windows 7 开始( xp 我也不知道有毛有),Windows 自带的磁 ...