linux下,c++连接sqlite3,不需要额外的安装依赖库,linux自带了sqlite3,在编译的时候,只需要将sqlite3的库加入编译参数中即可。sqlite3数据库可以指定数据存储的路径,我们一般使用类似testsqlite3.db这样的文件命名数据库文件,在命令行下连接testsqlite3.db,只需要运行sqlite3 testsqlite3.db即可。无需用户名和密码,数据库也不用指定,本身testsqlite3就是数据库名了,可以直接在库中建表,插入数据。
使用C++连接sqlite3,常用的api就那么几个:
- sqlite3_open() 打开数据库,相当于建立连接。
- sqlite3_exec() 执行sql语句,返回值是执行的结果,如果参数sql是查询语句,需要传入一个回调函数,处理查询结果。
- sqlite3_close() 关闭数据库连接。
这里,编写一个向数据库表user中插入一行记录,然后查询所有记录的代码:
#include <iostream>
#include <string>
#include "sqlite3.h"
using namespace std;
static int callback(void *data,int args_num,char **argv,char **argc){
for(int i=0;i<args_num;i++){
cout<<argc[i]<<" = " <<(argv[i]?argv[i]:"NULL")<<"\t";
}
cout<<endl;
return 0;
}
int main(){
sqlite3 *db;
char *errMsg;
string sql = "insert into user (name,age,mobile) values ('xxx',20,'15011186301')";
int rc = sqlite3_open("/data/testsqlite3.db",&db);
if(rc!=SQLITE_OK){
cout<<"open sqlite3 fail."<<endl;
return -1;
}
cout<<"open sqlite3 ok."<<endl;
int rs = sqlite3_exec(db,sql.c_str(),0,0,&errMsg);
if(rs!=SQLITE_OK){
cout<<"insert fail"<<endl;
}else{
cout<<"insert data ok."<<endl;
}
sql = "select * from user";
int first = 0;
sqlite3_exec(db,sql.c_str(),callback,(void *)&first,&errMsg);
sqlite3_close(db);
return 0;
}
运行之前,需要编译,生成可执行程序。
运行编译命令 :g++ -lsqlite3 -o main main.cpp
编译参数中通过-lsqlite3加入了sqlite3库,如果不加参数编译会报错。
运行结果截图:
普通的打开数据库连接,插入记录,甚至是执行查询返回值都是int类型,表示执行结果是否成功。如果是执行查询语句,我们需要在sqlite3_exec()函数中,传入一个回调函数callback(void *data,int args_num,char **argv,char **argc),用来处理查询结果。 回调函数的参数中args_num表示查询结果的总条数,argv,argc是数组,分别表示记录的值和记录的列名称。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)