00001 /*! \file MySQL.h 00002 \brief Gestion base de MySQL. 00003 00004 Gestionnaire de base de données MySQL. \n 00005 00006 \author aerith (www.aerith.fr) 00007 \version 1.0 00008 \date 01/11/2007 00009 */ 00010 00011 #ifndef INCLUDE_RSRC_MYSQL 00012 #define INCLUDE_RSRC_MYSQL 00013 00014 #include "../../mysql/mysql.h" 00015 #include "../Surcouche/SurcoucheMultitache.h" 00016 #include "../Error/Error.h" 00017 #include <vector> 00018 00019 #define MYSQL_HOST 256 00020 #define MYSQL_USER 32 00021 #define MYSQL_PASS 32 00022 #define MYSQL_BASE 32 00023 #define MYSQL_BUFFER 10240 00024 00025 //! Gestion base MySQL. 00026 /*! Gestionnaire de base de données MySQL. 00027 */ 00028 class MySQL 00029 { 00030 private : 00031 char Host[MYSQL_HOST]; /*!< Serveur où ce trouve la base. */ 00032 int Port; /*!< Port utilisé par le serveur où ce trouve la base. */ 00033 char User[MYSQL_USER]; /*!< User pour ce connexter à la base. */ 00034 char Pass[MYSQL_PASS]; /*!< Password pour ce connecter à la base. */ 00035 char Name[MYSQL_BASE]; /*!< Nom de la base sur le serveur. */ 00036 MYSQL Base; /*!< Manipulateur de la base mysql. */ 00037 int Connected; /*!< 1 si connecter, 0 sinon. */ 00038 std::vector<MYSQL_ROW> Datas; /*!< Chaque lignes est une entrée. */ 00039 static int MySQLInstance; /*!< Compte les instance de la class. */ 00040 static MUTEX MySQLMutex; /*!< Utiliser des que l'on accede au fichier "DB.sys". */ 00041 00042 //! Affiche une erreur mysql. 00043 /*! Affiche le détail d'une erreur mysql. 00044 */ 00045 inline void MySQLError() 00046 { 00047 printf("MYSQL error %i : %s\n", mysql_errno(&Base), mysql_error(&Base)); 00048 }; 00049 00050 //! Enregistre les données dans un tableau. 00051 /*! Enregistre les données d'une requette mysql dans un tableau dynamique. 00052 */ 00053 int SaveResult(); 00054 00055 public : 00056 /*! Charge la base en mémoire. 00057 \param pHost serveur où ce trouve la base. 00058 \param pUser user pour ce connexter à la base. 00059 \param pPass password pour ce connecter à la base. 00060 \param pBase nom de la base sur le serveur. 00061 \param iPort port utilisé par le serveur où ce trouve la base. 00062 */ 00063 MySQL(char *pHost, char *pUser, char *pPass, char *pBase, int iPort = 0); 00064 00065 /*! Libere proprement la mémoire, ne sauve pas la base dans les fichiers. 00066 \sa SaveBase(). 00067 */ 00068 ~MySQL(); 00069 00070 //! Se connecte à la base. 00071 /*! Se connecte à la base mysql. 00072 \return Code d'erreur. 00073 \sa Close(). 00074 */ 00075 int Open(); 00076 00077 //! Se déconnecte de la base. 00078 /*! Se déconnecte de la base mysql. 00079 \return Code d'erreur. 00080 \sa Open(). 00081 */ 00082 int Close(); 00083 00084 //! Envoie une requette. 00085 /*! Envoie une requette au serveur. 00086 \param pQuery requette au format printf 00087 \return Code d'erreur. 00088 */ 00089 int Query(char *pQuery, ...); 00090 00091 //! Envoie une requette. 00092 /*! Envoie une requette binaire au serveur. 00093 \param pQuery requette 00094 \param iSize longeur de la requette 00095 \return Code d'erreur. 00096 */ 00097 int QueryBin(char *pQuery, int iSize); 00098 00099 //! Retourne le nombre d'entrée. 00100 /*! Retourne le nombre d'entrée dans \a Datas. 00101 \return nombre d'entrée. 00102 */ 00103 inline MYSQL_ROW GetData(int iNo) 00104 { 00105 if(iNo < Datas.size()) 00106 return Datas[iNo]; 00107 }; 00108 00109 //! Retourne le nombre d'entrée. 00110 /*! Retourne le nombre d'entrée dans \a Datas. 00111 \return nombre d'entrée. 00112 */ 00113 inline int GetNbData() 00114 { 00115 return Datas.size(); 00116 }; 00117 00118 //! Retourne le nombre d'instance. 00119 /*! Retourne le nombre d'instance de la class (pour multitache). 00120 \return nombre d'instance de la class. 00121 */ 00122 inline int GetNbInstance() 00123 { 00124 return MySQLInstance; 00125 }; 00126 00127 //! Retourne le nom de la base. 00128 /*! Retourne le nom \a Name de la base. 00129 \return pointeur sur \a Name. 00130 */ 00131 inline char *GetBaseName() 00132 { 00133 return Name; 00134 }; 00135 }; 00136 00137 #endif 00138