數據庫編程入門培訓(二)

本文爲數據庫編程入門培訓的第二講,主要講述一下數據庫編程具體怎麼實現。示例代碼在本文後面的附件中能夠下載。ios

      如上篇文章所描述的那樣,因爲Microsoft Access數據庫比較直觀,適合初學者入門學習,故我在此依然以Access爲例,示範如何對數據庫進行編程練習; 並且,我使用的編程示例是基於Microsoft公司提供的Dao技術,雖然該技術已經早已過期,可是因爲它的編程簡單、明晰,很適合初學者,故依然在此使用Dao技術作數據庫編程的示範,但願數據庫編程高手們可以理解。數據庫

       回顧上篇文章描述的,咱們對數據庫的操做主要分爲如下幾個方面:編程

          1. 初始化/逆初始化數據庫引擎 (操做數據庫引擎)
          2. 建立/打開/關閉數據庫 (操做數據庫文件)
          3. 查找/打開/新增/刪除一個數據表 (操做數據庫的表)
          4. 爲一個新數據表添加字段,刪除字段,修改字段屬性 (操做數據庫的字段)
          5. 添加/刪除/修改一條記錄 (操做記錄集)
          6. 根據條件檢索出知足條件的記錄集 (查詢和檢索)
          7. 其餘:移動到下一條記錄,獲取表的總個數,獲取記錄的總數……微信

       所以,我將經過示例代碼來實現上述的某些基本功能,具體的各個類各個函數的用法,你們能夠本身查看MSDN,裏面都有很是詳細的說明。函數

 
  1. //////////////////////////////////////////////////////////////////////////  
  2. /// COPYRIGHT NOTICE  
  3. /// Copyright (c) 2009, 華中科技大學tickTick Group  (版權聲明)  
  4. /// All rights reserved.  
  5. ///   
  6. /// @file    testDB.cpp    
  7. /// @brief   數據庫測試文件  
  8. ///  
  9. /// 本文件示範了Dao數據庫訪問方法  
  10. ///  
  11. /// @version 1.0     
  12. /// @author  盧俊   
  13. /// @date    2010/05/10  
  14. ///  
  15. ///  
  16. ///  修訂說明:  
  17. //////////////////////////////////////////////////////////////////////////  
  18.  
  19. // 須要使用Dao技術訪問數據庫,必須包含afxdao.h  
  20. #include <afxdao.h>  
  21. #include <iostream>  
  22.  
  23. // 由於DAO技術如今微軟已經不在作技術支持了,  
  24. // 說在將來版本中可能再也不支持此,因此會有警告,  
  25. // 但由於其簡單,易於初學者學習,故在此我依然拿它作例子  
  26. // 這裏,disabled掉這個警告。  
  27. #pragma warning(disable : 4995)  
  28.  
  29. // 工程配置注意事項  
  30. // 因爲CDaoDatabase是派生於MFC的CObject類,故工程中須要加入MFC共享庫的支持  
  31. // 具體配置方法,修改VS2008左側的工程名稱上右鍵->屬性(properties)->常規(general)->使用MFC(use of mfc)  
  32. // 選擇Use MFC in a Shared DL  
  33.  
  34. int _tmain(int argc, _TCHAR* argv[])  
  35. {  
  36.     // 數據庫操做類  
  37.     CDaoDatabase m_db;      
  38.  
  39.     // 數據庫用戶信息表操做對象  
  40.     // MSDN上有說明,該類對象建立時須要綁定表所依附的數據庫對象  
  41.     CDaoTableDef m_tableDef(&m_db);  
  42.  
  43.     // 建立記錄集對象  
  44.     CDaoRecordset rs(&m_db);  
  45.  
  46.     // DAO引擎初始化  
  47.     AfxDaoInit();  
  48.  
  49.     //建立無密碼的數據庫  
  50.     TRY  
  51.     {  
  52.         m_db.Create(_T("D:\\user.mdb"),dbLangGeneral,dbVersion30);      
  53.     }  
  54.     CATCH(CDaoException, e)  
  55.     {  
  56. // 經過這條語句能夠將錯誤描述字符串存儲到szError中
       CString szError = e->m_pErrorInfo-> m_strDescription;
  57.         std::cout << "error occur !" <<std::endl;  
  58.         return 0;  
  59.     }  
  60.     END_CATCH  
  61.  
  62.     // 打開數據庫  
  63.     if (!m_db.IsOpen())  
  64.     {  
  65.         TRY  
  66.         {  
  67.             // 參數1:數據庫全路徑,參數2:是否獨佔,參數3:是否只讀模式,參數4:密碼  
  68.             m_db.Open(_T("D:\\user.mdb"), TRUE, FALSE, _T(""));  
  69.         }  
  70.         CATCH(CDaoException, e)  
  71.         {  
  72.             std::cout << "error occur !" <<std::endl;  
  73.             return 0;  
  74.         }  
  75.         END_CATCH  
  76.     }  
  77.  
  78.     // 建立表  
  79.     TRY  
  80.     {  
  81.         m_tableDef.Create(_T("登陸信息表"));  
  82.     }  
  83.     CATCH(CDaoException, e)  
  84.     {  
  85.         std::cout << "error occur !" <<std::endl;  
  86.         return 0;  
  87.     }  
  88.     END_CATCH  
  89.  
  90.     // 建立字段  
  91.     TRY  
  92.     {  
  93.         // 學號  
  94.         m_tableDef.CreateField(_T("學號"),dbText,200,dbVariableField|dbUpdatableField);  
  95.         // 密碼  
  96.         m_tableDef.CreateField(_T("密碼"),dbText,200,dbVariableField|dbUpdatableField);  
  97.         // 年齡  
  98.         m_tableDef.CreateField(_T("年齡"),dbLong,200,dbVariableField|dbUpdatableField);  
  99.  
  100.         // 添加到數據庫中  
  101.         m_tableDef.Append();  
  102.     }  
  103.     CATCH(CDaoException, e)  
  104.     {  
  105.         std::cout << "error occur !" <<std::endl;  
  106.         return 0;  
  107.     }  
  108.     END_CATCH  
  109.  
  110.     // 添加一條新的記錄  
  111.     TRY    
  112.     {    
  113.         // 打開記錄集  
  114.         rs.Open(&m_tableDef);  
  115.  
  116.         // 移動到記錄集的尾部  
  117.         if (!rs.IsEOF())  
  118.         {  
  119.             rs.MoveLast();  
  120.         }  
  121.  
  122.         // 準備添加一條新的記錄   
  123.         rs.AddNew();    
  124.         // 學號  
  125.         rs.SetFieldValue(_T("學號"),_T("012006011208"));  
  126.         // 密碼  
  127.         rs.SetFieldValue(_T("密碼"),_T("123456"));  
  128.         // 年齡  
  129.         rs.SetFieldValue(_T("年齡"),_T("18"));  
  130.         // 執行添加操做到數據庫  
  131.         rs.Update();    
  132.  
  133.         // 關閉記錄集  
  134.         rs.Close();  
  135.     }  
  136.     CATCH(CDaoException, e)  
  137.     {  
  138.         std::cout << "error occur !" <<std::endl;  
  139.         return 0;  
  140.     }  
  141.     END_CATCH  
  142.  
  143.     // 獲取用戶記錄  
  144.     TRY    
  145.     {  
  146.         // 打開記錄集  
  147.         rs.Open(&m_tableDef);  
  148.  
  149.         // 移動到第一條記錄  
  150.         rs.MoveFirst();  
  151.  
  152.         COleVariant coleUserNo;  
  153.         COleVariant colePassword;  
  154.         COleVariant coleAge;  
  155.  
  156.         // 獲取值  
  157.         rs.GetFieldValue(_T("學號"), coleUserNo);  
  158.         rs.GetFieldValue(_T("密碼"), colePassword);  
  159.         rs.GetFieldValue(_T("年齡"), coleAge);  
  160.  
  161.         // 提取出整型數   
  162.         LONG age = coleAge.lVal;  
  163.  
  164.         // 提取字符串數據  
  165.         CString szUserNo = V_BSTR(&coleUserNo);   
  166.         CString szPassword = V_BSTR(&colePassword);  
  167.  
  168.         // 關閉記錄集  
  169.         rs.Close();  
  170.  
  171.     }  
  172.     CATCH(CDaoException, e)  
  173.     {  
  174.         std::cout << "error occur !" <<std::endl;  
  175.         return 0;  
  176.     }  
  177.     END_CATCH  
  178.           
  179.     // 關閉數據庫  
  180.     TRY  
  181.     {  
  182.         if (m_db.IsOpen())  
  183.         {  
  184.             m_db.Close();  
  185.         }  
  186.     }  
  187.     CATCH(CDaoException, e)  
  188.     {  
  189.         std::cout << "error occur !" <<std::endl;  
  190.     }  
  191.     END_CATCH  
  192.  
  193.     // DAO引擎註銷  
  194.     AfxDaoTerm();  
  195.  
  196.     std::cout << " 數據庫文件已經輸出到D://user.mdb" << std::endl;  
  197.       
  198.     int temp;  
  199.     std::cin >> temp;  
  200.  
  201.     return 1;  
  202. }  

      但願你們仔細閱讀上述代碼,並經過MSDN的幫助,真正對數據庫編程有一個直觀的認識,之後進行其餘類型的數據庫編程就能夠很快地上手了。學習

      爲了檢驗你們是否真正瞭解和掌握了數據庫編程,下面我出一道題目,但願你們依靠本身的能力把它實現,權當練習練習。測試

題目:簡單的登錄系統.net

提供簡單的註冊功能,註冊信息包括:對象

用戶名(不容許重複),登陸密碼,性別,年齡blog

使用Access數據庫存儲上述信息

程序提供以下功能:
1. 啓動程序後,自動建立數據庫文件、用戶信息表、相應的字段
2. 可以刪除數據表,而後重建數據表
3. 可以新增一條用戶記錄
4. 可以顯示數據庫中的所有用戶名
5. 可以顯示指定用戶名的我的信息
6. 可以刪除指定用戶名的記錄
7. 可以修改指定用戶名的用戶的年齡
8. 可以查詢顯示「年齡>18歲」的全部用戶名

 

結束語

 

免費學習更多精品課程,登陸樂搏學院官網http://www.learnbo.c/

或關注咱們的官方微博微信,還有更多驚喜哦~

 

本文出自 「Jhuster的專欄」 博客,請務必保留此出處http://ticktick.blog.51cto.com/823160/315190

相關文章
相關標籤/搜索