sqlite 句柄-sqlite 基础教程(3)

sqlite 句柄-sqlite 基础教程(3),第1张

概述分类: IOS开发(所有IOS文章) ---sqlite(IOS) C/C++ 2012-03-09 13:49  2457人阅读  评论(2)  收藏  举报 sqlite callback authorization function 数据库 transactions 声明 欢迎转载,但是请尊重作者劳动成果,转载请保留此框内声明,谢谢。 文章出处:http://blog.csdn.net/iu
分类:IOS开发(所有IOS文章)---sqlite(IOS)C/C++ 2012-03-09 13:49 2457人阅读 评论(2) 收藏 举报 sqlite callback authorization function 数据库 transactions

声明 欢迎转载,但是请尊重作者劳动成果,转载请保留此框内声明,谢谢。
文章出处:http://blog.csdn.net/iukey




要 *** 纵一个数据库你就得有一个这个数据库的句柄(又碰到这个难以理解的词了,不过确实还没得一个更好的词来替代它)。其实你跟本不需要去在乎这个词叫什么,你只要搞清楚他是一个什么玩意儿。就如同鞋子为什么叫鞋子,仔细想想确实也难以理解,不过 清楚他的功能就OK了,不是吗?

句柄在很多地方我们见到过,最常见的就是文件的句柄,我们要 *** 纵一个文件,我们就要取得一个文件的句柄。句柄是个什么东东呢?其实很简单,句柄是一个东东的描述,他被定义为一个结构体,这个结构体可能会包含要描述的东东的具体信息,比如位置、大小、类型等等。我们有了这个描述信息我们就能去找到这个东东,然后 *** 纵它。

一句话:句柄是物体的描述结构体。

我们来看看sqlite的句柄是怎么定义的(不要被吓到了,代码直接跳过就好):

