Linuxƽ̨ÉÏSQLiteÊý¾Ý¿â½Ì³Ì£¨¶þ£©¡ª¡ªCÓïÑÔAPI½éÉÜ
ǰÑÔ£º±¾ÎĽ«½éÉܼ¸¸ö»ù±¾µÄSQLite3Êý¾Ý¿âµÄCÓïÑÔAPI½Ó¿Ú£¬Ö÷ÒªÓõ½Á½¸öÎļþ£ºsqlite3.c¡¢sqlite3.h¡£Ô´ÂëµØÖ·£ºhttps://github.com/AnSwErYWJ/SQLite¡£
Êý¾Ý¿â">´ò¿ªÊý¾Ý¿â
1.ÔÐÍ£º
int sqlite3_open(
const char* filename, /* Êý¾Ý¿âÎļþÃû, ±ØÐëΪ UTF-8 ¸ñʽ */
sqlite3** ppDB /* Êä³ö: SQLite Êý¾Ý¿â¾ä±ú */
);;
2.˵Ã÷£º
²ÎÊýfilenameΪָ¶¨´ò¿ªµÄÊý¾Ý¿â, sqlite3µÄ½á¹¹Ö¸Õë *ppDB ΪÊý¾Ý¿âÁ¬½Ó¾ä±ú¡£Èç¹ûÊý¾Ý¿â±»³É¹¦´ò¿ª(ºÍ/»ò ´´½¨), º¯Êý·µ»Ø SQLITE_OK£»·ñÔò·µ»ØÒ»¸ö´íÎóÂë, ¿ÉÒÔͨ¹ý* sqlite3_errmsg()* ²é¿´´íÎóÔÒò.¡£³ö´í£¬ÔòÖ»¿ÉÄÜÊÇ SQLite ÎÞ·¨Îª SQLite ¶ÔÏó·ÖÅäÄÚ´æ¿Õ¼ä, ´Ëʱ½«·µ»Ø NULL¡£
¹Ø±ÕÊý¾Ý¿â
1.ÔÐÍ£º
int sqlite3_close( sqlite3* pDB /* ÓÉ sqlite3_open »ò»ùÏà¹ØµÄº¯Êý´ò¿ªµÄ SQLite ¶ÔÏó¾ä±ú */ );
2.˵Ã÷£º
¸Ãº¯ÊýÓÃÀ´¹Ø±Õ sqlite3 ¶ÔÏó¡£·µ»Ø SQLITE_OK ±íʾ¶ÔÏ󱻳ɹ¦¹Ø±Õ£¬ÒÔ¼°ËùÓÐÏà¹ØµÄ×ÊÔ´±»³É¹¦»ØÊÕ¡£Ó¦ÓóÌÐò±ØÐëÔڹرÕ֮ǰ ¡°Íê³É(finalize)¡± ËùÓÐµÄ ¡°Ô¤±àÒëÓï¾ä(prepared statements)¡±, ²¢ÇҹرÕËùÓÐµÄ ¡°¶þ½øÖƾä±ú°ó¶¨(BLOB handle)¡±, Èç¹ûÔڹرÕʱ»¹ÓÐδÍê³ÉµÄÔ¤±àÒëÓï¾ä»ò¶þ½øÖƾä±ú, ÄÇôº¯Êý·µ»Ø SQLITE_BUSY(5)¡£
´íÎó´¦Àí
ÔÐÍ1£º
const char *sqlite3_errmsg( sqlite3* pDB /* SQLite3 Êý¾Ý¿â¾ä±ú */ );
˵Ã÷1£º
¸Ãº¯Êý·µ»ØÓëpDBÊý¾Ý¿âÖ¸ÕëÏà¹ØµÄ´íÎóÐÅÏ¢£¬Ï´ε÷ÓûḲ¸Ç¡£
ÔÐÍ2£º
int sqlite3_errcode( sqlite3* pDB /* SQLite3 Êý¾Ý¿â¾ä±ú */ )
˵Ã÷2£º
¸Ãº¯Êý·µ»Ø×î½üÒ»´Îµ÷Óà sqlite3_ APIʱ²úÉúµÄ´íÎóÂë¡£
ʾÀýÒ»£º
/************************************************************************* > File Name: example1.c > Author: AnSwEr > Mail: 1045837697@qq.com > Created Time: 2015Äê08ÔÂ29ÈÕ ÐÇÆÚÁù 14ʱ17·Ö21Ãë ************************************************************************/ #include
#include
#include"sqlite3.h" int main(void) { char *filename = "./first.db"; sqlite3 *pDB = NULL; int ret = 0; ret = sqlite3_open(filename,&pDB); if(ret != SQLITE_OK) { fprintf(stderr,"%s\n",sqlite3_errmsg(pDB)); exit(EXIT_FAILURE); } /*do something*/ printf("open successfully!\n"); if(pDB != NULL) { sqlite3_close(pDB); pDB = NULL; } printf("close successfully!\n"); return 0; }
ʾÀýһʵÏÖ´ò¿ªºÍ¹Ø±Õ²Ù×÷¡£
Ö´ÐÐsqlÓï¾ä
ÔÐÍ£º
int sqlite3_exec( sqlite3* pDB, /* sqlite3¾ä±ú */ const char* sql, /* ±»Ö´ÐÐµÄ SQL Óï¾ä */ int (*callback)(void*,int,char**,char**), /* Ö´ÐÐ/²éѯ»Øµ÷º¯Êý */ void* pvoid, /* ´«µÝ¸ø»Øµ÷º¯ÊýµÄµÚÒ»¸ö²ÎÊý */ char**errmsg /* ´íÎóÊä³öÐÅÏ¢ */ );
˵Ã÷£º
µ±»Øµ÷º¯Êý²»Îª NULL, ÔòËü¶Ôÿһ¸öÐвéѯ½á¹û¶¼»áµ÷Óøûص÷º¯Êý£»Èç¹ûûÓлص÷º¯Êý±»Ö¸¶¨, sqlite3_exec() Ö»ÊǼòµ¥µØºöÂÔ²éѯ½á¹û¡£
Èç¹û»Øµ÷º¯Êý·µ»Ø·ÇÁ㣬sqlite3_exec() Á¢¼´Öжϲéѯ£¬²¢ÇÒ²»ÔÙÖ´ÐкóÐøµÄ SQL Óï¾ä£¬Ò²²»ÔÙµ÷Óûص÷º¯Êý, sqlite3_exec() ½«·µ»Ø SQLITE_ABORT ½áÊøÖ´ÐС£
µ±·¢Éú´íÎóʱ, Ö´Ðн«Öжϡ£Èç¹û errmsg ²ÎÊý²»Îª¿Õ£¬´íÎóÐÅÏ¢½«»á±»Ð´È루errmsg ÓÉ sqlite3_malloc() ·ÖÅäÄÚ´æ¿Õ¼ä£¬ÓÉsqlite3_free() ÊͷŸÃÄÚ´æ¿Õ¼ä£©¡£Èç¹û errmsg ²ÎÊý²»Îª NULL, ²¢ÇÒûÓдíÎó·¢Éú, errmsg ±»ÉèÖÃΪ NULL¡£
ͨ³£Çé¿öÏÂcallbackÔÚselect²Ù×÷ÖлáʹÓõ½£¬Èç¹û²»ÐèÒª»Øµ÷º¯Êý¡£µÚÈýµÚËĸö²ÎÊýÉèΪNULL¡£
»Øµ÷º¯ÊýÔÐÍ£º
int callback( void *params, /*paramsÊÇsqlite3_exec´«ÈëµÄµÚËĸö²ÎÊý*/ int column_size, /*column_sizeÊǽá¹û×ֶεĸöÊý*/ char **column_value, /*column_valueÊÇ·µ»Ø¼Ç¼µÄһλ×Ö·ûÊý×éÖ¸Õë*/ char **column_name /*column_nameÊǽá¹û×ֶεÄÃû³Æ*/ );
ʾÀý¶þ
/************************************************************************* > File Name: example2.c > Author: AnSwEr > Mail: 1045837697@qq.com > Created Time: 2015Äê08ÔÂ29ÈÕ ÐÇÆÚÁù 20ʱ11·Ö06Ãë ************************************************************************/ /* * ²éѯÊý¾Ý¿â */ #include
#include
#include"sqlite3.h" static print_info(void *params,int column_size,char **column_value,char **column_name) { int i; for(i=0;i?
sqlite3_get_tableÔÐÍ£º
int sqlite3_get_table(
sqlite3 *db, /* An open database */
const char *zSql, /* SQL to be eva luated */
char ***pazResult, /* Results of the query */
int *pnRow, /* Number of result rows written here */
int *pnColumn, /* Number of result columns written here */
char **pzErrmsg /* Error msg written here */
);
void sqlite3_free_table(char **result);
/*
dbÊÇsqlite3µÄ¾ä±ú
zSqlÊÇÒªÖ´ÐеÄsqlÓï¾ä
pazResultÊÇÖ´Ðвéѯ²Ù×÷µÄ·µ»Ø½á¹û¼¯
pnRowÊǼǼµÄÐÐÊý
pnColumnÊǼǼµÄ×ֶθöÊý
pzErrmsgÊÇ´íÎóÐÅÏ¢
pazResultÊÇÒ»¸ö(pnRow+1)*pnColumn½á¹û¼¯µÄ×Ö·û´®Êý×飬ÆäÖÐǰpnColumn¸ö½á¹ûÊÇ×ֶεÄÃû³Æ£¬ºópnRowÐмǼÊÇÕæÊµµÄ×Ö¶ÎÖµ£¬Èç¹ûij¸ö×Ö¶ÎΪ¿Õ£¬Ôò¶ÔӦֵΪNULL¡£
ÕâÀïÌùÒ»¶ÎÍøÉϲ鵽µÄ²»Ê¹Óûص÷º¯ÊýµÄselectʾÀý£º
char **dbresult; int j,nrow,ncolumn,index; //select table ret = sqlite3_get_table(db,"select * from t",&dbresult,&nrow,&ncolumn,&errmsg); if(ret == SQLITE_OK){ printf("query %i records.\n",nrow); index=ncolumn; for(i=0;i
ʾÀýÈý
/************************************************************************* > File Name: example3.c > Author: AnSwEr > Mail: 1045837697@qq.com > Created Time: 2015Äê08ÔÂ29ÈÕ ÐÇÆÚÁù 20ʱ44·Ö10Ãë ************************************************************************/ /* * ±íµÄ´´½¨Óëɾ³ý£¬Êý¾ÝµÄ²åÈë,¸üÐÂÓëɾ³ý¡£ */ #include
#include
#include"sqlite3.h" static print_info(void *params,int column_size,char **column_value,char **column_name) { int i; for(i=0;i
ʾÀýÈýÑÝʾ´´½¨\ɾ³ý±í£¬Êý¾ÝµÄ²åÈë¡¢¸üÐÂÓëɾ³ý¡£
Ô¤±àÒë²Ù×÷
×¢Ò⣺sqlite3_execÖÐÒѾ·â×°ÁËÔ¤±àÒë²Ù×÷£¬Ö±½ÓʹÓü´¿É£¬Ô¤±àÒë²Ù×÷Ö»ÐèÉÔ×÷Á˽⡣
ÍøÉϲéÁ˺ܶàsqliteµÄÔ¤±àÒë²Ù×÷µÄÀý×Ó£¬±È½Ï¸´ÔÓ£¬´óÖ¿ÉÒÔ·ÖΪÒÔϼ¸¸ö²½Ö裺 1. ͨ¹ýsqlite3_prepare´´½¨Ò»¸ösqlite3_stmt¶ÔÏó 2. ͨ¹ýsqlite3_bind_*()°ó¶¨Ô¤±àÒë×ֶεÄÖµ 3. ͨ¹ýsqlite3_step()Ö´ÐÐSQLÓï¾ä 4. ͨ¹ýsqlite3_reset()ÖØÖÃÔ¤±àÒëÓï¾ä£¬Öظ´²Ù×÷2¶à´Î 5. ͨ¹ýsqlite3_finalize()Ïú»Ù×ÊÔ´
ÏÂÃæÒÀ´ÎÀ´¿´¿´ÕâЩº¯Êý¡£
sqlite3_prepareÔÐÍ£º
int sqlite3_prepare(
sqlite3* pDB, /* ³É¹¦´ò¿ªµÄÊý¾Ý¿â¾ä±ú */
const char* sql, /* UTF8±àÂëµÄ SQL Óï¾ä */
int nbytes, /* ²ÎÊý sql µÄ×Ö½ÚÊý, °üº¬ '\0' */
sqlite3_stmt** ppStmt, /* Êä³ö:Ô¤±àÒëÓï¾ä¾ä±ú */
const char** pszTail /* Êä³ö:Ö¸Ïò sql Óï¾äÖÐδʹÓõIJ¿·Ö */
);
˵Ã÷£º
Èç¹ûnbytesСÓÚ0£¬ sql Óï¾äÔòÒÔµÚÒ»¸ö ¡®\0¡¯ÖսᡣÈç¹ûËü·Ç¸º,£¬ÔòΪ¶ÁÈ¡µÄ×î´ó³¤¶È.¡£µ±nbytes ´óÓÚ 0 ʱ£¬Ôò¶Áȡָ¶¨³¤¶È£¬Èç¹û¡¯\0¡¯Ïȱ»¶Áµ½£¬ÔòÒÔ¡¯\0¡¯½áÊø¡£Èç¹ûÓû§ÖªµÀ±»´«ÈëµÄ sql Óï¾äÊÇÒÔ ¡®\0¡¯ ½áβµÄ£¬ÄÇôÓÐÒ»¸ö¸üºÃµÄ×ö·¨ÊÇ£º°ÑnbytesµÄÖµÉèΪ¸Ã×Ö·û´®µÄ³¤¶È(°üº¬¡¯\0¡¯)£¬ÕâÑù¿ÉÒÔ±ÜÃâ SQLite ¸´ÖƸÃ×Ö·û´®µÄÒ»·Ý¿½±´, ÒÔÌá¸ß³ÌÐòµÄЧÂÊ¡£
Èç¹û pszTail ²»Îª NULL, Ôò *pszTail Ö¸Ïò sql ÖеÚÒ»¸ö±»´«ÈëµÄ SQL Óï¾äµÄ½áβ¡£¸Ãº¯ÊýÖ»±àÒë sql µÄµÚÒ»¸öÓï¾ä, ËùÒÔ *pszTail Ö¸ÏòµÄÄÚÈÝÔòÊÇδ±»±àÒëµÄ¡£
*ppStmt Ö¸ÏòÒ»Ìõ¿ÉÒÔ±» sqlie3_step() º¯ÊýʹÓõÄÔ¤±àÒëÓï¾ä.¡£Èç¹ûÓдíÎó·¢Éú, pszStmt µÄֵΪ*NULL¡£
µ÷ÓÃÕßÓ¦¸ÃʹÓà sqlite3_finalize() ɾµô±»Ô¤±àÒëµÄÓï¾ä¡£
Èç¹ûº¯Êý³É¹¦, ·µ»Ø SQLITE_OK, ·ñÔò·µ»ØÒ»¸ö´íÎóÂë¡£
sqlite3_bind_*ÓжàÖÖÐÎʽ£¬·Ö±ð¶ÔÓ¦²»Í¬µÄÊý¾ÝÀàÐÍ£º
int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*)); int sqlite3_bind_double(sqlite3_stmt*, int, double); int sqlite3_bind_int(sqlite3_stmt*, int, int); int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64); int sqlite3_bind_null(sqlite3_stmt*, int); int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*)); int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*)); int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n);
Ô¤±àÒëSQLÓï¾äÖпÉÒÔ°üº¬Èçϼ¸ÖÖÐÎʽ£º
? ?NNN :VVV @VVV $VVV
NNN´ú±íÊý×Ö£¬VVV´ú±í×Ö·û´®.
Èç¹ûÊÇ?»òÕß?NNN£¬ÄÇô¿ÉÒÔÖ±½Ósqlite3_bind_*()½øÐвÙ×÷£¬Èç¹ûÊÇ×Ö·û´®£¬»¹ÐèҪͨ¹ýsqlite3_bind_parameter_index()»ñÈ¡¶ÔÓ¦µÄindex£¬È»ºóÔÙµ÷ÓÃsqlite3_bind_*()²Ù×÷¡£Õâͨ³£ÓÃÓÚ¹¹Ôì²»¶¨Ìõ¼þµÄSQLÓï¾ä£¨¶¯Ì¬SQLÓï¾ä£©¡£
int sqlite3_stepÔÐÍ£º
int sqlite3_step( sqlite3_stmt* ppStmt /* Ò»Ìõ±»Ô¤±àÒëµÄ sql Óï¾ä */ );
˵Ã÷£º
µ±Ò»ÌõÓï¾ä±» sqlite3_prepare() »òÆäÏà¹ØµÄº¯ÊýÔ¤±àÒëºó, sqlite3_step() ±ØÐë±»µ÷ÓÃÒ»´Î»ò¶à´ÎÀ´ÆÀ¹À¸ÃÔ¤±àÒëÓï¾ä¡£
¸Ãº¯ÊýµÄÏêϸÐÐΪÒÀÀµÓÚÓÉ sqlite3_prepare()(»òÆäÏà¹ØµÄº¯Êý) ²úÉúµÄÊÇÒ»ÌõÔõÑùµÄÔ¤±àÒëÓï¾ä¡£
·µ»ØÖµ£º
SQLITE_BUSY:æµ. Êý¾Ý¿âÒýÇæÎÞ·¨Ëø¶¨Êý¾ÝÈ¥Íê³ÉÆä¹¤×÷¡£µ«¿ÉÒÔ¶à´Î³¢ÊÔ¡£
SQLITE_DONE:Íê³É. sql Óï¾äÒѾ±»³É¹¦µØÖ´ÐС£ÔÚµ÷Óà sqlite_reset() ֮ǰ, µ±Ç°Ô¤±àÒëµÄÓï¾ä²»Ó¦¸Ã±» sqlite3_step() Ôٴε÷Óá£
SQLITE_ROW:²éѯʱ²úÉúÁ˽á¹û¡£´Ëʱ¿ÉÒÔͨ¹ýÏà¹ØµÄ¡±Êý¾Ý·ÃÎʺ¯Êý(column access functions)¡±À´È¡µÃÊý¾Ý. sqlite3_step() µÄÔÙÒ»´Îµ÷Óý«È¡µÃÏÂÒ»Ìõ²éѯ½á¹û¡£
SQLITE_ERROR:·¢ÉúÁË´íÎó¡£ ´Ëʱ¿ÉÒÔͨ¹ý sqlite3_errmmsg() È¡µÃÏà¹ØµÄ´íÎóÐÅÏ¢. sqlite3_step() ²»Äܱ»Ôٴε÷Óá£
SQLITE_MISUSE:²»ÕýÈ·µÄ¿âµÄʹÓÃ. ¸Ãº¯ÊýʹÓò»µ±¡£
sqlite3_finalizeÔÐÍ£º
int sqlite3_finalize( sqlite3_stmt* pStmt /* ±»Ô¤±àÒëµÄÓï¾ä */ );
˵Ã÷£º
¸Ãº¯ÊýÓÃÀ´É¾³ýÒ»Ìõ±»Ô¤±àÒëµÄ sql Óï¾ä¡£
Ô¤±àÒëʵÏÖ´úÂ룺
int i = 0; sqlite3_stmt *stmt; char ca[255]; //Ô¤±àÒë²Ù×÷ sqlite3_prepare_v2(db,"insert into t(id,msg) values(?,?)",-1,&stmt,0); for(i=10;i<20;i++){ sprintf(ca,"HELLO#%i",i); sqlite3_bind_int(stmt,1,i); sqlite3_bind_text(stmt,2,ca,strlen(ca),NULL); sqlite3_step(stmt); sqlite3_reset(stmt); } sqlite3_finalize(stmt); stmt = NULL;
×ܽá
ÉÏÎÄÁгöµÄÊÇһЩ×î»ù±¾¾«¼òµÄCÓïÑÔAPI£¬sqliteΪCÓïÑÔÒ»¹²ÌṩÁË200¶à¸öAPI¡£²»¹ý£¬ÉÏÊöÕâЩAPI¶ÔÒ»°ãµÄ¿ª·¢Õß¶øÑÔÒѾ×ã¹»ÁË£¬Èç¹ûÄ㻹Óиü¶àµÄÐèÇó£¬ÄǾÍÇë²éÔÄǰÑÔÖиø³öµÄÔ´´úÂëÎļþ£¨sqlite3.c£¬sqlite3.h£©¡£