SQLite Transactions

来源:互联网 发布:真丝睡衣品牌 知乎 编辑:程序博客网 时间:2024/05/01 08:25
#include "../SQLite3/sqlite3.h"#include <iostream>#include <tchar.h>#include <windows.h>#include <MMSystem.h>#pragma comment(lib,"winmm.lib")#define  TEST_TIMES 10000#define  ONE_M      1048576#define  TEST_SELECT//#define  USE_TRANSACTIONtypedef int(*sqlite3_callback)(void*,int,char**,char**);char Name[4][32] = {"david","boluns","guanzhongdaoke","wangba"};char Sex[2][8]  = {"boy","girl"};int SleectCB(void* para,int n_column,char** column_value,char** column_name ){printf("记录包含%d个字段\n", n_column );for(int i = 0 ; i < n_column; i ++ ){printf("字段名:%s  字段值:%s\n", column_name[i], column_value[i] );}printf("------------------\n");   return 0;}int sqlite_main(){sqlite3 * db = 0;int result = 0;char * errmsg = 0;#ifdef TEST_SELECTremove("test.db");result = sqlite3_open("test.db", &db );if( result !=SQLITE_OK)return -1;result = sqlite3_exec( db,"create table Info( ID integer , name nvarchar(32) ,sex integer,age integer)", NULL, NULL, &errmsg );  /* primary key*/if(result !=SQLITE_OK)printf("创建表失败,错误码:%d,错误原因:%s\n", result, errmsg );#ifdef USE_TRANSACTIONresult = sqlite3_exec( db,"begin;", 0, 0, &errmsg );  #endifchar sSQL[128] = {0};for (int i=0;i<TEST_TIMES;i++){memset(sSQL,0,128);sprintf(sSQL,"insert into Info values (%d,'%s','%s',%d)",i,Name[rand()%4],Sex[rand()%2],rand()%50+1);result = sqlite3_exec( db,sSQL, 0, 0, &errmsg );if(result !=SQLITE_OK)printf("插入记录失败,错误码:%d,错误原因:%s\n", result, errmsg );}#ifdef USE_TRANSACTIONresult = sqlite3_exec( db,"commit;", 0, 0, &errmsg );#endif#elseresult = sqlite3_open("test.db", &db );if( result !=SQLITE_OK)return -1;result = sqlite3_exec( db,"select * from Info", SleectCB, NULL, &errmsg );#endifsqlite3_close( db );return 0;}int _tmain(int argc, _TCHAR* argv[]){DWORD dwNow = timeGetTime();sqlite_main();printf("数据库初始化用时:%dms\r\n",timeGetTime()-dwNow);return 0;}