SQLite3编程初级入门


  1. #include "sqlite3.h"   
  2.   
  3. // DATABASE NAME   
  4. #define DB_SQLITE3_TEST_FULLNAME    "test.db"                  
  5.   
  6. // TABLE NAME   
  7. #define DB_TestTableName    "test"   
  8.   
  9.   
  10. static sqlite3* td_db=NULL;  
  11. static char* pTempOutputMsg=NULL;  
  12.   
  13.   
  14.   
  15. // 1. open/creat database   
  16. bool OpenDatabase(char *pInputDatabase)  
  17. {  
  18.     if(SQLITE_OK != sqlite3_open(pInputDatabase,&td_db))  
  19.     {  
  20.         printf("%s\n",sqlite3_errmsg(td_db));  
  21.         return false;  
  22.     }  
  23.   
  24.     sqlite3_exec(td_db,"PRAGMA synchronous = OFF",0,0,&pTempOutputMsg);//如果有定期备份的机制,而且少量数据丢失可接受,用OFF   
  25.     sqlite3_exec(td_db,"PRAGMA page_size = 4096",0,0,&pTempOutputMsg);//只有在未创建数据库时才能设置   
  26.     sqlite3_exec(td_db,"PRAGMA cache_size = 8000",0,0,&pTempOutputMsg); //建议改为8000   
  27.     sqlite3_exec(td_db,"PRAGMA case_sensitive_like=1",0,0,&pTempOutputMsg);//搜索中文字串   
  28.   
  29.     return true;  
  30. }  
  31.   
  32. // 2. create table.   
  33. bool CreateTable(char tInputTableNo)  
  34. {  
  35.     char pTempCmd[256];  
  36.   
  37.     switch( tInputTableNo )  
  38.     {  
  39.     case 0:  
  40.         sprintf(pTempCmd, "create table %s %s",DB_TestTableName,  
  41.         " ("  
  42.         "idx integer, "  
  43.         "lang integer"  
  44.         ");");  
  45.         break;  
  46.     default:  
  47.         break;  
  48.     }  
  49.   
  50.     //JPRINTF(("pTempCmd = %s \n",pTempCmd));   
  51.     if(SQLITE_OK!=sqlite3_exec(td_db,pTempCmd,NULL,NULL,&pTempOutputMsg))  
  52.     {  
  53.         printf("%s\n",sqlite3_errmsg(td_db));  
  54.         return false;  
  55.     }  
  56.     else  
  57.         return true;  
  58. }  
  59.   
  60. // 3. insert records into table.   
  61. bool InsertRecords(char* pInputTableName,int pInputInsertCnt)  
  62. {  
  63.     int i;  
  64.     char pTempCmd[256];  
  65.   
  66.     for(i=0;i<pInputInsertCnt;++i)  
  67.     {  
  68.         sprintf(pTempCmd,"insert into %s values(7351,%d,0,'WWW',30,3,0,0,0,0,1,2,3,4);",pInputTableName,i);  
  69.         //JPRINTF(("SQL: %s \n",pTempCmd));   
  70.         if( SQLITE_OK!=sqlite3_exec(td_db,pTempCmd,0,0,&pTempOutputMsg) )  
  71.             return false;             
  72.     }  
  73.     return true;  
  74. }  
  75.   
  76. // 4. show records in the table.   
  77. bool ShowRecords(char *pInputTableName)  
  78. {  
  79.     sqlite3_stmt* stmt=NULL;  
  80.     char* szMsg=NULL;  
  81.     int one=0,two=0;  
  82.     char *pTempName;  
  83.     char pTempCmd[256];  
  84.   
  85.     sprintf(pTempCmd,"select * from %s;",pInputTableName);  
  86.     if(SQLITE_OK!=sqlite3_prepare(td_db,pTempCmd,strlen(pTempCmd),&stmt,NULL))  
  87.         return false;  
  88.       
  89.     printf("\n\tone\t\ttwo\t\tname\n");  
  90.     printf("\t--------------------\n");  
  91.     while(1)  
  92.     {  
  93.         if(SQLITE_ROW!=sqlite3_step(stmt))  
  94.             break;  
  95.         //sqlite3_column_text(stmt,0);   
  96.         one=sqlite3_column_int(stmt,0);  
  97.         two=sqlite3_column_int(stmt,1);  
  98.         pTempName=(char *)sqlite3_column_blob(stmt,2);  
  99.         printf("\t%d\t\t%d\t\t%s\n",one,two,pTempName);  
  100.     }  
  101.     sqlite3_finalize(stmt);  
  102.     printf("\n");  
  103.     return true;  
  104. }  
  105.   
  106. // 5. delete the records from table.   
  107. bool DeleteRecords(char *pInputTableName, char *pInputIndexName, int pInputIndexValue)  
  108. {  
  109.     char pTempCmd[256];  
  110.     sprintf(pTempCmd,"delete from %s where %s=%d;",pInputTableName,pInputIndexName,pInputIndexValue);  
  111.   
  112.     if(SQLITE_OK!=sqlite3_exec(td_db,pTempCmd,NULL,NULL,&pTempOutputMsg))  
  113.     {  
  114.         printf("%s\n",sqlite3_errmsg(td_db));  
  115.         return false;  
  116.     }  
  117.     else  
  118.         return true;  
  119. }  
  120.   
  121. // 6. drop the point table.   
  122. bool DropTable(char *pInputTableName)  
  123. {  
  124.     char pTempCmd[256];  
  125.     sprintf(pTempCmd,"drop table %s;",pInputTableName);  
  126.   
  127.     if(SQLITE_OK!=sqlite3_exec(td_db,pTempCmd,NULL,NULL,&pTempOutputMsg))  
  128.     {  
  129.         printf("%s\n",sqlite3_errmsg(td_db));  
  130.         return false;  
  131.     }  
  132.     else  
  133.         return true;  
  134. }  
  135.   
  136. // 7 .Search database   
  137. bool SearchDatabase(char *pInputTableName, char *pInputIndexName, int pInputIndexValue)  
  138. {  
  139.     int nret;  
  140.     int one=0,two=0;  
  141.     char *pTempName;  
  142.     char pTempCmd[256];  
  143.     sqlite3_stmt* stmt=NULL;  
  144.       
  145.     sprintf(pTempCmd,"select * from %s where %s=%d;",pInputTableName,pInputIndexName,pInputIndexValue);  
  146.   
  147.     if(SQLITE_OK!=sqlite3_exec(td_db,pTempCmd,NULL,NULL,&pTempOutputMsg))  
  148.     {  
  149.         printf("%s\n",sqlite3_errmsg(td_db));  
  150.         return false;  
  151.     }  
  152.   
  153.     printf("\n\tone\t\ttwo\t\tname\n");  
  154.     printf("\t--------------------\n");  
  155.     while(1)  
  156.     {  
  157.         if(SQLITE_ROW!=sqlite3_step(stmt))  
  158.             break;  
  159.         one=sqlite3_column_int(stmt,0);  
  160.         two=sqlite3_column_int(stmt,1);  
  161.         pTempName=(char *)sqlite3_column_blob(stmt,2);  
  162.         printf("\t%d\t\t%d\t\t%s\n",one,two,pTempName);  
  163.     }  
  164.     sqlite3_finalize(stmt);  
  165.     printf("\n");  
  166.     return true;  
  167. }  
  168.   
  169. // 8. creat index on pointer table.   
  170. bool CreatIndexOnDatabase(char *pInputIndexName,char *pInputTableName,char *pInputRawName)  
  171. {  
  172.     char pTempCmd[256];  
  173.     sprintf(pTempCmd,"create index %s on %s(%s)",pInputIndexName,pInputTableName,pInputRawName);  
  174.   
  175.     if(SQLITE_OK!=sqlite3_exec(td_db,pTempCmd,NULL,NULL,&pTempOutputMsg))  
  176.     {  
  177.         printf("%s\n",sqlite3_errmsg(td_db));  
  178.         return false;  
  179.     }  
  180.     else  
  181.         return true;  
  182. }  
  183.   
  184. // 9. close database   
  185. bool CloseDatabase()  
  186. {  
  187.     sqlite3_close(td_db);  
  188.     td_db=NULL;  
  189.     return true;  
  190. }  
  191.   
  192.   
  193.   
  194.   
  195. int Db_Sqlite3_init(void)  
  196. {  
  197.     char pTempString[256];  
  198.       
  199.     if(!OpenDatabase(DB_SQLITE3_TEST_FULLNAME))  
  200.     {  
  201.         JPRINTF(("\nStep 1. Open database failed.\n"));  
  202.         return -1;  
  203.     }else  
  204.         JPRINTF(("\nStep 1. Open database succeeded.\n"));  
  205.   
  206.     if( !CreateTable(0) )  
  207.     {     
  208.         JPRINTF(("Step 2. Create table failed.\n"));  
  209.     }else  
  210.         JPRINTF(("Step 2. Create table succeeded.\n"));  
  211.   
  212.     if( !InsertRecords(DB_TestTableName,5) )  
  213.     {  
  214.         JPRINTF(("Step 3. Insert data to point table Failed.\n"));  
  215.     }else  
  216.         JPRINTF(("Step 3. Insert data to point table succeeded.\n"));  
  217.   
  218.     if( !ShowRecords(DB_TestTableName))  
  219.     {  
  220.         JPRINTF(("Step 4. Read data from point table Failed.\n"));  
  221.     }else  
  222.         JPRINTF(("Step 4. Read data from point table succeeded.\n"));  
  223.   
  224.     if( !DeleteRecords(DB_TestTableName,"lang",2) )  
  225.     {  
  226.         JPRINTF(("Step 5. Delete data from point table Failed.\n"));  
  227.     }else  
  228.         JPRINTF(("Step 5. Delete data from point table succeeded.\n"));  
  229.   
  230.     // show again.   
  231.     if( !ShowRecords(DB_TestTableName))  
  232.     {  
  233.         JPRINTF(("Step 4. Read data from point table Failed.\n"));  
  234.     }else  
  235.         JPRINTF(("Step 4. Read data from point table succeeded.\n"));  
  236.   
  237. #if 0   
  238.     if( !DropTable(DB_TestTableName))  
  239.     {  
  240.         JPRINTF(("Step 6. delete point table Failed.\n"));  
  241.     }else  
  242.         JPRINTF(("Step 6. delete point table succeeded.\n"));  
  243. #endif   
  244.   
  245.     if( !SearchDatabase(DB_TestTableName,"lang",3) )  
  246.     {  
  247.         JPRINTF(("Step 7. Serch data from point table Failed.\n"));  
  248.     }else  
  249.         JPRINTF(("Step 7. Serch data from point table succeeded.\n"));  
  250.   
  251.   
  252.     if( !CreatIndexOnDatabase("lang_",DB_TestTableName,"lang") )  
  253.     {  
  254.         JPRINTF(("Step 8. create index on point table Failed.\n"));  
  255.     }else  
  256.         JPRINTF(("Step 8. create index on point table succeeded.\n"));  
  257.   
  258.     CloseDatabase();  
  259.   
  260. }  

相关内容