在windows下想使用c程序中使用sqlite,需要使用静态库.lib文件,官网上只提供sqlite3.dll和sqlite3.def文件,需要.lib才能使用。所以自己生成.lib文件。
1.在官方网站sqlite.org下载页面下载sqlite-dll-win32-x86-3071401.zip (298.71 KiB) 。
解压到某一文件夹下,如c:\sqlite3.
2.打开cmd命令行,执行
>cd c:\sqlite3
c:\sqlite3> lib /DEF:sqlite3.def
运行成功会有如下打印。
Microsoft (R) Library Manager Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserve
LIB : warning LNK4068: /MACHINE not specified; defaulting
Creating library sqlite3.lib and object sqlite3.exp
注意:如果不成功。如果提示lib不是内部或者外部命令,则在vc的安装目录下拷贝 vc98/bin/lib.exe 和link.exe到sqlite3目录下。如果提示缺少mspdb60.dll或者其他文件,则相应的找到拷贝到sqlite3目录下即可。
然后就是在相应的代码里引用了,如下:
我使用的是code blocks环境,在settings里打开compiler和debugger里找到linker settings 增加编译出来的sqlite3.lib库。
然后下载sqlite3的源码包里,拷贝其中的.h文件到源码目录下包含即可条用api了。
例子:
在目录下新建main.c,然后输入代码,例子做了简单的连接数据库(创建)->创建表->插入一条数据->查询显示。
#include <stdio.h>
#include "sqlite3.h"
int main()
{
int rc = 0;
int i = 0;
sqlite3 *db = NULL;
char *sql = NULL;
char *err = NULL;
rc = sqlite3_open("sqlite3test.db",&db);
if(rc)
{
printf("\r\nopen database sqlite3test.db fail!\r\nERR: %s", sqlite3_errmsg(db));
sqlite3_close(db);
return -1;
}
printf("\r\nopen database sqlite3test.db ok!");
sql = "create table stu(id int PRIMARY KEY,name text);";
rc = sqlite3_exec(db, sql, NULL, NULL, &err);
if(SQLITE_OK != rc)
{
if(NULL != err)
{
printf("\r\nSQL1 ERR:%s", err);
sqlite3_free(err);
return -1;
}
}
sql = "insert into stu values (1, 'zhangsan');";
rc = sqlite3_exec(db, sql, NULL, NULL, &err);
if(SQLITE_OK != rc)
{
if(NULL != err)
{
printf("\r\nSQL2 ERR:%s", err);
sqlite3_free(err);
return -1;
}
printf("\r\n error insert");
}
sql = "select * from stu;";
char **result;
int nrow = 0, ncolumn = 0;
rc = sqlite3_get_table(db, sql, &result, &nrow, &ncolumn, &err);
if(SQLITE_OK != rc)
{
if(NULL != err)
{
printf("\r\nSQL3 ERR:%s", err);
sqlite3_free(err);
return -1;
}
printf("\r\n error select");
}
printf("\r\nrow: %d ,column: %d", nrow, ncolumn);
for(i=0;i<(nrow+1)*ncolumn;i++)
{
printf("\r\nresult[%d] : %s", i, result[i]);
}
sqlite3_free_table(result);
sqlite3_close(db);
return 0;
}