第一章:linux下安装sqlite3
第一步:编译源码得到相应的库和可执行的sqlite3和头文件
1、下载源码:http://www.sqlite.org/download.html, 诸如:sqlite-autoconf-3080500.tar.gz
2、解压相应的下载的压缩包,并编译
tar zxvf sqlite-autoconf-3080500.tar.gz -C /home/
解压后的在/home下得到的目录是 sqlite-autoconf-3080500
为了区分源码和编译后的文件,我们再在/home下创建一个编译后文件的存放目录
# cd /home
#mkdir sqlite_compile_receive
#cd sqlite_compile_receive
//作相关配置
#../sqlite-autoconf-3080500/configure --prefix=/home/sqlite_compile_receive
#make && make install
编译后成功后在/home/sqlite_compile_receive下便可得:
lib文件夹 和bin 文件夹 和include文件夹
备注:如果编译出现其他问题,请查阅其他资料(我编译这里的时候没有出错)
第二步:将/home/sqlite_compile_receive下的到的/lib下的库,以及bin下的可执行文件,以及include下的头文件防盗系统的中去(为了我们c编程的时候头文件能够找到)
#sudo cp -R /home/sqlite_compile_receive/lib/ /usr/lib/
#sudo cp /home/sqlite_compile_receive/include/sqlite3.h /usr/include/
#sudo cp /home/sqlite_compile_receive/bin /bin
第二章:基本sql语句学习
对于sqlite的相关语法的学些这里有一个好一点网站:http://www.w3cschool.cc/sqlite/sqlite-where-clause.html
第三章:c代码实现对数据库的操作
函数一:int sqlite3_open(const char *db_path, sqlite3 **db);
参数一:需要打开的数据库(这里是以字符串的形式)
参数二:关联打开的数据库:将该数据库的内容同db关联起来(我们直接操作db就等于操作打开的数据库了)
函数二:sqlite3_close(sqlite3 *db);
参数:sqlite3_open()打开的数据库链接
函数三:int sqlite3_exec(
sqlite3* ppDb, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
第3个参数sqlite3_callback 是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。 第4个参数void*是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。
备注:通常没有什么特殊需求,第三个和第四个参数置为0;
返回值:sqlite3_exec()返回值是指执行sql语句是否成功(0成功,非0失败),而不是执行sql的结果;
函数四:sqlite3_get_table(sqlite3*db,const char* sql,char*** resultp,int* nrow,int* ncolumn,char** errmsg);
参数一:需要操作的数据库
参数二:需要执行的sql语句
参数三:执行sql的结果存放的地方(包括字段名也存放载这里)
参数四:执行结果的行数
参数五:执行结果的列数
参数六:错误信息存放
返回值:执行sql语句是否成功信息(0成功,非0失败)
函数五:sqlite3_free_table(char**resultp)
参数:释放sqlite3_get_table()得到的resultp空间
代码实例一:
#include <stdio.h>
#include <sqlite3.h>
int main(void)
{
sqlite3 *db = NULL;
char *hErrMsg = 0;
int rc;
rc = sqlite3_open("/home/hyg/sql_hyg/hyg.db",&db);
printf("rc is: %d\n",rc);
if ( rc )
{
fprintf(stderr,"can't open database:%s\n",sqlite3_errmsg(db));
sqlite3_close(db);
return 0;
}
printf("opend successful!!!\n");
char *sql = "CREATE TABLE test1(ID INTEGER PRIMARY KEY,SEX VARCHAR(2));";
printf("sqlite_exec(slq) is %d\n", sqlite3_exec(db, sql, 0, 0, &hErrMsg));
/*sqlite3_exec();返回值的结果为,执行的sql语句是否成功,成功返回0,否则非0
*注意:是执行sql是否成功,而不是执行sql语句的结果
*/
char *sql1 = "select count(*) from test1;";
printf("sqlite_exec(slq) is %d\n", sqlite3_exec(db, sql1, 0, 0, &hErrMsg));
sqlite3_close(db);
return 0;
}
代码实例二:
/*遍历条件查询,然后得到需要的结果可以根据此段代码修改*/
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
int main(void)
{
sqlite3 *db = NULL;
char *hErrMsg = 0;
char **dbResult;
int nRow=0,Column=0;
int rc;
rc = sqlite3_open("/home/hyg/sql_hyg/hyg.db",&db);
printf("rc is: %d\n",rc);
if ( rc )
{
fprintf(stderr,"can't open database:%s\n",sqlite3_errmsg(db));
sqlite3_close(db);
return 0;
}
printf("opened successful!!!\n");
char sql1[128] ;
snprintf(sql1, 128, "select * from test1 WHERE SEX='%s';", "男");
int re_get=0, index=0;
re_get = sqlite3_get_table(db, sql1, &dbResult, &nRow, &Column, &hErrMsg);
if (SQLITE_OK == re_get)
{
int i, j;
index = Column;
printf("%-5s%-5s\n", dbResult[0], dbResult[1]);
for (i=0; i<nRow; i++)
{
for (j=0; j<Column; j++)
{
printf("%-5s", dbResult[index++]);
}
printf("\n");
}
}
sqlite3_free_table(dbResult);
sqlite3_close(db);
return 0;
}