1. extern "C"{  
  2. #include "sqlite3.h"  
  3. };  
  4.   
  5. #pragma comment(lib,"sqlite.lib")  
  6. /* 
  7. 为什么要 extern “C” ?这是C++的基础。要在 C++里使用一段 C 的代码,必须要用 extern “C” 括起来。C++跟 C虽然语法上有重叠,但是它们是两个不同的东西,内存里的布局是完全不同的,在C++编译器里不用extern “C”括起C代码,会导致编译器不知道该如何为 C 代码描述内存布局。可能在 sqlite3.c 里人家已经把整段代码都 extern “C” 括起来了,但是你遇到一个.c 文件就自觉的再括一次,也没什么不好。 
  8. */  
  9.   
  10. //-----------------------------------------------------OK,尽情的爽吧---------------------------------------------------//  
  11.   
  12. 下载是我简单作用sqlite3的代码,不好看,请包涵!  
  13.   
  14.  详细教程在这:http://download.csdn.net/detail/q775968375/5970059  
  15.   
  16. void CMySqliteDlg::OnBnClickedOk()  
  17. {  
  18.     // TODO: 在此添加控件通知处理程序代码  
  19.     //CDialogEx::OnOK();  
  20.     CTime m_time;  
  21.     m_time=CTime::GetCurrentTime();//获取当前时间日期    
  22.     FILE *fp=fopen("debug.txt","a+");  
  23.     fprintf(fp,"\n------------------------%s------------------------\n"  
  24.         ,m_time.Format(_T("%Y-%m-%d %H:%M:%S %A")));  
  25.   
  26.     ::sqlite3 *db=NULL;  
  27.     ::sqlite3_stmt *stmt;  
  28.     char *sql=NULL,*error=NULL;  
  29.     const char *tail=NULL;  
  30.     int res;  
  31.     res=::sqlite3_open("MySqlite.db",&db);//打开数据库(不存在创建)  
  32.     if(res!=SQLITE_OK){  
  33.         ::sqlite3_close(db);  
  34.         fprintf(fp,"open database is failure:%s\n",::sqlite3_errmsg(db));  
  35.         return;  
  36.     }else fprintf(fp,"open database is success!\n");  
  37.   
  38.         //create table  
  39.         sql="create table if not exists MyTable(Row integer primary key autoincrement,Content text)";  
  40.         res=::sqlite3_exec(db,sql,NULL,NULL,&error);  
  41.         if(res!=SQLITE_OK){  
  42.           ::sqlite3_close(db);  
  43.           fprintf(fp,"error create table:%s %s\n",error,::sqlite3_errmsg(db));  
  44.           return;  
  45.         }else fprintf(fp,"table is created\n");  
  46.       
  47.   
  48.         //insert  
  49.         sql="insert or replace into MyTable(Row,Content) values(?,?)";  
  50.         //sqlite3_prepare_v2的作用是将UTF-8格式的SQL语句转换为编译后的语句,并返回指向该语句的指针    
  51.         res=::sqlite3_prepare_v2(db,sql,-1,&stmt,&tail);  
  52.         if(res!=SQLITE_OK){  
  53.           ::sqlite3_close(db);  
  54.           fprintf(fp,"insert is failure:%s %s\n",tail,::sqlite3_errmsg(db));  
  55.           return;  
  56.         }  
  57.         for(int i=0;i<3;i++){  
  58.         //::sqlite3_bind_int(stmt,1,0);//1:id  2:data  
  59.         ::sqlite3_bind_text(stmt,2,"数据库数据",-1,NULL);  
  60.         if(::sqlite3_step(stmt)!=SQLITE_DONE){  
  61.             fprintf(fp,"error update table:%s\n",::sqlite3_errmsg(db));  
  62.          }  
  63.         ::sqlite3_reset(stmt); //重新初始化该sqlite3_stmt对象绑定的变量。  
  64.         }  
  65.         ::sqlite3_finalize(stmt);  
  66.         //delete  
  67.         sql="delete from MyTable where Row=2";  
  68.         //res=::sqlite3_prepare_v2(db,sql,-1,&stmt,&tail);  
  69.         res=::sqlite3_exec(db,sql,NULL,NULL,&error);  
  70.         if(res!=SQLITE_OK){  
  71.           ::sqlite3_close(db);  
  72.           fprintf(fp,"delete error:%s %s\n",error,::sqlite3_errmsg(db));  
  73.           return;  
  74.         }else fprintf(fp,"delete is success\n");  
  75.         ::sqlite3_finalize(stmt);  
  76.         //update  
  77.         sql="update MyTable set Content='修改后的数据' where Row=3";  
  78.         res=::sqlite3_exec(db,sql,NULL,NULL,&error);  
  79.         if(res!=SQLITE_OK){  
  80.           ::sqlite3_close(db);  
  81.           fprintf(fp,"update error:%s %s\n",error,::sqlite3_errmsg(db));  
  82.           return;  
  83.         }else fprintf(fp,"update is success\n");  
  84.         ::sqlite3_finalize(stmt);  
  85.         //query  
  86.         sql="select Row,Content from MyTable order by Row";  
  87.         res=::sqlite3_prepare_v2(db,sql,-1,&stmt,&tail);  
  88.         if(res!=SQLITE_OK){  
  89.           ::sqlite3_close(db);  
  90.           fprintf(fp,"query is failure:%s %s\n",tail,::sqlite3_errmsg(db));  
  91.           return;  
  92.         }  
  93.         while(::sqlite3_step(stmt)==SQLITE_ROW){  
  94.             static int cnt=::sqlite3_column_count(stmt);  
  95.             for(int i=0;i<cnt;i++){  
  96.                 fprintf(fp,"Data:%s\n",::sqlite3_column_text(stmt,i));  
  97.             }  
  98.             /* 
  99.             int row=::sqlite3_column_int(stmt,0); 
  100.             char *rowData=(char*)::sqlite3_column_text(stmt,1); 
  101.             if(rowData==NULL)rowData="NULL"; 
  102.             */  
  103.         }  
  104.         //释放statement  
  105.         ::sqlite3_finalize(stmt);  
  106.         //关闭数据库  
  107.         ::sqlite3_close(db);  
  108.         ::fclose(fp);  
  109. }  
posted on 2017-12-27 13:43  windy_net  阅读(266)  评论(0编辑  收藏  举报