Feed on
Subscription
RSS订阅

Linux C++下通过静态链接库的方式使用Sqlite


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即可

Share
相关日志

发表评论: