00001 #include "db_mysql.h"
00002
00003 db_mysql::db_mysql()
00004 :m_Mysql(NULL)
00005 ,m_Res(NULL)
00006 ,m_bConnect(false)
00007 ,m_bSelectDB(false)
00008 ,m_bExecute(false)
00009 ,m_bGetRow(false)
00010 ,m_bInit(false)
00011 {
00012 ;
00013 }
00014 db_mysql::db_mysql(string host,string user,string passwd,string db)
00015 :m_Mysql(NULL)
00016 ,m_Res(NULL)
00017 ,m_bConnect(false)
00018 ,m_bSelectDB(false)
00019 ,m_bExecute(false)
00020 ,m_bGetRow(false)
00021 {
00022 Init(host,user,passwd,db);
00023 }
00024
00025 void db_mysql::Init(string host,string user,string passwd,string db)
00026 {
00027 m_strHost = host;
00028 m_strUser = user;
00029 m_strPasswd = passwd;
00030 m_strDB = db;
00031 m_bInit = true;
00032 if(!db.empty())
00033 {
00034 m_bSelectDB = true;
00035 }
00036 }
00037 void db_mysql::SetQuery(string query)
00038 {
00039 m_strQuery=query;
00040 }
00041 bool db_mysql::Connect(void)
00042 {
00043 if(!m_bConnect)
00044 {
00045 my_bool b = 0;
00046 if(!(m_Mysql=mysql_init(NULL)))
00047 {
00048 cout<<"Init mysql error!!"<<endl;
00049 return false;
00050 }
00051
00052 if(!mysql_real_connect(m_Mysql,m_strHost.c_str(),m_strUser.c_str(),m_strPasswd.c_str(),m_strDB.c_str(),0,NULL,0))
00053 {
00054 cout<<"Connect error!!"<<endl;
00055 mysql_close(m_Mysql);
00056 return false;
00057 }
00058 }
00059 else
00060 {
00061 cout<<"You are reconnecting!"<<endl;
00062 return false;
00063 }
00064 m_bConnect = true;
00065 return true;
00066 }
00067 bool db_mysql::SelectDB(string db)
00068 {
00069 if(!m_bConnect)
00070 {
00071 cout<<"You must connect before select db!";
00072 return false;
00073 }
00074 if(mysql_select_db(m_Mysql,db.c_str()))
00075 {
00076 cout<<"Select database error!"<<endl;
00077 return false;
00078 }
00079 m_strDB = db;
00080 m_bSelectDB = true;
00081 return true;
00082 }
00083
00084 bool db_mysql::Execute(string query)
00085 {
00086 if((!m_bConnect)||(!m_bSelectDB))
00087 {
00088 cout<<"You executing query before connection or select db!"<<endl;
00089 return false;
00090 }
00091 if(!query.empty())
00092 {
00093 m_strQuery=query;
00094 }
00095 if(m_strQuery.empty())
00096 {
00097 cout<<"Your haven't set query string!"<<endl;
00098 return false;
00099 }
00100 else
00101 {
00102 Free_Result();
00103 if(mysql_real_query(m_Mysql,m_strQuery.c_str(),m_strQuery.size()))
00104 {
00105 cout<<"Execute query error!"<<endl;
00106 return false;
00107 }
00108 }
00109
00110 Field_num=mysql_field_count(m_Mysql);
00111 if(Field_num==0){
00112 m_result=false;
00113 }
00114 else {m_result=true;}
00115
00116 m_Res = mysql_store_result(m_Mysql);
00117 m_bExecute = true;
00118 return true;
00119 }
00120
00121 bool db_mysql::GetRow(my_ulonglong row)
00122 {
00123 if(!m_bExecute)
00124 {
00125 cout<<"You must execute query before get row!"<<endl;
00126 return false;
00127 }
00128 if(row!=NEXT_ROW)
00129 {
00130 if(row>=mysql_num_rows(m_Res)||row<0)
00131 {
00132
00133 return false;
00134 }
00135 mysql_data_seek(m_Res,row);
00136 }
00137 m_Row=mysql_fetch_row(m_Res);
00138 if(m_Row==NULL)
00139 {
00140 cout<<"fetch_row error!"<<endl;
00141 return false;
00142 }
00143
00144 m_bGetRow = true;
00145 return true;
00146 }
00147
00148 string db_mysql::GetField(unsigned int n)
00149 {
00150
00151 if(!m_bGetRow)
00152 {
00153 cout<<"You must get a row before getfield value!"<<endl;
00154 return "";
00155 }
00156 if(m_Row[n]!=NULL){ return (string)m_Row[n];}
00157 else return "";
00158 }
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00171 string db_mysql::GetField_name(unsigned int n)
00172 {
00173 if(!m_result)
00174 {
00175 cout<<"error:no select!"<<endl;
00176 return "";
00177 }
00178 m_field = mysql_fetch_field_direct(m_Res, n);
00179 return string(m_field->name);
00180
00181
00182
00183
00184
00185
00186
00187
00188 }
00189
00191 unsigned long db_mysql::Num_Rows(void)
00192 {
00193 if(!m_bExecute)
00194 {
00195 cout<<"You are get number of rows before execute!"<<endl;
00196 return 0;
00197 }
00198 return mysql_num_rows(m_Res);
00199 }
00200
00201 void db_mysql::Free_Result(void)
00202 {
00203 if(m_bExecute)
00204 {
00205 mysql_free_result(m_Res);
00206 m_bExecute = false;
00207 m_bGetRow = false;
00208 }
00209 }
00210
00211 void db_mysql::Close(void)
00212 {
00213 if(m_bConnect)
00214 {
00215 Free_Result();
00216 mysql_close(m_Mysql);
00217 m_bConnect = false;
00218 }
00219 }
00220
00221 db_mysql::~db_mysql()
00222 {
00223 Free_Result();
00224 Close();
00225 }
00226