SQLite3 API使用大全
Python之Sqlite3数据库基本操作
Python之Sqlite3数据库基本操作在⼀些⼩的应⽤中,难免会⽤到数据库,Sqlite数据库以其⼩巧轻便,⽆需安装,移植性好著称,本⽂主要以⼀个简单的⼩例⼦,简述Python在Sqlite数据库⽅⾯的应⽤,仅供学习分享使⽤,如有不⾜之处,还请指正。
涉及知识点1. sqlite3是Python集成的内置类库,提供Python操作sqlite3的相关接⼝。
2. sqlite3.connect(dbfile) 创建数据库连接,返回⼀个连接对象3. conn.cursor() 创建游标对象,通过返回的cursor对象,执⾏相应的SQL语句。
4. cur.execute(sql, *args) 执⾏语句5. mit() 提交执⾏的结果到数据库6. conn.rollback() 回退执⾏的结果7. cur.close() 关闭cursor对象8. conn.close() 关闭连接对象基础操作代码关于Python操作sqlite3的相关核⼼代码,如下所⽰:创建数据表1def createDb():2"""创建db数据表"""3 sql = '''4 create table person (5 id integer primary key autoincrement not null,6 name varchar not null,7 age integer8 )9'''10 executeSql(sql)View Code插⼊语句1def insertData(name, age):2"""插⼊数据"""3 sql = 'insert into person (name,age)values(?,?)'4 executeSql(sql, (name, age))View Codeupdate语句1def updateData(id, name, age):2"""通过ID进⾏修改语句"""3 sql = 'update person set name=?,age =? where id=?'4 executeSql(sql, (name, age, id))View Codedelete语句1def deleteData(id):2"""通过ID删除数据"""3 sql = 'delete from person where id=?'4 executeSql(sql, (id,))View Code上⾯的语句都调⽤统⼀的executeSql⽅法,如下所⽰:1def executeSql(sql, *args):2"""执⾏更新语句"""3 conn = sqlite3.connect(dbfile)4 cur = conn.cursor()5try:6 cur.execute(sql, *args)7 mit()8print('执⾏成功,影响⾏数:', cur.rowcount)9except Exception as e:10 conn.rollback()11print(e)12print('执⾏失败')13finally:14 cur.close()15 conn.close()View Code查询语句(⽆条件查询)1def queryData():2"""查询语句"""3 sql = 'select id,name,age from person '4 executeQuerySql(sql)View Code查询语句(条件查询)1def queryDataById(id):2"""通过id进⾏查询"""3 sql = 'select id,name,age from person where id = ? '4 executeQuerySql(sql, (id,))View Code上⾯的查询语句,都调⽤统⼀的executeQuerySql⽅法,如下所⽰:1def executeQuerySql(sql, *args):2"""执⾏查询语句,可带参数"""3 conn = sqlite3.connect(dbfile)4 cur = conn.cursor()5try:6 cur.execute(sql, *args)7 persons = cur.fetchall()8for p in persons:9print('当前⾏信息如下:')10print(p) # 返回的是⼀个元组tuple11print('查询成功')12except Exception as e:13print(e)14print('查询失败')15finally:16 cur.close()17 conn.close()View Code关于本例⼦的执⾏源码,可通过链接进⾏下载,如下所⽰:Python参数传递⽅式Python的参数传递⼀共有以下五种(位置参数、默认参数、变长参数、关键字参数、命名关键字参数)位置传递,即参数按照定义的位置及顺序进⾏传递,如下所⽰:1# 位置传递实例:2def fun1(a, b, c):3return a + b + c456print(fun1(1, 2, 3))View Code关键字传递,即通过传递的参数的名称进⾏识别。
sqlite3的基本使用以及封装使用
sqlite3的基本使⽤以及封装使⽤1基本使⽤1.打开数据库int sqlite3_open(const char *filename, // 数据库的⽂件路径sqlite3 **ppDb // 数据库实例);2.执⾏任何SQL语句int sqlite3_exec(sqlite3*, // ⼀个打开的数据库实例const char *sql, // 需要执⾏的SQL语句int (*callback)(void*,int,char**,char**), // SQL语句执⾏完毕后的回调void *, // 回调函数的第1个参数char **errmsg // 错误信息);3.检查SQL语句的合法性(查询前的准备)int sqlite3_prepare_v2(sqlite3 *db, // 数据库实例const char *zSql, // 需要检查的SQL语句int nByte, // SQL语句的最⼤字节长度sqlite3_stmt **ppStmt, // sqlite3_stmt实例,⽤来获得数据库数据const char **pzTail);4.查询⼀⾏数据int sqlite3_step(sqlite3_stmt*); // 如果查询到⼀⾏数据,就会返回SQLITE_ROW5.利⽤stmt获得某⼀字段的值(字段的下标从0开始)double sqlite3_column_double(sqlite3_stmt*, int iCol); // 浮点数据int sqlite3_column_int(sqlite3_stmt*, int iCol); // 整型数据sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); // 长整型数据const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); // ⼆进制⽂本数据const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); // 字符串数据1创建⼀个model类,.h⽂件#import <Foundation/Foundation.h>@interface IWStudent : NSObject@property (nonatomic, assign) int ID;@property (nonatomic, copy) NSString *name;@property (nonatomic, assign) int age;@end.m⽂件#import"IWStudent.h"@implementation IWStudent@end2创建⼯具类....封装⽅法.h⽂件#import <Foundation/Foundation.h>@class IWStudent;@interface IWStudentTool : NSObject/*** 添加学⽣** @param student 需要添加的学⽣*/+ (BOOL)addStudent:(IWStudent *)student;/*** 获得所有的学⽣** @return 数组中装着都是IWStudent模型*/+ (NSArray *)students;/*** 根据搜索条件获得对应的学⽣** @param condition 搜索条件*/+ (NSArray *)studentsWithCondition:(NSString *)condition;@end.m⽂件#import"IWStudentTool.h"#import"IWStudent.h"#import <sqlite3.h>@implementation IWStudentTool// static的作⽤:能保证_db这个变量只被IWStudentTool.m直接访问static sqlite3 *_db;+ (void)initialize{// 0.获得沙盒中的数据库⽂件名NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"]; // 1.创建(打开)数据库(如果数据库⽂件不存在,会⾃动创建)int result = sqlite3_open(filename.UTF8String, &_db);if (result == SQLITE_OK) {NSLog(@"成功打开数据库");// 2.创表const char *sql = "create table if not exists t_student (id integer primary key autoincrement, name text, age integer);";char *errorMesg = NULL;int result = sqlite3_exec(_db, sql, NULL, NULL, &errorMesg);if (result == SQLITE_OK) {NSLog(@"成功创建t_student表");} else {NSLog(@"创建t_student表失败:%s", errorMesg);}} else {NSLog(@"打开数据库失败");}}+ (BOOL)addStudent:(IWStudent *)student{NSString *sql = [NSString stringWithFormat:@"insert into t_student (name, age) values('%@', %d);", , student.age];char *errorMesg = NULL;int result = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errorMesg);return result == SQLITE_OK;}+ (NSArray *)students{// 0.定义数组NSMutableArray *students = nil;// 1.定义sql语句const char *sql = "select id, name, age from t_student;";// 2.定义⼀个stmt存放结果集sqlite3_stmt *stmt = NULL;// 3.检测SQL语句的合法性int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);if (result == SQLITE_OK) {NSLog(@"查询语句是合法的");students = [NSMutableArray array];// 4.执⾏SQL语句,从结果集中取出数据while (sqlite3_step(stmt) == SQLITE_ROW) { // 真的查询到⼀⾏数据// 获得这⾏对应的数据IWStudent *student = [[IWStudent alloc] init];// 获得第0列的idstudent.ID = sqlite3_column_int(stmt, 0);// 获得第1列的nameconst unsigned char *sname = sqlite3_column_text(stmt, 1); = [NSString stringWithUTF8String:(const char *)sname];// 获得第2列的agestudent.age = sqlite3_column_int(stmt, 2);// 添加到数组[students addObject:student];}} else {NSLog(@"查询语句⾮合法");}return students;}+ (NSArray *)studentsWithCondition:(NSString *)condition{// 0.定义数组NSMutableArray *students = nil;// 1.定义sql语句const char *sql = "select id, name, age from t_student where name like ?;";// 2.定义⼀个stmt存放结果集sqlite3_stmt *stmt = NULL;// 3.检测SQL语句的合法性int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);if (result == SQLITE_OK) {NSLog(@"查询语句是合法的");students = [NSMutableArray array];// 填补占位符的内容NSString *newCondition = [NSString stringWithFormat:@"%%%@%%", condition]; // NSLog(@"%@", newCondition);sqlite3_bind_text(stmt, 1, newCondition.UTF8String, -1, NULL);// 4.执⾏SQL语句,从结果集中取出数据while (sqlite3_step(stmt) == SQLITE_ROW) { // 真的查询到⼀⾏数据// 获得这⾏对应的数据IWStudent *student = [[IWStudent alloc] init];// 获得第0列的idstudent.ID = sqlite3_column_int(stmt, 0);// 获得第1列的nameconst unsigned char *sname = sqlite3_column_text(stmt, 1); = [NSString stringWithUTF8String:(const char *)sname];// 获得第2列的agestudent.age = sqlite3_column_int(stmt, 2);// 添加到数组[students addObject:student];}} else {NSLog(@"查询语句⾮合法");}return students;}@end2.封装为⼯具类。
SQLiteAPI接口学习总结
SQLiteAPI接口学习总结库初始化int sqlite3_initialize(void);int sqlite3_shutdown(void);在使用SQlite Library之前,首先应该调用sqlite3_initialize函数,该函数将分配资源,初始化一些必要的数据结构。
与之配合使用的另一个函数是sqlite3_shutdown,该函数用来释放由sqlite3_initialize分配的资源。
不过在很多客户的应用程序中通常直接调用sqlite3_open 或者另一些主要的API函数,这些函数会自动初始化SQlite library(如果它还没有被初始化的话)。
不过还是推荐客户应用程序显示调用这两个APIs函数来完成SQlite library的初始化和最后的清理工作。
打开数据库int sqlite3_open(const char *filename, /* Database filename (UTF-8) */sqlite3 **ppDb /* OUT: SQLite db handle */);int sqlite3_open16(const void *filename, /* Database filename (UTF-16) */sqlite3 **ppDb /* OUT: SQLite db handle */);int sqlite3_open_v2(const char *filename, /* Database filename (UTF-8) */sqlite3 **ppDb, /* OUT: SQLite db handle */int flags, /* Flags */const char *zVfs /* Name of VFS module to use */);在执行任何SQL语句之前,必须首先连接到一个数据库,也就是打开或者新建一个SQlite3数据库文件。
数据库sqlite3的使用
sudo dpkg -i *.deb
2-- 创建数据库
sqlite3 stu.db
3-- sqlite命令
系统命令 以 "."开头
普通命令 ,以";"结束
.schema 查看表的结构
功能:获取错误信息描述
(3)int sqlite3_close(sqlite3* db);
功能:关闭一个数据库
(4)int sqlite3_exec(
sqlite3* db, /* An open database */
5-- sqlite3 API 函数口
(1)int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
功能:打开一个数据库
参数:filename 数据库名字
ppdb 操作数据库的指针,句柄。
返回值:成功 SQLITE_OK , 失败 error_code
(2)const char *sqlite3_errmsg(sqlite3* db);
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void * arg, /* 1st argument to callback */
char **errmsg /* Error msg written here */
sqlite3用法总结
SQLITE3使用总结2009-01-21 17:57作者:董淳光 dcg1981@2007年6月11日星期一前序:Sqlite3 的确很好用。
小巧、速度快。
但是因为非微软的产品,帮助文档总觉得不够。
这些天再次sqlite3 的研究列出来,以备忘记。
这里要注明,我是一个跨平台专注者,并不喜欢只用 windows 平台。
我以前的工作就是为 unix 然没有验证,但是我已尽量不使用任何 windows 的东西,只使用标准 C 或标准C++。
但是,我没编译,因此下面的叙述如果不正确,则留待以后修改。
下面我的代码仍然用 VC 编写,因为我觉得VC是一个很不错的IDE,可以加快代码编写速度(例如译环境,是VC2003。
如果读者觉得自己习惯于 unix 下用 vi 编写代码速度较快,可以不用管我因为我用的是标准 C 或 C++ 。
不会给任何人带来不便。
一、版本从网站可下载到最新的 sqlite 代码和编译版本。
我写此文章时,最新代码是很久没有去下载 sqlite 新代码,因此也不知道 sqlite 变化这么大。
以前很多文件,现在全部合独用此文件,是挺好的,省去拷贝一堆文件还担心有没有遗漏。
但是也带来一个问题:此文件太大机器都慢下来了。
如果不需要改它代码,也就不需要打开 sqlite3.c 文件,机器不会慢。
但是,成加密功能,那时候就比较痛苦了。
如果个人水平较高,建议用些简单的编辑器来编辑,例如 Ult二、基本编译这个不想多说了,在 VC 里新建 dos 控制台空白工程,把 sqlite3.c 和 sqlite3.h 添加到工程面写:extern "C"{#include "./sqlite3.h"};int main( int , char** ){return 0;}为什么要extern “C” ?如果问这个问题,我不想说太多,这是C++的基础。
要在 C++ 里使用一段括起来。
SQLite3和SQLite数据库的操作
SQLite3和SQLite数据库的操作1.格式化sqlite3的显示:sqlite>.header onsqlite>.mode column (设置输出模式,column 左对齐的列;line 每行一个值)sqlite>.timer onsqlite>.width column1_width column2_width ... (为 "column" 模式设置列宽度。
)2.SQLite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义3.sqlite语句要以分号";"结尾4.$sqlite3 DatabaseName.db 创建一个新的数据库5.sqlite>.databases 查看数据库列表6.$sqlite3 testDB.db .dump > testDB.sql (将整个 testDB.db 数据库的内容转换为SQLite 的语句,并将其转储到ASCII 文本文件testDB.sql 中)7.$sqlite3 testDB.db < testDB.sql (将sql文件中的SQLite语句还原成数据库)8.sqlite> ATTACH DATABASE 'DatabaseName' As 'Alias-Name';(数据库DatabaseName尚未被创建,上面的命令将创建一个数据库DatabaseName,并且数据库名为Alias-Name;如果数据库已存在,则把数据库文件名称与逻辑数据库 'Alias-Name' 绑定在一起。
) (数据库名称 main 和 temp 被保留用于主数据库和存储临时表及其他临时数据对象的数据库。
这两个数据库名称可用于每个数据库连接,且不应该被用于附加,否则将得到一个警告消息)9.sqlite> DETACH DATABASE 'Alias-Name'; 把命名数据库从一个数据库连接分离和游离出来,连接是之前使用ATTACH 语句附加的。
sqlite3的操作方法及应用
数据库的操作我们在这个项目中使用的是SQLITE3数据库软件。
通过使用SQLITE3进行创建数据库,创建表,插入记录,查询记录,更新记录,关闭数据库等操作来实现将相应的数据存入数据库中。
1.打开数据库,创建表1.1 sqlite * db; 定义一个sqlite * 的变量sqlite3_open(“./link.db”,&db);在当前目录下打开一个名为link.db的数据库,若是没有则在当前目录下创建一个名为link.db的数据库。
1.2 sql = "create table weblink(id integer primary key,domain text,page text,fromdomain text,status integer);"在已打开的数据库中创建一个名weblink的表。
表的属性如下:id integer primary key :ID号(表中黙认包含的)domain text :域名page text :子网页fromdomain text :源域名status integer :状态标志1.3 sqlite3_exec(db,sql,NULL,NULL,NULL);执行一条sql 语句的函数。
函数原型:int sqlite3_exec(sqlite3*, const char *sql, sqlite3_callback, void *, char **errmsg )第1个参数是前面open函数得到的指针。
说了是关键数据结构。
第2个参数const char *sql 是一条sql 语句,以\0结尾。
第3个参数sqlite3_callback 是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。
(什么是回调函数,自己找别的资料学习)第4个参数void * 是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。
sqlite3 api sqlite3_busy_timeout 与 sqlite3_busy_handler 的使用与区别
但是sqlite3中并未对出现sqlite_busy后重试做默认的处理,而是提供了一种处理机制busy handle。有两个api可以创建busy handle。
回调函数返回非0,数据库会重试当前操作,返回0则当前操作返回SQLITE_BUSY
int sqlite3_busy_timeout(sqlite3*, int ms);
定义一个毫秒数,当未到达该毫秒数时,sqlite会sleep并重试当前操作
如果超过ms毫秒,仍然申请不到需要的锁,当前操作返回sqlite_BUSY
当ms<=0时,清除busy handle,申请不到锁直接返回
从上面可以得知,一个函数可以控制超时的次数,一个函数可以控制超时的时间
但对于一个连接来说,只能有一个busy handle,所以两个函数会相互影响,设置一个的同时会清除另一个,应根据需要来选择。
int sqlite3_busy_handler(sqlite3 *, int (*)(void *, int), void *)
函ห้องสมุดไป่ตู้可以定义一个回调函数,当出现数据库忙时,sqlite会调用该函数
当回调函数为NULL时,清除busy handle,申请不到锁直接返回
回调函数的第二个函数会被传递为该由此次忙事件调用该函数的次数
sqlite3api编程手册
sqlite3api编程手册SQLite是一个C语言库,提供轻量级磁盘文件数据库。
它不需要一个单独的服务器进程或操作系统。
SQLite可以在应用程序中直接嵌入使用,并且提供了一个API用于访问和操作数据库。
在Python中,可以使用sqlite3模块来访问SQLite数据库。
这个模块提供了与SQLite C API相对应的Python API。
下面是一个简单的示例,展示如何使用sqlite3模块创建一个SQLite数据库,创建一个表,插入一些数据,并查询数据:```pythonimport sqlite3# 连接到SQLite数据库(如果不存在则创建)conn = sqlite3.connect('example.db')# 创建一个游标对象cursor = conn.cursor()# 创建一个表cursor.execute('''CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')# 插入一些数据cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 25))cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Bob', 30))cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Charlie', 35))# 提交事务mit()# 查询数据cursor.execute("SELECT * FROM users")rows = cursor.fetchall()for row in rows:print(row)# 关闭连接conn.close()```在这个示例中,我们首先连接到SQLite数据库(如果不存在则创建)。
9.C数据库编程-SQLite3 API
2、要执行的sql语句【IN】 3、回调函数 【IN】 4、传递给回调函数的参数地址【IN】 5、返回的错误信息【out】
– 返回值:错误代码,参见SQLite错误代码 – 使用说明:
• typedef int (*sqlite3_callback)(void*,int,char**, char**);
• 返回SQLITE3_ROW表示准备好一行的数据。 • 返回SQLITE3_DONE表示执行完成,无数据。 • 如果只是执行SQL,则该函数只调用一次即可。
行数据存取
• 函数原型:
int sqlite3_column_int(sqlite_stmt *pstmt,int col)
– 功能:获取某行数据中的各列值 – 参数:1、pstmt-statement对象【IN】 2、col-列位置,从0开始编号 – 返回值:错误代码,参见SQLite错误代码 – 使用说明: – 相关函数:
SQLite事务定义
• 自动事务
– 每执行一条命令自动创建一个事务,命令结束自 动结束事务
• 手动事务
– 命令格式: BEGIN [ DEFERRED | IMMEDIATE | EXCLUSIVE ] [TRANSACTION [name]] – 说明:
– 功能:预编译和解析SQL文本,准备执行 – 参数:
1、数据库连接指针【IN】 2、sql语句【IN】 3、sql语句最大字符数【IN】 4、处理后语句statement【out】 5、返回sql语句未使用部分的指针【out】
– 返回值:错误代码,参见SQLite错误代码 – 使用说明: //typedef struct sqlite3_stmt sqlite3_stmt; sqlite3_stmt *pstmt; sqlite3_prepare(db,”select * from tbl_test”,60,&pstmt,0);
sqlite3数据库命令及函数接口
sqlite常用命令及编程接口介绍作者:冯利美,华清远见嵌入式学院讲师。
一、常用命令介绍在终端下运行sqlite3 <*.db>,出现如下提示符:SQLite version 3.7.2Enter “.help” for instructionsEnter SQL statements terminated with a “;”sqlite><*.db> 是要打开的数据库文件。
若该文件不存在,则自动创建。
显示所有命令sqlite> .help退出sqlite3sqlite>.quit显示当前打开的数据库文件sqlite>.database显示数据库中所有表名sqlite>.tables查看表的结构sqlite>.schema <table_name>/*******************************************/以下为SQL命令,每个命令以;结束创建新表>create table <table_name> (f1 type1, f2 type2,…);sqlite> create table student(no integer primary key, name text, score real);删除表sqlite>drop table <table_name>sqlite>drop table student查询表中所有记录sqlite>select * from <table_name>;按指定条件查询表中记录sqlite>select * from <table_name> where <expression>;sqlite> select * from studentsqlite> select * from student where name=’zhao’sqlite> select * from student where name=’zhao’ and score >=95sqlite> select count(*) from student where score>90向表中添加新记录sqlite>insert into <table_name> values (value1, value2,…);sqlite> insert into student values(1, ‘zhao’, 92);按指定条件删除表中记录sqlite>delete from <table_name> where <expression>sqlite> delete from student where score<60;更新表中记录sqlit e>update <table_name> set <f1=value1>, <f2=value2>… where <expression>; sqlite> update student set score=0;sqlite> update student set name=’sun’ where no=3;在表中添加字段sqlite>alter table <table> add column <field> <type>;sqlite> alter table student add column gender integer default 0;在表中删除字段Sqlite中不允许删除字段,可以通过下面步骤达到同样的效果sqlite> create table stu as select no, name, score from studentsqlite> drop table studentsqlite> alter table stu rename to student二、常用编程接口介绍1) int sqlite3_open(char *path, sqlite3 **db);功能:打开sqlite数据库path:数据库文件路径db:指向sqlite句柄的指针返回值:成功返回0,失败返回错误码(非零值)2) int sqlite3_close(sqlite3 *db);功能:关闭sqlite数据库返回值:成功返回0,失败返回错误码3) const char *sqlite3_errmg(sqlite3 *db);返回值:返回错误信息4) typedef int (*sqlite3_callback)(void *, int, char **, char **);int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback, void *, char **errmsg);功能:执行SQL操作db:数据库句柄sql:SQL语句callback:回调函数errmsg:错误信息指针的地址返回值:成功返回0,失败返回错误码不需要回调函数的情况:有关插入或更新的sql语句。
sqlite3open的用法
sqlite3open的用法sqlite3open是SQLite的一个API函数,用于打开一个SQLite数据库文件。
它的用法如下:1. 首先需要定义一个sqlite3对象:sqlite3 *db;。
2.打开一个数据库文件:int rc = sqlite3_open("your_database_file_name.db", &db);。
3. 如果打开成功,该函数将返回0,否则返回一个错误代码。
可以使用sqlite3_errmsg函数获取错误信息:if (rc != SQLITE_OK) 。
fprintf(stderr, "Cannot open database: %s\n",sqlite3_errmsg(db));。
sqlite3_close(db);。
return 1;。
}。
4.打开数据库后,可以执行SQL语句来操作数据库。
例如:sqlite3_exec(db, "CREATE TABLE my_table (id INTEGER, name TEXT)", NULL, NULL, NULL);。
5.最后需要关闭数据库:sqlite3_close(db);。
完整的示例代码:#include <stdio.h>。
#include <sqlite3.h>。
int main(int argc, char **argv)。
sqlite3 *db;。
int rc = sqlite3_open("test.db", &db);。
if (rc != SQLITE_OK) 。
fprintf(stderr, "Cannot open database: %s\n",sqlite3_errmsg(db));。
sqlite3_close(db);。
return 1;。
}。
sqlite3_exec(db, "CREATE TABLE my_table (id INTEGER, name TEXT)", NULL, NULL, NULL);。
sqlite3使用
sqlite3使用SQLite3 是一种嵌入式的关系型数据库管理系统,它是一种轻量级的数据库引擎,以其简单易用和高性能备受开发者欢迎。
下面将详细介绍SQLite3 的使用。
1. 安装 SQLite32. 启动 SQLite3在终端或命令行中输入命令 `sqlite3` 即可启动 SQLite3、此时,将会进入 SQLite3 的命令行终端界面,可以直接在其中执行 SQL 命令。
3.创建数据库和表在 SQLite3 命令行终端中,可以使用 `CREATE DATABASE` 命令创建数据库,并使用 `CREATE TABLE` 命令创建表。
例如:``````上述代码分别创建了一个名为 mydb 的数据库,然后选择使用该数据库,并在该数据库中创建了一个名为 users 的表,该表有三个列:id、name 和 age。
4.插入数据使用`INSERTINTO`命令可以向表中插入数据。
例如:``````5.查询数据使用`SELECT`命令可以从表中查询数据。
例如:``````以上命令将查询并返回 users 表中的所有数据。
6.更新数据使用`UPDATE`命令可以更新表中的数据。
例如:``````以上命令将把 id 为 1 的用户的年龄修改为 30。
7.删除数据使用`DELETE`命令可以删除表中的数据。
``````以上命令将删除 id 为 2 的用户数据。
8.导入和导出数据可以使用 `.import` 命令从外部文件导入数据,并使用 `.output` 命令将查询结果导出到外部文件。
9.数据库操作除了上述基本的增删改查操作外,SQLite3 还支持其他更高级的数据库操作,比如事务操作、索引、约束等。
10. 结束 SQLite3可以使用 `.quit` 命令或按下 Ctrl + D 快捷键结束 SQLite3 的命令行终端。
结束后,你将会退出 SQLite3 并返回到命令行界面。
总结:SQLite3 是简单而强大的关系型数据库管理系统,特点是性能高效、易用、无需额外的服务器进程和配置。
SQLite3-API
#define SQLITE_PERM 3 /* Access permission denied */
#define SQLITE_ABORT 4 /* Callback routine requested an abort */
由于对于C语言应该用什么数据类型来存放UTF-16编码的字符串并没有一致的规范. 因此SQLite使用了普通的void* 类型来指向UTF-16编码的字符串. 客户端使用过程中可以把void*映射成适合他们的系统的任何数据类型.
2.0 C/C++ 接口
SQLite 3.0一共有83个API函数,此外还有一些数据结构和预定义(#defines). (完整的API介绍请参看另一份文档.) 不过你们可以放心,这些接口使用起来不会像它的数量所暗示的那么复杂. 最简单的程序仍然使用三个函数就可以完成: sqlite3_open(), sqlite3_exec(), 和 sqlite3_close(). 要是想更好的控制数据库引擎的执行,可以使用提供的sqlite3_prepare()函数把SQL语句编译成字节码,然后在使用sqlite3_step()函数来执行编译后的字节码. 以sqlite3_column_开头的一组API函数用来获取查询结果集中的信息. 许多接口函数都是成对出现的,同时有UTF-8和UTF-16两个版本. 并且提供了一组函数用来执行用户自定义的SQL函数和文本排序函数.
SQLite3的错误代码相比SQLite2没有任何的改变,它们分别是:
#define SQLITE_OK 0 /* Successful result */
sqlite入门基础:sqlite3_open,sqlite3_exec,slite3_close
sqlite入门基础:sqlite3_open,sqlite3_exec,slite3_close打开数据库链接sqlite3_open用法原型:用这个函数开始数据库操作。
需要传入两个参数,一是数据库文件名,比如:E:/test.db。
文件名不需要一定存在,如果此文件不存在,sqlite会自动建立它。
如果它存在,就尝试把它当数据库文件来打开。
二是sqlite3**,即前面提到的关键数据结构。
这个结构底层细节如何,你不要管它。
函数返回值表示操作是否正确,如果是SQLITE_OK则表示操作正常。
相关的返回值sqlite定义了一些宏。
具体这些宏的含义可以参考sqlite3.h 文件。
里面有详细定义(顺便说一下,sqlite3 的代码注释率自称是非常高的,实际上也的确很高。
只要你会看英文,sqlite 可以让你学到不少东西)。
关闭数据库链接sqlite3_close用法原型:ppDb为刚才使用sqlite3_open打开的数据库链接执行sql操作sqlite3_exec用法原型:这就是执行一条sql 语句的函数。
第1个参数不再说了,是前面open函数得到的指针。
说了是关键数据结构。
第2个参数constchar*sql是一条sql 语句,以\0结尾。
第3个参数sqlite3_callback 是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。
第4个参数void*是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。
等下我们再看回调函数的写法,以及这个参数的使用。
第5个参数char** errmsg 是错误信息。
注意是指针的指针。
sqlite3里面有很多固定的错误信息。
执行sqlite3_exec 之后,执行失败时可以查阅这个指针(直接cout<<errmsg得到一串字符串信息,这串信息告诉你错在什么地方。
sqlite3命令方式操作大全
sqlite3命令方式操作大全SQLite3命令操作大全SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令。
本文档提供一个样使用sqlite3的简要说明.一.qlite3一些常用Sql语句操作创建表: create table表名(元素名类型,…);删除表: drop table表名;插入数据: insert into表名values(, , ,) ;创建索引: create [unique] index索引名on 表名(col….);删除索引:drop index索引名(索引是不可更改的,想更改必须删除重新建)删除数据: delete from 表名;更新数据: update表名set字段=’修改后的内容’ where 条件;增加一个列: Alter table表名add column字段数据类型;选择查询:select字段(以”,”隔开) from 表名where 条件;日期和时间: S elect datetime('now')日期: select date('now');时间: select time('now');总数:select count(*) from table1;求和:select sum(field1) from table1;平均:select avg(field1) from table1;最大:select max(field1) from table1;最小:select min(field1) from table1;排序:select 字段from table1 order by 字段(desc或asc);(降序或升序)分组:select 字段from table1 group by 字段,字段…;限制输出:select 字段from table1 limit x offset y;=select字段from table1 limit y , x;(备注:跳过y行,取x行数据)(操作仍待完善)…SQLite支持哪些数据类型些?NULL值为NULLINTEGER值为带符号的整型,根据类别用1,2,3,4,6,8字节存储REAL 值为浮点型,8字节存储TEXT值为text字符串,使用数据库编码(UTF-8, UTF-16BE or UTF-16-LE)存储BLOB值为二进制数据,具体看实际输入但实际上,sqlite3也接受如下的数据类型:smallint 16 位元的整数interger 32 位元的整数decimal(p,s) p 精确值和s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点後有几位数。
sqlite3的使用
sqlite3的使用
SQLite是一个开源的嵌入式关系型数据库,它支持标准的SQL语法和常见的数据库操作。
下面是SQLite的一些基本使用方法:
1. 安装SQLite:下载适合你操作系统的SQLite安装包,并按照官方提供的安装说明进行安装。
2. 连接数据库:使用命令行或者GUI工具打开SQLite数据库,可以使用以下命令连接到一个数据库文件。
3. 创建表格:在SQLite中,可以使用`CREATE TABLE`语句创建新的表格。
例如,创建一个名为`users`的表格,包含`id`和`name`两个列。
4. 插入数据:使用`INSERT INTO`语句向表格中插入数据。
例如,向`users`表格中插入一条数据。
5. 查询数据:使用`SELECT`语句从表格中查询数据。
例如,查询`users`表格中的所有数据。
6. 更新数据:使用`UPDATE`语句更新表格中的数据。
例如,更新`users`表格中`id`为1的记录的`name`列。
7. 删除数据:使用`DELETE FROM`语句删除表格中的数据。
例如,删除`users`表格中`id`为1的记录。
这只是SQLite的一些基本用法示例,SQLite还支持更复杂的查询、索引、事务等功能。
你可以参考SQLite官方文档或者其他相关资源来深入学习和了解SQLite的更多用法。
SQLite3C语言API入门
SQLite3C语言API入门https:///shujuliu818/article/details/53611479 下载SQLite3:/download.html我们下载sqlite源码包,只需要其中的sqlite3.c、sqlite.h即可。
最简单的一个创建表操作:1.#include <stdio.h>2.#include "sqlite3.h"3.4.int main(int argc,char *argv[]){5.const char *sql_create_table="create table t(id int primary key,msg varchar(128))";6.char *errmsg = 0;7.int ret = 0;8.9.sqlite3 *db = 0;10.ret = sqlite3_open("./sqlite3-demo.db",&db);11.if(ret != SQLITE_OK){12.fprintf(stderr,"Cannot open db: %s\n",sqlite3_errmsg(db));13.return 1;14.}15.printf("Open database\n");16.17.ret = sqlite3_exec(db,sql_create_table,NULL,NULL,&errmsg);18.if(ret != SQLITE_OK){19.fprintf(stderr,"create table fail: %s\n",errmsg);20.}21.sqlite3_free(errmsg);22.sqlite3_close(db);23.24.printf("Close database\n");25.26.return 0;27.}在这个操作中我们执行了如下操作:1.打开数据库;2.执行SQL语句;3.关闭数据库;当然这中间会有一些状态的判断以及内存指针的释放等。
sqlite3数据库详细使用方法
sqlite3数据库详细使用方法使用的过程根据使用的函数大致分为如下几个过程:sqlite3_open()sqlite3_prepare()sqlite3_step()sqlite3_column()sqlite3_finalize()sqlite3_close()这几个过程是概念上的说法,而不完全是程序运行的过程,如sqlite3_column()表示的是对查询获得一行里面的数据的列的各个操作统称,实际上在sqlite中并不存在这个函数。
1. sqlite3_open():打开数据库在操作数据库之前,首先要打开数据库。
这个函数打开一个sqlite 数据库文件的连接并且返回一个数据库连接对象。
这个操作同时程序中的第一个调用的sqlite函数,同时也是其他sqlite api的先决条件。
许多的sqlite接口函数都需要一个数据库连接对象的指针作为它们的第一个参数。
函数定义int sqlite3_open(const char *filename, /* Database filename (UTF-8) */sqlite3 **ppDb /* OUT: SQLite db handle */);int sqlite3_open16(const void *filename, /* Database filename (UTF-16) */sqlite3 **ppDb /* OUT: SQLite db handle */);int sqlite3_open_v2(const char *filename, /* Database filename (UTF-8) */sqlite3 **ppDb, /* OUT: SQLite db handle */int flags, /* Flags */const char *zVfs /* Name of VFS module to use */);说明:假如这个要被打开的数据文件不存在,则一个同名的数据库文件将被创建。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQLite3API使用大全E-mail:18918737 (at) qq dot com,智有不明前序: (1)一、版本 (1)二、基本编译 (2)三、 SQLITE操作入门 (2)(1)基本流程 (2)(2) SQL语句操作 (4)(3)操作二进制 (8)(4)事务处理 (10)四、给数据库加密 (10)五、后记 (25)前序:Sqlite3 的确很好用。
小巧、速度快。
但是因为非微软的产品,帮助文档总觉得不够。
这些天再次研究它,又有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记。
这里要注明,我是一个跨平台专注者,并不喜欢只用 windows 平台。
我以前的工作就是为unix 平台写代码。
下面我所写的东西,虽然没有验证,但是我已尽量不使用任何 windows 的东西,只使用标准 C 或标准C++。
但是,我没有尝试过在别的系统、别的编译器下编译,因此下面的叙述如果不正确,则留待以后修改。
下面我的代码仍然用 VC 编写,因为我觉得VC是一个很不错的IDE,可以加快代码编写速度(例如配合 Vassist )。
下面我所说的编译环境,是VC2003。
如果读者觉得自己习惯于 unix 下用 vi 编写代码速度较快,可以不用管我的说明,只需要符合自己习惯即可,因为我用的是标准 C 或 C++ 。
不会给任何人带来不便。
一、版本从网站可下载到最新的 sqlite 代码和编译版本。
我写此文章时,最新代码是 3.3.17 版本。
很久没有去下载 sqlite 新代码,因此也不知道 sqlite 变化这么大。
以前很多文件,现在全部合并成一个 sqlite3.c 文件。
如果单独用此文件,是挺好的,省去拷贝一堆文件还担心有没有遗漏。
但是也带来一个问题:此文件太大,快接近7万行代码,VC开它整个机器都慢下来了。
如果不需要改它代码,也就不需要打开 sqlite3.c 文件,机器不会慢。
但是,下面我要写通过修改 sqlite 代码完成加密功能,那时候就比较痛苦了。
如果个人水平较高,建议用些简单的编辑器来编辑,例如 UltraEdit 或 Notepad 。
速度会快很多。
二、基本编译这个不想多说了,在 VC 里新建 dos 控制台空白工程,把 sqlite3.c 和 sqlite3.h 添加到工程,再新建一个 main.cpp 文件。
在里面写:extern "C"{#include "./sqlite3.h"};int main( int , char** ){return 0;}为什么要extern “C” ?如果问这个问题,我不想说太多,这是C++的基础。
要在 C++ 里使用一段 C 的代码,必须要用extern “C” 括起来。
C++跟 C虽然语法上有重叠,但是它们是两个不同的东西,内存里的布局是完全不同的,在C++编译器里不用extern “C”括起C代码,会导致编译器不知道该如何为 C 代码描述内存布局。
可能在 sqlite3.c 里人家已经把整段代码都extern “C” 括起来了,但是你遇到一个 .c 文件就自觉的再括一次,也没什么不好。
基本工程就这样建立起来了。
编译,可以通过。
但是有一堆的 warning。
可以不管它。
三、 SQLITE操作入门sqlite提供的是一些C函数接口,你可以用这些函数操作数据库。
通过使用这些接口,传递一些标准 sql 语句(以 char * 类型)给 sqlite 函数,sqlite 就会为你操作数据库。
sqlite 跟MS的access一样是文件型数据库,就是说,一个数据库就是一个文件,此数据库里可以建立很多的表,可以建立索引、触发器等等,但是,它实际上得到的就是一个文件。
备份这个文件就备份了整个数据库。
sqlite 不需要任何数据库引擎,这意味着如果你需要 sqlite 来保存一些用户数据,甚至都不需要安装数据库(如果你做个小软件还要求人家必须装了sqlserver 才能运行,那也太黑心了)。
下面开始介绍数据库基本操作。
(1)基本流程i.1 关键数据结构sqlite 里最常用到的是 sqlite3 * 类型。
从数据库打开开始,sqlite就要为这个类型准备好内存,直到数据库关闭,整个过程都需要用到这个类型。
当数据库打开时开始,这个类型的变量就代表了你要操作的数据库。
下面再详细介绍。
i.2 打开数据库int sqlite3_open( 文件名, sqlite3 ** );用这个函数开始数据库操作。
需要传入两个参数,一是数据库文件名,比如:c://DongChunGuang_Database.db。
文件名不需要一定存在,如果此文件不存在,sqlite 会自动建立它。
如果它存在,就尝试把它当数据库文件来打开。
sqlite3 ** 参数即前面提到的关键数据结构。
这个结构底层细节如何,你不要关它。
函数返回值表示操作是否正确,如果是 SQLITE_OK 则表示操作正常。
相关的返回值sqlite 定义了一些宏。
具体这些宏的含义可以参考 sqlite3.h 文件。
里面有详细定义(顺便说一下,sqlite3 的代码注释率自称是非常高的,实际上也的确很高。
只要你会看英文,sqlite 可以让你学到不少东西)。
下面介绍关闭数据库后,再给一段参考代码。
i.3 关闭数据库int sqlite3_close(sqlite3 *);前面如果用 sqlite3_open 开启了一个数据库,结尾时不要忘了用这个函数关闭数据库。
下面给段简单的代码:extern "C"{#include "./sqlite3.h"};int main( int , char** ){sqlite3 * db = NULL; //声明sqlite关键结构指针int result;//打开数据库//需要传入 db 这个指针的指针,因为 sqlite3_open 函数要为这个指针分配内存,还要让db指针指向这个内存区result = sqlite3_open( “c://Dcg_database.db”, &db );if( result != SQLITE_OK ){//数据库打开失败return -1;}//数据库操作代码//…//数据库打开成功//关闭数据库sqlite3_close( db );return 0;}这就是一次数据库操作过程。
(2) SQL语句操作本节介绍如何用sqlite 执行标准 sql 语法。
i.1 执行sql语句int sqlite3_exec(sqlite3*, const char *sql, sqlite3_callback, void *, char **errmsg );这就是执行一条 sql 语句的函数。
第1个参数不再说了,是前面open函数得到的指针。
说了是关键数据结构。
第2个参数const char *sql 是一条 sql 语句,以/0结尾。
第3个参数sqlite3_callback 是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。
(什么是回调函数,自己找别的资料学习)第4个参数void * 是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。
等下我们再看回调函数的写法,以及这个参数的使用。
第5个参数char ** errmsg 是错误信息。
注意是指针的指针。
sqlite3里面有很多固定的错误信息。
执行 sqlite3_exec 之后,执行失败时可以查阅这个指针(直接printf(“%s/n”,errmsg))得到一串字符串信息,这串信息告诉你错在什么地方。
sqlite3_exec函数通过修改你传入的指针的指针,把你提供的指针指向错误提示信息,这样sqlite3_exec函数外面就可以通过这个 char*得到具体错误提示。
说明:通常,sqlite3_callback 和它后面的 void * 这两个位置都可以填 NULL。
填NULL 表示你不需要回调。
比如你做 insert 操作,做 delete 操作,就没有必要使用回调。
而当你做 select 时,就要使用回调,因为 sqlite3 把数据查出来,得通过回调告诉你查出了什么数据。
i.2 exec 的回调typedef int (*sqlite3_callback)(void*,int,char**, char**);你的回调函数必须定义成上面这个函数的类型。
下面给个简单的例子://sqlite3的回调函数// sqlite 每查到一条记录,就调用一次这个回调int LoadMyInfo( void * para, int n_column, char ** column_value, char ** column_name ){//para是你在 sqlite3_exec 里传入的 void * 参数//通过para参数,你可以传入一些特殊的指针(比如类指针、结构指针),然后在这里面强制转换成对应的类型(这里面是void*类型,必须强制转换成你的类型才可用)。
然后操作这些数据//n_column是这一条记录有多少个字段 (即这条记录有多少列)// char ** column_value 是个关键值,查出来的数据都保存在这里,它实际上是个1维数组(不要以为是2维数组),每一个元素都是一个 char * 值,是一个字段内容(用字符串来表示,以/0结尾)//char ** column_name 跟 column_value是对应的,表示这个字段的字段名称//这里,我不使用 para 参数。
忽略它的存在.int i;printf( “记录包含 %d 个字段/n”, n_column );for( i = 0 ; i < n_column; i ++ ){printf( “字段名:%s ß> 字段值:%s/n”, column_name[i], column_value[i] );}printf( “------------------/n“ );return 0;}int main( int , char ** ){sqlite3 * db;int result;char * errmsg = NULL;result = sqlite3_open( “c://Dcg_database.db”, &db );if( result != SQLITE_OK ){//数据库打开失败return -1;}//数据库操作代码//创建一个测试表,表名叫 MyTable_1,有2个字段: ID 和 name。