[java] view plain copy print ? structsqlite3{ sqlite3_vfs*pVfs;/*OSInterface*/ intnDb;/*Numberofbackendscurrentlyinuse*/ Db*aDb;/*Allbackends*/ intflags;/*Miscellaneousflags.Seebelow*/ unsignedintopenFlags;/*Flagspassedtosqlite3_vfs.xopen()*/ interrCode;/*Mostrecenterrorcode(sqlITE_*)*/ interrMask;/*&resultcodeswiththisbeforereturning*/ u8autoCommit;/*Theauto-commitflag.*/ u8temp_store;/*1:file2:memory0:default*/ u8mallocFailed;/*Trueifwehaveseenamallocfailure*/ u8dfltLockMode;/*Defaultlocking-modeforattacheddbs*/ signedcharnextautovac;/*autovacsettingafterVACUUMif>=0*/ u8suppressErr;/*Donotissueerrormessagesiftrue*/ u8vtabOnConflict;/*Valuetoreturnfors3_vtab_on_conflict()*/ intnextPagesize;/*PagesizeafterVACUUMif>0*/ intntable;/*Numberoftablesinthedatabase*/ CollSeq*pdfltColl;/*Thedefaultcollatingsequence(BINARY)*/ i64lastRowID;/*ROWIDofmostrecentinsert(seeabove)*/ u32magic;/*Magicnumberfordetectlibrarymisuse*/ intnChange;/*Valuereturnedbysqlite3_changes()*/ intnTotalChange;/*Valuereturnedbysqlite3_total_changes()*/ sqlite3_mutex*mutex;/*Connectionmutex*/ intalimit[sqlITE_N_liMIT];/*limits*/ structsqlite3InitInfo{/*informationusedduringinitialization*/ intIDb;/*Whenbackisbeinginitialized*/ intnewTnum;/*Rootpageoftablebeinginitialized*/ u8busy;/*TRUEifcurrentlyinitializing*/ u8orphanTrigger;/*LaststatementisorphanedTEMPtrigger*/ }init; intnExtension;/*Numberofloadedextensions*/ voID**aExtension;/*Arrayofsharedlibraryhandles*/ structVdbe*pVdbe;/*listofactivevirtualmachines*/ intactiveVdbeCnt;/*NumberofVDBEscurrentlyexecuting*/ intwriteVdbeCnt;/*NumberofactiveVDBEsthatarewriting*/ intvdbeExecCnt;/*NumberofnestedcallstoVdbeExec()*/ voID(*xTrace)(voID*,constchar*);/*Tracefunction*/ voID*pTraceArg;/*Argumenttothetracefunction*/ voID(*xProfile)(voID*,constchar*,u64);/*Profilingfunction*/ voID*pProfileArg;/*Argumenttoprofilefunction*/ voID*pCommitArg;/*ArgumenttoxCommitCallback()*/ int(*xCommitCallback)(voID*);/*Invokedateverycommit.*/ voID*pRollbackArg;/*ArgumenttoxRollbackCallback()*/ voID(*xRollbackCallback)(voID*); voID*pUpdateArg; voID(*xUpdateCallback)(voID*,int,sqlite_int64); #ifndefsqlITE_OMIT_WAL int(*xWalCallback)(voID*,sqlite3*,int); voID*pwalarg; #endif voID(*xCollNeeded)(voID*,inteTextRep,constchar*); voID(*xCollNeeded16)(voID*,constvoID*); voID*pCollNeededArg; sqlite3_value*pErr;/*Mostrecenterrormessage*/ char*zErrMsg;/*Mostrecenterrormessage(UTF-8encoded)*/ char*zErrMsg16;/*Mostrecenterrormessage(UTF-16encoded)*/ union{ volatileintisInterrupted;/*Trueifsqlite3_interrupthasbeencalled*/ doublenotUsed1;/*Spacer*/ }u1; LookasIDelookasIDe;/*LookasIDemallocconfiguration*/ #ifndefsqlITE_OMIT_AUTHORIZATION int(*xAuth)(voID*,85); line-height:18px"> /*Accessauthorizationfunction*/ voID*pAuthArg;/*1stargumenttotheaccessauthfunction*/ #ifndefsqlITE_OMIT_PROGRESS_CALLBACK int(*xProgress)(voID*);/*Theprogresscallback*/ voID*pProgressArg;/*Argumenttotheprogresscallback*/ intnProgressOps;/*Numberofopcodesforprogresscallback*/ #endif #ifndefsqlITE_OMIT_VIRTUALtable HashaModule;/*populatedbysqlite3_create_module()*/ VtabCtx*pVtabCtx;/*Contextforactivevtabconnect/create*/ Vtable**aVTrans;/*Virtualtableswithopentransactions*/ intnVTrans;/*AllocatedsizeofaVTrans*/ Vtable*pdisconnect;/*disconnecttheseinnextsqlite3_prepare()*/ FuncDefHashaFunc;/*Hashtableofconnectionfunctions*/ HashaCollSeq;/*Allcollatingsequences*/ BusyHandlerbusyHandler;/*Busycallback*/ intbusyTimeout;/*Busyhandlertimeout,inmsec*/ DbaDbStatic[2];/*Staticspaceforthe2defaultbackends*/ Savepoint*pSavepoint;/*listofactivesavepoints*/ intnSavepoint;/*Numberofnon-transactionsavepoints*/ intnStatement;/*Numberofnestedstatement-transactions*/ u8isTransactionSavepoint;/*TrueiftheoutermostsavepointisaTS*/ i64nDeferredCons;/*Netdeferredconstraintsthistransaction.*/ int*pnBytesFreed;/*IfnotNulL,incrementthisinDbFree()*/ #ifdefsqlITE_ENABLE_UNLOCK_NOTIFY /*ThefollowingvariablesareallprotectedbytheSTATIC_MASTER **mutex,notbysqlite3.mutex.Theyareusedbycodeinnotify.c. ** **WhenX.pUnlockConnection==Y,thatmeansthatXiswaitingforYto **unlocksothatitcanproceed. ** **WhenX.pBlockingConnection==Y,thatmeansthatsomethingthatXtrIEd **trIEdtodorecentlyFailedwithansqlITE_LOCKEDerrorduetolocks **heldbyY. */ sqlite3*pBlockingConnection;/*ConnectionthatcausedsqlITE_LOCKED*/ sqlite3*pUnlockConnection;/*Connectiontowatchforunlock*/ voID*pUnlockArg;/*ArgumenttoxUnlockNotify*/ voID(*xUnlockNotify)(voID**,int);/*Unlocknotifycallback*/ sqlite3*pNextBlocked;/*Nextinlistofallblockedconnections*/ };

? typedefstructsqlite3sqlite3;//

是不是被吓到了,没关系,这段代码本来就是我贴出来吓唬你的,我也没认真研究过这个代码,也不想去研究,除非哪天有人出高价请我去研究,我现在只知道怎么用就好了。

这个 sqlite3 结构体就是被用来描述我们磁盘里的数据库文件的,有了这个描述符我们就可以对这个数据库进行各种 *** 作了, *** 作的具体内情我们不必要了解,我们只需要知道怎么去调用API就好了,当然有时候还是要了解一点点内情的,这个以后碰到再讲。

我用这么长的话加一大段吓人的代码只有一个目的:不要对句柄有恐惧感。

好了,开始我们的正题,sqlite 里面你要 *** 纵数据库我们先得创建一个句柄,然后后面所有对数据库得 *** 作都会用到这个句柄。

? sqlite3*pdb; 就 这么简单,这样一个ssqlite的句柄我们就创建完成了,我们以后针对数据库的 *** 作都离不开它了。你可能还有疑问,我也知道你的 疑问是什么,请看下回分解。 总结

以上是内存溢出为你收集整理的sqlite 句柄-sqlite 基础教程(3)全部内容,希望文章能够帮你解决sqlite 句柄-sqlite 基础教程(3)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1180771.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存