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) 模式理解
随机推荐
- nyoj--106--背包问题(贪心,水题)
背包问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<= ...
- 【POJ 3090】 Visible Lattice Points
[题目链接] http://poj.org/problem?id=3090 [算法] 通过观察发现,在这个平面直角坐标系中,除了(1,1),(1,0)和(0,1),所有可见点的横纵坐标互质 那么,问题 ...
- 第18章 Redis数据结构常用命令
18-1 字符串的一些基本命令 18-1 :配置Spring关于Redis字符串的运行环境 <bean id="poolConfig" class="redis.c ...
- Juniper交换机维护
Juniper交换机维护操作之一: 1.1 交换机启动和关闭 1.1.1 重新启动 1. 使用具有足够权限的用户名和密码登陆CLI命令行界面. 2. 在提示符下输入下面的命令: use ...
- Java基础学习分享
一.Java介绍 Java是由原Sun公司(现已被甲骨文公司收购)于1991年开发的编程语言,初衷是为智能家电的程序设计提供一个分布式代码系统.为了使整个系统与平台无关,采用了虚拟机器码方式,虚拟机内 ...
- Selenium之当鼠标悬浮时隐藏的元素才出现
在自动化过程中,有些导航按钮只有当鼠标悬浮在登录信息上时,它才能出现.这时候如果想要点击导航按钮直接用selenium的webDriver是无法定位的元素的,因为这些元素是隐藏的,只有鼠标悬浮时才出现 ...
- Java基础之多线程简述
首先,要辨析进程与线程的概念: 进程是程序执行的过程,它持有资源和线程,相对于程序本身而言具有动态性. 线程是系统中最小的执行单元,同一个进程中可能有多个线程,它们共享该进程持有的资源.线程的通信也称 ...
- [hihocoder][Offer收割]编程练习赛49
相似颜色 #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #includ ...
- 揭秘IPHONE X刷脸认证的技术奥秘
苹果最新发布的Iphone X具有一个全新的功能叫做刷脸认证,背后的技术其实是生物密码的更新,通过人脸识别取代了传统的指纹识别,大家肯定对这种新技术非常感兴趣,下面我们通过这篇文章为大家介绍人脸识别的 ...
- WebService 服务接口
天气预报Web服务,数据来源于中国气象局Endpoint :http://www.webxml.com.cn/WebServices/WeatherWebService.asmxDisco :http ...