Linux下sqlite数据库操作-<一> 表的检测,创建,删除。

2015-01-25 20:44:05 · 作者: · 浏览: 4
<一> 表的检测,创建,删除。?
?
#include ?
#include ?
#include ?
#include ?
#include ?
?
bool db_tableExists(sqlite3 *db, const char *tbname)?
{?
??? int nRet;?
??? const char?? *szTail;?
??? sqlite3_stmt *pvm;?
??? char sql[1024];?
??? sprintf(sql, "select count(*) from sqlite_master where type='table' and name='%s'", tbname);?
?
??? szTail=0;?
?
??? nRet = sqlite3_prepare(db, sql, -1, &pvm, &szTail);?
?
??? //printf("nRet=%d SQLITE_OK=%d SQLITE_DONE=%d SQLITE_ROW=%d \n", nRet, SQLITE_OK, SQLITE_DONE,SQLITE_ROW);?
?
??? if (nRet==SQLITE_OK)?
??? {?
??????? nRet=sqlite3_step(pvm);?
?
??????? //printf("nRet=%d SQLITE_OK=%d SQLITE_DONE=%d SQLITE_ROW=%d \n", nRet, SQLITE_OK, SQLITE_DONE,SQLITE_ROW);?
?
??????? if (nRet==SQLITE_ROW)?
??????? {?
??????????? int nCols = sqlite3_column_count(pvm);?
??????????? //printf("nCols:%d\n", nCols);?
??????????? if (nCols>=1)?
??????????? {?
??????????????? return sqlite3_column_int(pvm,0)!=0;?
??????????? }?
??????? }?
??? }?
?
??? return false;?
}?
?
int db_exeDML(sqlite3 *db, const char *sql)?
{?
??? char* szError=0;?
??? int nRet = sqlite3_exec(db, sql, 0, 0, &szError);?
??? if (nRet == SQLITE_OK)?
??? {?
??????? return sqlite3_changes(db);?
??? }?
??? return SQLITE_ERROR;?
}?
?
?
int main(int argc, char **argv)?
{?
?
??? sqlite3 *db=0;?
??? int? nRet = sqlite3_open("temp.db",&db);?
?
??? if (nRet)?
??? {?
??????? fprintf(stderr,"can't open database: %s\n",sqlite3_errmsg(db));?
??????? sqlite3_close(db);?
??????? exit(1);?
??? }else{?
??????? printf("open database ok.\n");?
??? }?
?
??? if (!db_tableExists(db,"tmp"))?
??? {?
??????? printf("create \"tmp\" table\n");?
??????? nRet=db_exeDML(db,"CREATE TABLE tmp( IP TEXT, VER TEXT, UID TEXT, FILE TEXT)");?
??????? printf("nRet=%d\n", nRet);?
??? }else{?
??????? nRet=db_exeDML(db,"delete from tmp");?
??????? printf("nRet=%d\n", nRet);?
??? }?
?
??? sqlite3_close(db);?
?
??? return 0;?
}?

摘自 杨小卫专栏