Linux C++下通过静态链接库的方式使用Sqlite
2009年10月20日 by admin
Linux C++下通过静态链接库的方式使用Sqlite
一,准备源码
1,下载最新版的sqlite3合并版,解压出三个文件.
2,编写你的测试程序.
我写的如下(main.cpp):
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include "sqlite3.h"
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main(int argc, char **argv){
sqlite3 *db;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("test.dat", &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
rc = sqlite3_exec(db, "CREATE TABLE Log(thetime INTEGER , Netflow INTEGER , NetConn INTEGER ,RecvCount INTEGER ,ProcessCount INTEGER );", callback, 0, &zErrMsg);
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
char sql[128]={0};
time_t t1=time(0);
rc = sqlite3_exec(db, "begin transaction;", callback, 0, &zErrMsg);
int i;
for (i=0;i<100000;i++)
{
sprintf( sql,"INSERT INTO Log VALUES( %d, 22, 33 , 44 ,55 );",i);
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if( rc!=SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
}
rc = sqlite3_exec(db, "commit transaction;", callback, 0, &zErrMsg);
printf("cost time = %d\n", time(0) - t1 );
rc = sqlite3_exec(db, "select count(*) from Log;", callback, 0, &zErrMsg);
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
return 0;
}
二,编译生成
gcc -c sqlite3.c
将生成"sqlite3.o"文件
ar cr libsqlite3.a sqlite3.o
将生成"libsqlite3.a"文件
g++ main.cpp libsqlite3.a -pthread -ldl -o mytest
将生成mytest文件.执行即可
后记:如果是C,直接gcc *.c -pthread -ldl -o mytest即可