導航:首頁 > 方法技巧 > 如何講解一個資料庫的使用方法

如何講解一個資料庫的使用方法

發布時間:2022-09-04 09:46:09

Ⅰ 誰懂ACCESS資料庫的基本操作,替我講解一個題目,重謝啊!

1:打開access
2:點擊新建,選擇表,
3:裡面輸入對應的內容,
4:保存時輸入表名即可,

Ⅱ php中選擇打開資料庫的方法是

Ⅲ 請通俗的說明一下資料庫是幹嘛的能用到普通生活之中來嗎

資料庫,也叫數據倉庫。從這個詞上來看,你應該能看出一個解釋來,資料庫就是用來存放數據的倉庫。
現實生活中的倉庫用來存放貨物,資料庫則是用來存放數據的。當然現在資料庫的產品很多,主流也就是微軟系列sql server、access。還有一個就是你也提到的甲骨文的Oralcle 。理論上這些個資料庫都不是免費的,但是在中國你能用盜版的,相當於免費。
你所說的用來管理你一些雞毛蒜皮的小事這個是當然可以了,相當於就是把你日常的一些收入和支出的一些數據存在資料庫里,資料庫的存在就是為了解決你所謂的這些小事數據的存儲問題的,沒有什麼會不會吐血的問題。但是你如果要用資料庫,你得設計出有一系列有實際功能的應用軟體來處理這些數據吧,不然光用資料庫有何意義,那還不如去用execl。就好比你光有倉庫,你沒有店面,你怎麼展示你的產品(也就是你的數據)給顧客或是使用者去使用。資料庫里的數據只有經過軟體處理成有用的信息以後才會有使用意義。就比如說有下列一些數據逗90元、200元、100元、3500元、人民幣、工資、吃飯、車費、水電氣費用、3月份地。資料庫里就存著這樣形式的數據,別人進去一看都是一些零散的數據,也不知這些代表什麼。如果經過軟體處理成有用的信息別人就可以看懂了,這些數據才有意義。又比如把上面的數據經過軟體處理成以下信息逗3月份水電氣費用200元人民幣、3月份車費90元人民幣、3月份工資3500元人民幣地,經過軟體處理後的數據就變成了有意義的信息才能供用戶使用。
現在你大概明白資料庫的意義以及與之對應的應用軟體的意義了吧。
如果要想真的說明以上這系列的問題,不是在這里能說清的,如果樓主對這方面很有興趣可以去多了解下這方面的知識。希望我的回答對你一定的幫助!謝謝!

Ⅳ 資料庫類怎麼調用,求講解,怎麼寫資料庫類 誰能幫忙

跟java一樣的吧,同一個方法,比如過程有重復使用的可能,就可以寫一個方法把不同過程名當參數傳入,調用跟過程一樣調用。

Ⅳ 資料庫是什麼,通俗明白易懂的解釋、。

資料庫說白了,就是存儲數據的倉庫,所有的數據都可以往裡面存,圖片、音樂、視頻、文本等,它應用於我們生活的各個領域,最常見的,我們的手機裡面,電話
本,簡訊,都是存在一個庫裡面,平時使用的QQ聊天工具,所有的好友,聊天記錄都是存在庫中的,這也就是所謂的資料庫,我們使用的操作系統,也是一個文件
庫,現在的網游、網站、軟體、辦系統,都離不開資料庫的支撐,只不過通過特殊的設置和安排,讓不同身份的操作者,執行對資料庫不同的操作許可權,你提問題,
是向資料庫裡面寫一條記錄,同時顯示到前端Web界面,我來回答也是對應您的問題也同時往資料庫中寫一個答案,資料庫就是如此神奇

Ⅵ SQL資料庫怎樣使用表組織數據

我們使用SQL資料庫其實就是使用很多表,資料庫是由表組成的,而數據也是以表的形式展現出來的,表是列的集合也是信息數據的容器,很多表就構成了資料庫。這篇文章講解如何使用表組織數據,使資料庫的結構完整性。下面我們採用個案例:建立學生資料庫表來講解如何創建資料庫使用表組織數據。

Ⅶ 安卓怎麼使用sqlite資料庫實例

