赞
踩
我们从SQLi官网下载页面 , https://www.sqlite.org/download.html 从源代码区下载 sqlite-autoconf-*.tar.gz。
然后在 Linux 下安装sqlite3
第一步:安装
第二步: 解压
第三步: 进入蓝色文件夹
第四步: ./configure(配置安装)
第五步: make (编译)
第六步: sudo make install (开始安装)
第七步: 安装成功
sqlite3_open()
函数原型:
- #include <sqlite3.h>
-
- int sqlite3_open(const char *dbname,sqlite3 **db)
- 函数说明:用来打开一个数据库
- 参数说明: 第一个参数dbname是数据库的名称;
- 第二个参数db是用于保存打开的数据库文件dbname的信息。
函数原型:
- #include <sqlite3.h>
-
- int sqlite3_close(sqlite3 *db)
- 函数说明:用来关闭一个数据库。
- 参数说明:db需要关闭的数据库文件。
函数原型:
- #include <sqlite3.h>
-
- int sqlite_exec(sqlite *db, const char *sql, int (*callback)(void *int,char **,char **),void *,char **errmsg);
-
- 函数说明: 用来执行sqlite3语句
- 参数说明: 第一个参数:db是用于保存打开的数据库文件dbname的信息;
- 第二个参数: sql你要执行命令的语句;
- 第三个参数: callback回调函数,当这条语句执行之后,sqlite3会去调用你提供的这个函数。通常设为NULL;
- 第四个参数: void *是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。
- 第五个参数: 是错误信息。
说明:通常 sqlite3_callback和它后面的void*这两个位置都可以填NULL 。填NULL表示你不需要回调。比如你做insert 操作,做delete操作,就没有必要使用回调。而当你做select 时,就要使用回调,因为sqlite3 把数据查出来,得通过回调告诉你查出了什么数据。虽然回调显得代码整齐,但有时候你还是想要非回调的select查询。这可以通过sqlite3_get_table 函数做到。
函数原型:
- #include <sqlite3.h>
-
- int sqlite3_get_table(sqlite3 *db, const char *zsql,char ***pazResult, int *nrow, int *ncolumn,char **zErrmsg);
- 函数说明: 执行sql的查询功能
- 参数说明: 第一个参数db:db是用于保存打开的数据库文件dbname的信息;
- 第二个参数: sqlite3的语句,跟sqlite3_exec里的sql是一样的,是一个很普通的以\0结尾的char *字符串。
- 第三个参数: 查询的结果,它依然是一维数组,他的内存布局时:字段名称,后面时紧接着是每个字段值。
- 第四个参数: 是查询出多少条记录(即查出是多少行,不包括字段名那行)
- 第五个参数: 是多少个字段(多少列)
- 第六个参数: 是错误信息
注意:如果提供了errmsg,用来创建错误消息的内存是在堆上分布的,故在调用后,应该检查一下是否为null值, 如果有错误发生,使用sqlite3_free()释放errmsg占用的内存 。
示例代码:
- #include <stdio.h>
- #include <string.h>
- #include <sqlite3.h>
- #include <stdlib.h>
-
-
- int main (int argc, char **argv)
- {
- sqlite3 *db = NULL;
- int data = -1;
-
- //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
-
- data = sqlite3_open("test.db",&db);
- if(data < 0)
- {
- printf("create testsqlite failure:%s\n",sqlite3_errmsg(db)); //创建失败
- return -1;
- }
- else
- {
- printf("create testsqlite successfuly\n"); //创建成功
- sqlite3_close(db);//关闭数据库
- return 0;
- }
- }
执行结果:
需要注意的时在编译时需要在末尾加上一个 -lsqlite3,不然会抛错。
ls 查看目录多了刚命名的数据库 test.db
示例代码:
- #include <stdio.h>
- #include <string.h>
- #include <sqlite3.h>
- #include <stdlib.h>
-
- int main (int argc, char **argv)
- {
- sqlite3 *db = NULL;
- int data = -1;
- char *msg=0;
- char *sql;
-
- //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
-
- data = sqlite3_open("test.db",&db);
- if(data < 0)
- {
- printf("create testsqlite failure:%s\n",sqlite3_errmsg(db));
- return -1;
- }
-
- else
- {
- printf("create testsqlite successfuly\n");
- }
- sql = "CREATE TABLE stu(ID number, name, age );";
- sqlite3_exec(db, sql, 0, 0,&msg);
- //以下为添加数据
- sql = "INSERT INTO stu VALUES('1','huang','100');";
- sqlite3_exec(db, sql, 0, 0,&msg);
- sql = "INSERT INTO stu VALUES('2','chen','90');";
- sqlite3_exec(db, sql, 0, 0,&msg);
-
- printf("Insert successfuly\n");
-
- sqlite3_close(db);//关闭数据库
- return 0;
- }
-
执行结果:
创建了一个 stu 的一个表
sqlite3 test.db 进入我们创建的数据库中 ,在sqlite->中输入select *from stu之后就会出现我们刚才往表里插入的内容
示例代码:
- #include <errno.h>
- #include <stdio.h>
- #include <string.h>
- #include <sqlite3.h>
- #include <stdlib.h>
-
-
- int main (int argc, char **argv)
- {
- sqlite3 *db = NULL;
- int data;
- char *msg=0;
- int row=0,column=0; //行 列
- char **Result=NULL; //结果
- char *sql;
- //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
-
- data = sqlite3_open("test.db",&db);
- if(data)
- {
- printf("create testsqlite failure:%s\n",sqlite3_errmsg(db));
- exit(1);
- }
-
- printf("create testsqlite successfuly\n");
-
-
- sql ="SELECT *FROM stu";
-
- data =sqlite3_get_table(db, sql, &Result, &row, &column,&msg);
-
-
- if(data ==0 )
- {
- printf("row:%d column=%d \n", row , column);
-
- printf("the result of querying is:\n");
-
- int i=0,j=0;
-
- for (i=0; i< (row+1) *column; i++)
- {
-
- printf("%s", Result[i]);
- printf("\n");
- }
-
- }
- else if(data)
- {
- printf("SQL error!:%s\n",msg);//打印错误信息
- sqlite3_free(msg);//释放掉azResult的内存空间
- }
- sqlite3_close(db);//关闭数据库
- return 0;
- }
执行结果:
示例代码:
- #include <errno.h>
- #include <stdio.h>
- #include <string.h>
- #include <sqlite3.h>
- #include <stdlib.h>
-
-
- int main (int argc, char **argv)
- {
- sqlite3 *db=NULL;
- int data;
- char *msg=0;
- char *sql;
- char *data1;
-
- //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
- data = sqlite3_open("test.db",&db);
- if(data)
- {
- printf("create tetssqlite failure:%s\n",sqlite3_errmsg(db));
- exit(1);
- }
-
- printf("create testsqlite successfuly\n");
-
-
-
- sql ="DELETE FROM stu";
-
- data=sqlite3_exec(db,sql,NULL,(void *)data1,&msg);
- if(data)
- {
- printf("SQL error!:%s\n",msg);//打印错误信息
- sqlite3_free(msg);//释放掉zerrmsg的内存空间
- }
- else
- {
- printf("delete recodes successfuly\n");
- }
- sqlite3_close(db);//关闭数据库
- return 0;
- }
-
-
执行结果:
打开sqlite3创建的表 test.db表中 (数据不见了)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。