SQPte 一個非常流行的嵌入式資料庫,它支持 SQL 語言,並且只利用很少的內存就有很好的性能。此外它還是開源的,任何人都可以使用它。許多開源項目((Mozilla, PHP, Python)都使用了 SQPte. SQPte 由以下幾個組件組成:SQL 編譯器、內核、後端以及附件。SQPte 通過利用虛擬機和虛擬資料庫引擎(VDBE),使調試、修改和擴展 SQPte 的內核變得更加方便。 圖 1. SQPte 內部結構 SQPte 基本上符合 SQL-92 標准,和其他的主要 SQL 資料庫沒什麼區別。它的優點就是高效,Android 運行時環境包含了完整的 SQPte。 SQPte 和其他資料庫最大的不同就是對數據類型的支持,創建一個表時,可以在 CREATE TABLE 語句中指定某列的數據類型,但是你可以把任何數據類型放入任何列中。當某個值插入資料庫時,SQPte 將檢查它的類型。如果該類型與關聯的列不匹配,則 SQPte 會嘗試將該值轉換成該列的類型。如果不能轉換,則該值將作為其本身具有的類型存儲。比如可以把一個字元串(String)放入 INTEGER 列。SQPte 稱這為“弱類型”(manifest typing.)。 此外,SQPte 不支持一些標準的 SQL 功能,特別是外鍵約束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FPL OUTER JOIN, 還有一些 ALTER TABLE 功能。 除了上述功能外,SQPte 是一個完整的 SQL 系統,擁有完整的觸發器,交易等等。 Android 集成了 SQPte 資料庫 Android 在運行時(run-time)集成了 SQPte,所以每個 Android 應用程序都可以使用 SQPte 資料庫。對於熟悉 SQL 的開發人員來時,在 Android 開發中使用 SQPte 相當簡單。但是,由於 JDBC 會消耗太多的系統資源,所以 JDBC 對於手機這種內存受限設備來說並不合適。因此,Android 提供了一些新的 API 來使用 SQPte 資料庫,Android 開發中,程序員需要學使用這些 API。 資料庫存儲在 data/< 項目文件夾 >/databases/ 下。 Android 開發中使用 SQPte 資料庫 Activites 可以通過 Content Provider 或者 Service 訪問一個資料庫。下面會詳細講解如果創建資料庫,添加數據和查詢資料庫。 創建資料庫 Android 不自動提供資料庫。在 Android 應用程序中使用 SQPte,必須自己創建資料庫,然後創建表、索引,填充數據。Android 提供了 SQPteOpenHelper 幫助你創建一個資料庫,你只要繼承 SQPteOpenHelper 類,就可以輕松的創建資料庫。SQPteOpenHelper 類根據開發應用程序的需要,封裝了創建和更新資料庫使用的邏輯。SQPteOpenHelper 的子類,至少需要實現三個方法: 構造函數,調用父類 SQPteOpenHelper 的構造函數。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的游標工廠(通常是 NPl),一個代表你正在使用的資料庫模型版本的整數。 onCreate()方法,它需要一個 SQPteDatabase 對象作為參數,根據需要對這個對象填充表和初始化數據。 onUpgrage() 方法,它需要三個參數,一個 SQPteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。 下面示例代碼展示了如何繼承 SQPteOpenHelper 創建資料庫: pubPc class DatabaseHelper extends SQPteOpenHelper { DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version) { super(context, name, cursorFactory, version); } @Override pubPc void onCreate(SQPteDatabase db) { // TODO 創建資料庫後,對資料庫的操作 } @Override pubPc void onUpgrade(SQPteDatabase db, int PdVersion, int newVersion) { // TODO 更改資料庫版本的操作 } @Override pubPc void onOpen(SQPteDatabase db) { super.onOpen(db); // TODO 每次成功打開資料庫後首先被執行 } } 接下來討論具體如何創建表、插入數據、刪除表等等。調用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQPteDatabase 實例,具體調用那個方法,取決於你是否需要改變資料庫的內容: db=(new DatabaseHelper(getContext())).getWritableDatabase(); return (db == nPl) ? false : true; 上面這段代碼會返回一個 SQPteDatabase 類的實例,使用這個對象,你就可以查詢或者修改資料庫。 當你完成了對資料庫的操作(例如你的 Activity 已經關閉),需要調用 SQPteDatabase 的 Close() 方法來釋放掉資料庫連接。 創建表和索引 為了創建表和索引,需要調用 SQPteDatabase 的 execSQL() 方法來執行 DDL 語句。如果沒有異常,這個方法沒有返回值。 例如,你可以執行如下代碼: db.execSQL("CREATE TABLE mytable (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, value REAL);"); 這條語句會創建一個名為 mytable 的表,表有一個列名為 _id,並且是主鍵,這列的值是會自動增長的整數(例如,當你插入一行時,SQPte 會給這列自動賦值),另外還有兩列:title( 字元 ) 和 value( 浮點數 )。 SQPte 會自動為主鍵列創建索引。 通常情況下,第一次創建資料庫時創建了表和索引。如果你不需要改變表的 schema,不需要刪除表和索引 . 刪除表和索引,需要使用 execSQL() 方法調用 DROP INDEX 和 DROP TABLE 語句。 給表添加數據 上面的代碼,已經創建了資料庫和表,現在需要給表添加數據。有兩種方法可以給表添加數據。 像上面創建表一樣,你可以使用 execSQL() 方法執行 INSERT, UPDATE, DELETE 等語句來更新表的數據。execSQL() 方法適用於所有不返回結果的 SQL 語句。例如: db.execSQL("INSERT INTO widgets (name, inventory)"+ "VALUES ('Sprocket', 5)"); 另一種方法是使用 SQPteDatabase 對象的 insert(), update(), delete() 方法。這些方法把 SQL 語句的一部分作為參數。示例如下: ContentValues cv=new ContentValues(); cv.put(Constants.TITLE, "example title"); cv.put(Constants.VALUE, SensorManager.GRAVITY_DEATH_STAR_I); db.insert("mytable", getNPlCPumnHack(), cv); update()方法有四個參數,分別是表名,表示列名和值的 ContentValues 對象,可選的 WHERE 條件和可選的填充 WHERE 語句的字元串,這些字元串會替換 WHERE 條件中的“?”標記。update() 根據條件,更新指定列的值,所以用 execSQL() 方法可以達到同樣的目的。 WHERE 條件和其參數和用過的其他 SQL APIs 類似。例如: String[] parms=new String[] {"this is a string"}; db.update("widgets", replacements, "name=?", parms); delete() 方法的使用和 update() 類似,使用表名,可選的 WHERE 條件和相應的填充 WHERE 條件的字元串。 查詢資料庫 類似 INSERT, UPDATE, DELETE,有兩種方法使用 SELECT 從 SQPte 資料庫檢索數據。 1 .使用 rawQuery() 直接調用 SELECT 語句; 使用 query() 方法構建一個查詢。 Raw Queries正如 API 名字,rawQuery() 是最簡單的解決方法。通過這個方法你就可以調用 SQL SELECT 語句。例如: Cursor c=db.rawQuery( "SELECT name FROM sqPte_master WHERE type='table' AND name='mytable'", nPl); 在上面例子中,我們查詢 SQPte 系統表(sqPte_master)檢查 table 表是否存在。返回值是一個 cursor 對象,這個對象的方法可以迭代查詢結果。如果查詢是動態的,使用這個方法就會非常復雜。例如,當你需要查詢的列在程序編譯的時候不能確定,這時候使用 query() 方法會方便很多。 RegPar Queriesquery() 方法用 SELECT 語句段構建查詢。SELECT 語句內容作為 query() 方法的參數,比如:要查詢的表名,要獲取的欄位名,WHERE 條件,包含可選的位置參數,去替代 WHERE 條件中位置參數的值,GROUP BY 條件,HAVING 條件。除了表名,其他參數可以是 nPl。所以,以前的代碼段可以可寫成: String[] cPumns={"ID", "inventory"}; String[] parms={"snicklefritz"}; Cursor resPt=db.query("widgets", cPumns, "name=?",parms, nPl, nPl, nPl); 使用游標不管你如何執行查詢,都會返回一個 Cursor,這是 Android 的 SQPte 資料庫游標,使用游標,你可以:通過使用 getCount() 方法得到結果集中有多少記錄;通過 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍歷所有記錄;通過 getCPumnNames() 得到欄位名;通過 getCPumnIndex() 轉換成欄位號;通過 getString(),getInt() 等方法得到給定欄位當前記錄的值;通過 requery() 方法重新執行查詢得到游標;通過 close() 方法釋放游標資源;例如,下面代碼遍歷 mytable 表 Cursor resPt=db.rawQuery("SELECT ID, name, inventory FROM mytable"); resPt.moveToFirst(); while (!resPt.isAfterLast()) { int id=resPt.getInt(0); String name=resPt.getString(1); int inventory=resPt.getInt(2); // do something usefP with these resPt.moveToNext(); } resPt.close(); 在 Android 中使用 SQPte 資料庫管理工具 在其他資料庫上作開發,一般都使用工具來檢查和處理資料庫的內容,而不是僅僅使用資料庫的 API。使用 Android 模擬器,有兩種可供選擇的方法來管理資料庫。首先,模擬器綁定了 sqPte3 控制台程序,可以使用 adb shell 命令來調用他。只要你進入了模擬器的 shell,在資料庫的路徑執行 sqPte3 命令就可以了。資料庫文件一般存放 在:/data/data/your.app.package/databases/your-db-name如果你喜歡使用更友好的工具,你 可以把資料庫拷貝到你的開發機上,使用 SQPte-aware 客戶端來操作它。這樣的話,你在一個資料庫的拷貝上操作,如果你想要你的修改能反映到設備上,你需要把資料庫備份回去。把資料庫從設備上考出來,你可以使 用 adb pPl 命令(或者在 IDE 上做相應操作)。存儲一個修改過的資料庫到設備上,使用 adb push 命令。一個最方便的 SQPte 客戶端是 FireFox SQPte Manager 擴展,它可以跨所有平台使用。 圖 2. SQPte Manager 結束語 如果你想要開發 Android 應用程序,一定需要在 Android 上存儲數據,使用 SQPte 資料庫是一種非常好的選擇。本文介紹了如何在 Android 應用程序中使用 SQPte 資料庫 ,主要介紹了在 Android 應用程序中使用 SQPte 創建資料庫和表、添加數據、更新和檢索數據,還介紹了比較常用的 SQPte 管理工具,通過閱讀本文,你可以在 Android 中輕松操作 SQPte 資料庫。

Ⅷ 如何使用SQLyogEnt來建立一個簡單的資料庫

如果你選擇PHP進行網站建設,那你必須懂得php建立資料庫,那用mysql數據就是必須的了。剛接觸php的朋友也許對這個mysql資料庫
很陌生,但如果有一款非常好用的資料庫管理工具,那是用起來就方便多了,筆者幾天就向大家介紹一款mysql的管理工具SQLyogEnt,筆者是用的
SQLyogEnt是英文版,目前好像沒有中文版,由於功能強大,所以SQLyogEnt很受PHP用戶的喜愛,接下就用實例來講解下如何使用 SQLyogEnt來建立一個簡單的資料庫。
今天我建立的資料庫名叫「mydb」,資料庫里包含一個表「news」。接下來我們就打開SQLyogEnt實際操作一下。

第一,打開SQLyogEnt,由於要運行mysql必須要先開啟運行環境,筆者使用的php運行環境是wamp,很好使用,一鍵安裝。

第二,打開SQLyogEnt後會首先彈出鏈接資料庫的界面,如圖,mysql
hostaddress選項框填寫書庫的地址,默認本機就是「localhost」,user
name選項框是填寫資料庫的管理用戶名,本機默認「root」,password選項框是填寫資料庫的管理密碼,本機默認為空,port是資料庫埠,
默認就可以了,最後點解「connect」按鈕進行鏈接。

如果地址,用戶名,密碼都正確就會鏈接成功,在隨機彈出的界面左方就是整個資料庫列表,如圖。

第三,新建一個資料庫。在左側列表的空白處單擊滑鼠右鍵,彈出的菜單中,選擇「create
database」,接著會彈出填寫資料庫名的選項框,如圖,我們這里填寫「mydb」,接著單擊「create」按鈕,「mydb」資料庫就創建成功
了,在左邊的資料庫列表裡會出現「mydb」資料庫。

第四,在「mydb」資料庫中創建「news」表,在左邊菜單找到「mydb」資料庫,然後在上面右擊,在彈出的菜單中,選擇「create table」,會彈出,創建表的界面,如圖

第五,創建欄位,首先介紹下SQLyogEnt工具創建表界面。「field」列是欄位名,「datetype」是欄位類型,「len」是欄位
長度,「PK」是否是主鍵,「NOT NULL」是否允許為空,「auto incr」是否自動增長(一般主鍵才會選擇),「comment」欄位
描述,好了介紹了創建界面,下面其實很簡單了。大家可以看下我是這么設置「news」表的。設置完成後單擊「create
table」按鈕,接下來會彈出設置表名的對話框,寫入「news」單擊「OK」按鈕即可。

好了經過上面的五個步驟,你已經建立了一個mysql資料庫,並且裡面 包含了一個表,你可以更具自己網站的實際需求來進行表的建設,在接下來我會繼續向大家講解關於SQLyogEnt其他方面的應用。

Ⅸ 實例講解如何使用C++操作MySQL資料庫類

/* * project: * 通用模塊 ( 用 c++ 處理 mysql 資料庫類,像ADO ) * * description: * * 通過DataBase,RecordSet,Record,Field類,實現對mysql資料庫的操作 * 包括連接、修改、添加、刪除、查詢等等,像ADO一樣操作資料庫,使 * 用方便 * * ( the end of this file have one sample, * welcom to use... ) * * * file:zlb_mysql.h * * author: @ zlb * * time:2005-12-12 * * * --*/ #ifndef ZLB_MYSQL_H #define ZLB_MYSQL_H #include "mysql.h" #include <iostream> #include <vector> #include <string> using namespace std; namespace zlb_mysql{ /* * 欄位操作 */ class Field { public : /* 欄位名稱 */ vector<string> m_name; /* 欄位類型 */ vector<enum_field_types> m_type; public : Field(); ~Field(); /* 是否是數字 */ bool IsNum(int num); /* 是否是數字 */ bool IsNum(string num); /* 是否是日期 */ bool IsDate(int num); /* 是否是日期 */ bool IsDate(string num); /* 是否是字元 */ bool IsChar(int num); /* 是否是字元 */ bool IsChar(string num); /* 是否為二進制數據 */ bool IsBlob(int num); /* 是否為二進制數據 */ bool IsBlob(string num); /* 得到指定欄位的序號 */ int GetField_NO(string field_name); }; /* * 1 單條記錄 * 2 [int ]操作 [""]操作 */ class Record { public: /* 結果集 */ vector<string> m_rs; /* 欄位信息 佔用4位元組的內存 當記錄數很大是回產生性能問題 */ Field *m_field; public : Record(){}; Record(Field* m_f); ~Record(); void SetData(string value); /* [""]操作 */ string operator[](string s); string operator[](int num); /* null值判斷 */ bool IsNull(int num); bool IsNull(string s); /* 用 value tab value 的形式 返回結果 */ string GetTabText(); }; /* * 1 記錄集合 * 2 [int ]操作 [""]操作 * 3 表結構操作 * 4 數據的插入修改 */ class RecordSet { private : /* 記錄集 */ vector<Record> m_s; /* 游標位置*/ unsigned long pos; /* 記錄數 */ int m_recordcount; /* 欄位數 */ int m_field_num; /* 欄位信息 */ Field m_field; MYSQL_RES * res ; MYSQL_FIELD * fd ; MYSQL_ROW row; MYSQL* m_Data ; public : RecordSet(); RecordSet(MYSQL *hSQL); ~RecordSet(); /* 處理返回多行的查詢,返回影響的行數 */ int ExecuteSQL(const char *SQL); /* 得到記錄數目 */ int GetRecordCount(); /* 得到欄位數目 */ int GetFieldNum(); /* 向下移動游標 */ long MoveNext(); /* 移動游標 */ long Move(long length); /* 移動游標到開始位置 */ bool MoveFirst(); /* 移動游標到結束位置 */ bool MoveLast(); /* 獲取當前游標位置 */ unsigned long GetCurrentPos()const; /* 獲取當前游標的對應欄位數據 */ bool GetCurrentFieldValue(const char * sFieldName,char *sValue); bool GetCurrentFieldValue(const int iFieldNum,char *sValue); /* 獲取游標的對應欄位數據 */ bool GetFieldValue(long index,const char * sFieldName,char *sValue); bool GetFieldValue(long index,int iFieldNum,char *sValue); /* 是否到達游標尾部 */ bool IsEof(); /* 返回欄位 */ Field* GetField(); /* 返回欄位名 */ const char * GetFieldName(int iNum); /* 返回欄位類型 */ const int GetFieldType(char * sName); const int GetFieldType(int iNum); /* 返回指定序號的記錄 */ Record operator[](int num); }; /* * 1 負責資料庫的連接關閉 * 2 執行sql 語句(不返回結果) * 3 處理事務 */ class DataBase { public : DataBase(); ~DataBase(); private : /* msyql 連接句柄 */ MYSQL* m_Data; public : /* 返回句柄 */ MYSQL * GetMysql(); /* 連接資料庫 */ int Connect(string host, string user, string passwd, string db, unsigned int port, unsigned long client_flag); /* 關閉資料庫連接 */ void DisConnect(); /* 執行非返回結果查詢 */ int ExecQuery(string sql); /* 測試mysql伺服器是否存活 */ int Ping(); /* 關閉mysql 伺服器 */ int ShutDown(); /* 主要功能:重新啟動mysql 伺服器 */ int ReBoot(); /* * 說明:事務支持InnoDB or BDB表類型 */ /* 主要功能:開始事務 */ int Start_Transaction(); /* 主要功能:提交事務 */ int Commit(); /* 主要功能:回滾事務 */ int Rollback(); /* 得到客戶信息 */ const char * Get_client_info(); /* 主要功能:得到客戶版本信息 */ const unsigned long Get_client_version(); /* 主要功能:得到主機信息 */ const char * Get_host_info(); /* 主要功能:得到伺服器信息 */ const char * Get_server_info(); /*主要功能:得到伺服器版本信息*/ const unsigned long Get_server_version(); /*主要功能:得到 當前連接的默認字元集*/ const char * Get_character_set_name(); /* 主要功能返回單值查詢 */ char * ExecQueryGetSingValue(string sql); /* 得到系統時間 */ const char * GetSysTime(); /* 建立新資料庫 */ int Create_db(string name); /* 刪除制定的資料庫*/ int Drop_db(string name); }; }; #endif //ZLB_MYSQL_H /* * project: * 通用模塊 ( 用 c++ 處理 mysql 資料庫類,像ADO ) * * description: * * 通過DataBase,RecordSet,Record,Field類,實現對mysql資料庫的操作 * 包括連接、修改、添加、刪除、查詢等等,像ADO一樣操作資料庫,使 * 用方便 * * ( the end of this file have one sample, * welcom to use... ) * * * file:zlb_mysql.cpp * * author: @ zlb * * time:2005-12-12 * * * --*/ #include "stdafx.h" #include "zlb_mysql.h" namespace zlb_mysql{ /* +++++++++++++++++++++++++++++++++++++++++++++++++++ */ /* * 欄位操作 */ Field::Field(){} Field::~Field(){} /* * 是否是數字 */ bool Field::IsNum(int num) { if(IS_NUM(m_type[num])) return true; else return false; } /* * 是否是數字 */ bool Field::IsNum(string num) { if(IS_NUM(m_type[GetField_NO(num)])) return true; else return false; } /* * 是否是日期 */ bool Field::IsDate(int num) { if( FIELD_TYPE_DATE == m_type[num] || FIELD_TYPE_DATETIME == m_type[num] ) return true; else return false; } /* 是否是日期 */ bool Field::IsDate(string num) { int temp; temp=GetField_NO(num); if(FIELD_TYPE_DATE == m_type[temp] || FIELD_TYPE_DATETIME == m_type[temp] ) return true; else return false; } /* * 是否是字元 */ bool Field::IsChar(int num) { if(m_type[num]==FIELD_TYPE_STRING || m_type[num]==FIELD_TYPE_VAR_STRING || m_type[num]==FIELD_TYPE_CHAR ) return true; else return false; } /* * 是否是字元 */ bool Field::IsChar(string num) { int temp; temp=this->GetField_NO (num); if(m_type[temp]==FIELD_TYPE_STRING || m_type[temp]==FIELD_TYPE_VAR_STRING || m_type[temp]==FIELD_TYPE_CHAR ) return true; else return false; } /* * 是否為二進制數據 */ bool Field::IsBlob(int num) { if(IS_BLOB(m_type[num])) return true; else return false; } /* * 是否為二進制數據 */ bool Field::IsBlob(string num) { if(IS_BLOB(m_type[GetField_NO(num)])) return true; else return false; } /* * 得到指定欄位的序號 */ int Field::GetField_NO(string field_name) { for(unsigned int i=0;i<m_name.size ();i++) { if(!m_name[i].compare (field_name)) return i; } return -1; } /*-----------------------------------------------------*/ /* +++++++++++++++++++++++++++++++++++++++++++++++++++ */ /* * 1 單條記錄 * 2 [int ]操作 [""]操作 */ Record::Record(Field * m_f) { m_field =m_f; } Record::~Record(){}; void Record::SetData(string value) { m_rs.push_back (value); } /* [""]操作 */ string Record::operator[](string s) { return m_rs[m_field->GetField_NO(s)]; } string Record::operator[](int num) { return m_rs[num]; } /* null值判斷 */ bool Record::IsNull(int num) { if("" == m_rs[num].c_str ()) return true; else return false; } bool Record::IsNull(string s) { if("" == m_rs[m_field->GetField_NO(s)].c_str()) return true; else return false; } /* 主要-功能:用 value tab value 的形式 返回結果 */ string Record::GetTabText() { string temp; for(unsigned int i=0 ;i<m_rs.size();i++) { temp+=m_rs[i]; if(i<m_rs.size ()-1) temp+="\t"; } return temp; } /*-----------------------------------------------------*/ /* +++++++++++++++++++++++++++++++++++++++++++++++++++ */ /* * 1 記錄集合 * 2 [int ]操作 [""]操作 * 3 表結構操作 * 4 數據的插入修改 */ RecordSet::RecordSet() { res = NULL; row = NULL; pos = 0; } RecordSet::RecordSet(MYSQL *hSQL) { res = NULL; row = NULL; m_Data = hSQL; pos = 0; } RecordSet::~RecordSet() { } /* * 處理返回多行的查詢,返回影響的行數 * 成功返回行數,失敗返回-1 */ int RecordSet::ExecuteSQL(const char *SQL) { if ( !mysql_real_query(m_Data,SQL,strlen(SQL))) { //保存查詢結果 res = mysql_store_result(m_Data ); //得到記錄數量 m_recordcount = (int)mysql_num_rows(res) ; //得到欄位數量 m_field_num = mysql_num_fields(res) ; for (int x = 0 ; fd = mysql_fetch_field(res); x++) { m_field.m_name.push_back(fd->name); m_field.m_type.push_back(fd->type); } //保存所有數據 while (row = mysql_fetch_row(res)) { Record temp(&m_field); for (int k = 0 ; k < m_field_num ; k++ ) { if(row[k]==NULL||(!strlen(row[k]))) { temp.SetData (""); } else { temp.SetData(row[k]); } } //添加新記錄 m_s.push_back (temp); } mysql_free_result(res ) ; return m_s.size(); } return -1; } /* * 向下移動游標 * 返回移動後的游標位置 */ long RecordSet::MoveNext() { return (++pos); } /* 移動游標 */ long RecordSet::Move(long length) { int l = pos + length; if(l<0) { pos = 0; return 0; }else { if(l >= m_s.size()) { pos = m_s.size()-1; return pos; }else { pos = l; return pos; } } } /* 移動游標到開始位置 */ bool RecordSet::MoveFirst() { pos = 0; return true; } /* 移動游標到結束位置 */ bool RecordSet::MoveLast() { pos = m_s.size()-1; return true; } /* 獲取當前游標位置 */ unsigned long RecordSet::GetCurrentPos()const { return pos; } /* 獲取當前游標的對應欄位數據 */ bool RecordSet::GetCurrentFieldValue(const char * sFieldName, char *sValue) { strcpy(sValue,m_s[pos][sFieldName].c_str()); return true; } bool RecordSet::GetCurrentFieldValue(const int iFieldNum,char *sValue) { strcpy(sValue,m_s[pos][iFieldNum].c_str()); return true; } /* 獲取游標的對應欄位數據 */ bool RecordSet::GetFieldValue(long index,const char * sFieldName, char *sValue) { strcpy(sValue,m_s[index][sFieldName].c_str()); return true; } bool RecordSet::GetFieldValue(long index,int iFieldNum,char *sValue) { strcpy(sValue,m_s[index][iFieldNum].c_str()); return true; } /* 是否到達游標尾部 */ bool RecordSet::IsEof() { return (pos == m_s.size())?true:false; } /* * 得到記錄數目 */ int RecordSet::GetRecordCount() { return m_recordcount; } /* * 得到欄位數目 */ int RecordSet::GetFieldNum() { return m_field_num; } /* * 返回欄位 */ Field * RecordSet::GetField() { return &m_field; } /* 返回欄位名 */ const char * RecordSet::GetFieldName(int iNum) { return m_field.m_name.at(iNum).c_str(); } /* 返回欄位類型 */ const int RecordSet::GetFieldType(char * sName) { int i = m_field.GetField_NO(sName); return m_field.m_type.at(i); } const int RecordSet::GetFieldType(int iNum) { return m_field.m_type.at(iNum); } /* * 返回指定序號的記錄 */ Record RecordSet::operator[](int num) { return m_s[num]; } /* -------------------------------------------------- */ /* +++++++++++++++++++++++++++++++++++++++++++++++++++ */ /* * 1 負責資料庫的連接關閉 * 2 執行sql 語句(不返回結果) * 3 處理事務 */ DataBase::DataBase() { m_Data = NULL; } DataBase::~DataBase() { if(NULL != m_Data) { DisConnect(); } } /* 返回句柄 */ MYSQL * DataBase::GetMysql() { return m_Data; } /* * 主要功能:連接資料庫 * 參數說明: * 1 host 主機ip地址或者時主機名稱 * 2 user 用戶名 * 3 passwd 密碼 * 4 db 欲連接的資料庫名稱 * 5 port 埠號 * 6 uinx 嵌套字 * 7 client_flag 客戶連接參數 * 返回值: 0成功 -1 失敗 */ int DataBase::Connect(string host, string user, string passwd, string db, unsigned int port, unsigned long client_flag) { if((m_Data = mysql_init(NULL)) && mysql_real_connect( m_Data, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(),port , NULL, client_flag)) { //選擇制定的資料庫失敗 if ( mysql_select_db( m_Data, db.c_str () ) < 0 ) { mysql_close( m_Data) ; return -1 ; } } else { //初始化mysql結構失敗 mysql_close( m_Data ); return -1 ; } //成功 return 0; } /* * 關閉資料庫連接 */ void DataBase::DisConnect( ) { mysql_close(m_Data) ; } /* * 主要功能: 執行非返回結果查詢 * 參數:sql 待執行的查詢語句 * 返回值; n為成功 表示受到影響的行數 -1 為執行失敗 */ int DataBase::ExecQuery(string sql) { if(!mysql_real_query(m_Data,sql.c_str (),(unsigned long)sql.length()) ) { //得到受影響的行數 return (int)mysql_affected_rows(m_Data) ; } else { //執行查詢失敗 return -1; } } /* * 主要功能:測試mysql伺服器是否存活 * 返回值:0 表示成功 -1 失敗 */ int DataBase::Ping() { if(!mysql_ping(m_Data)) return 0; else return -1; } /* * 主要功能:關閉mysql 伺服器 * 返回值;0成功 -1 失敗 */ int DataBase::ShutDown() { if(!mysql_shutdown(m_Data,SHUTDOWN_DEFAULT)) return 0; else return -1; } /* * 主要功能:重新啟動mysql 伺服器 * 返回值;0表示成功 -1 表示失敗 */ int DataBase::ReBoot() { if(!mysql_reload(m_Data)) return 0; else return -1; } /* * 說明:事務支持InnoDB or BDB表類型 */ /* * 主要功能:開始事務 */ int DataBase::Start_Transaction() { if(!mysql_real_query(m_Data, "START TRANSACTION" , (unsigned long)strlen("START TRANSACTION") )) { return 0; } else //執行查詢失敗 return -1; } /* * 主要功能:提交事務 * 返回值:0 表示成功 -1 表示失敗 */ int DataBase::Commit() { if(!mysql_real_query( m_Data, "COMMIT", (unsigned long)strlen("COMMIT") ) ) { return 0; } else //執行查詢失敗 return -1; } /* * 主要功能:回滾事務 * 返回值:0 表示成功 -1 表示失敗 */ int DataBase::Rollback() { if(!mysql_real_query(m_Data, "ROLLBACK", (unsigned long)strlen("ROLLBACK") ) ) return 0; else //執行查詢失敗 return -1; } /* 得到客戶信息 */ const char * DataBase::Get_client_info() { return mysql_get_client_info(); } /*主要功能:得到客戶版本信息*/ const unsigned long DataBase::Get_client_version() { return mysql_get_client_version(); } /* 主要功能:得到主機信息 */ const char * DataBase::Get_host_info() { return mysql_get_host_info(m_Data); } /* 主要功能:得到伺服器信息 */ const char * DataBase::Get_server_info() { return mysql_get_server_info( m_Data ); } /* 主要功能:得到伺服器版本信息 */ const unsigned long DataBase::Get_server_version() { return mysql_get_server_version(m_Data); } /*主要功能:得到 當前連接的默認字元集*/ const char * DataBase::Get_character_set_name() { return mysql_character_set_name(m_Data); } /* * 主要功能返回單值查詢 */ char * DataBase::ExecQueryGetSingValue(string sql) { MYSQL_RES * res; MYSQL_ROW row ; char *p = NULL; if(!mysql_real_query( m_Data, sql.c_str(),(unsigned long)sql.length())) { //保存查詢結果 res = mysql_store_result( m_Data ) ; row = mysql_fetch_row( res ) ; p = ((row[0]==NULL)||(!strlen(row[0])))?"-1":row[0]; mysql_free_result( res ) ; } else //執行查詢失敗 p = "-1"; return p; } /* * 得到系統時間 */ const char * DataBase::GetSysTime() { return ExecQueryGetSingValue("select now()"); } /* * 主要功能:建立新資料庫 * 參數:name 為新資料庫的名稱 * 返回:0成功 -1 失敗 */ int DataBase::Create_db(string name) { string temp ; temp="CREATE DATABASE "; temp+=name; if(!mysql_real_query( m_Data,temp.c_str () , (unsigned long)temp.length ()) ) return 0; else //執行查詢失敗 return -1; } /* * 主要功能:刪除制定的資料庫 * 參數:name 為欲刪除資料庫的名稱 * 返回:0成功 -1 失敗 */ int DataBase::Drop_db(string name) { string temp ; temp="DROP DATABASE "; temp+=name; if(!mysql_real_query( m_Data,temp.c_str () , (unsigned long)temp.length ()) ) return 0; else //執行查詢失敗 return -1; } /*-----------------------------------------------------*/ }; /* * 使用例子 */ #include "zlb_mysql.h" using namespace std; void main() { zlb_mysql::DataBase zlb; //連接資料庫 if(-1 == zlb.Connect("localhost"/*本地資料庫,可以是遠程 ip*/, "root"/*用戶名*/,"apple"/*密碼*/, "test"/*資料庫名*/, 0,0/*兩個標志,mysql文檔有說明,一般為0*/)) { std::cout<<"connect failed "<<std::endl; } else { std::cout<<"connect success"<<std::endl; } //通過返回的資料庫句柄,建立記錄急,你可以通過返回的這個句柄建立多個記錄急 zlb_mysql::RecordSet rs(zlb.GetMysql()); rs.ExecuteSQL("select * from testtable");//這個語句大家都知道是什麼意思了 cout<<rs.GetRecordCount()/*返回的總的記錄數*/<<endl; cout<<rs.GetFieldNum()/*返回的總的欄位數*/<<endl; cout<<rs[0].GetTabText()/*返回第一條記錄,你也可以rs[1].GetTabText() 如果你有多條記錄, */ <<endl; /*實現遍列,也可以使用後面的遍列方式*/ for(int i=0;i<rs.GetRecordCount();++i) { for(int j =0;j<rs.GetFieldNum();++j) cout<<rs[i][j]; cout<<endl; } zlb_mysql::Field *fd = rs.GetField();/*你可以通過這樣的方式,獲取欄位的信息*/ cout<<fd->GetField_NO("Password")/*返回我表裡的 Password 欄位的位置,不 是記錄的位置*/ <<endl; cout<<rs[0]["Password"]<<endl;/*輸出第0行第Password列的值*/ cout<<rs[0][fd->GetField_NO("Password")]<<endl;/*你也可以這樣*/ cout<<rs.GetFieldName(0)/*獲取欄位的名字*/<<endl; cout<<rs.GetFieldType("UserName")/*獲取欄位的類型,是mysql里定義的*/<<endl; cout<<rs.GetCurrentPos()/*獲取當前記錄的位置*/<<endl; char s[50]; rs.GetCurrentFieldValue(1,s);/*獲取當前記錄對應欄位的值*/ cout<<s<<endl; cout<<rs.Move(1)<<endl;/*移動游標,正數往前 負數往後*/ cout<<rs.GetCurrentPos()<<endl; rs.GetCurrentFieldValue(1,s); cout<<s<<endl; rs.MoveFirst();/*移動游標到最前*/ while(!rs.IsEof()/*判斷是否到達游標尾,實現遍列*/) { rs.GetCurrentFieldValue("UserName",s); cout<<s<<"\t"; rs.GetCurrentFieldValue("Password",s); cout<<s<<"\t
"; rs.MoveNext(); } rs.GetFieldValue(0,"UserName",s);/*獲取指定行 的記錄值*/ cout<<s<<"\t"; rs.GetFieldValue(0,"Password",s); cout<<s<<"\t
"; }

閱讀全文

與如何講解一個資料庫的使用方法相關的資料

熱點內容
顛病大發作治療方法 瀏覽:820
祛痘膏的正確使用方法 瀏覽:183
回收舊手機的方法 瀏覽:278
版稅的計算方法 瀏覽:73
燒傷時正確的急救方法 瀏覽:11
DNA大片段突變的檢測方法 瀏覽:258
autocad2009的安裝及激活方法 瀏覽:955
用化學方法鑒別正丁基氯 瀏覽:326
樂視手機話筒設置方法 瀏覽:548
怎麼才能治療黑眼圈的方法 瀏覽:892
三種常用的交接棒方法 瀏覽:641
股票入門實戰的解套方法與技巧 瀏覽:836
躺平有哪些方法呢 瀏覽:853
hyperlink使用方法 瀏覽:336
盆栽香蔥的種植方法 瀏覽:120
新疆駝奶食用方法 瀏覽:755
怎麼變成明星的方法 瀏覽:409
2己烯和戊烷的鑒別方法 瀏覽:939
如何用繩子做蝴蝶結的方法 瀏覽:368
vivo手機語音控制在哪裡設置方法 瀏覽:247