⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connection1.hh

📁 MySql C++ library
💻 HH
字号:
#ifndef __connection1_hh__
#define __connection1_hh__

#include <vector>
#include <deque>
#include <list>
#include <set>
#include <map>
using namespace std ;

#include <mysql.h>
#include "define_short.h"
#include "bad_query.hh"
#include "query1.hh"
#include "result1.hh"

//The main database handle
class Connection
{
  friend ResNSel;
  friend ResUse;
  friend Query;

private:
  bool throw_exceptions;
  MYSQL mysql;
  bool is_connected;
  bool locked;
  bool Success;

public:
  Connection () : throw_exceptions(true), locked(false)
    {mysql_init(&mysql);} //:
  Connection (bool te) : throw_exceptions(te), is_connected(false), locked(true), Success(false) //:
    {mysql_init(&mysql);} //:
  Connection (const char *db, const char *host = "", const char *user = "",
	      const char *passwd = "", bool te = true); //:
  Connection (const char *db, const char *host, const char *user,
	      const char *passwd, uint port, my_bool compress = 1,
	      unsigned int connect_timeout = 5, bool te = true,
	      cchar *socket_name = ""); //:

  bool   real_connect (cchar *db = "", cchar *host = "",
		       cchar *user = "", cchar *passwd = "", uint port = 0,
		       my_bool compress = 0, unsigned int connect_timeout = 60,
		       cchar *socket_name= ""); //:

  ~Connection (); //:
  void         close() {mysql_close(&mysql);}	 //:
  string       info ();	//:

  bool   connected() const {return is_connected;}
  //: returns true if a successful connection was made

  bool   success() {return Success;}
  //: returns true of the last query was successful

  bool   connect (cchar *db = "", cchar *host = "",
		  cchar *user = "", cchar *passwd = "");
  //:

  bool   lock() {if (locked) return true; locked = true; return false;}
  void   unlock() {locked = false;}

  void purge (void) {mysql_close(&mysql); }
  //:

  inline Query query();
  //:

  operator bool () {return success();}                  //: returns success()
  string error () {return string(mysql_error(&mysql));} //: last error message()
	int errnum () {return mysql_errno(&mysql);}
	int   refresh (unsigned int refresh_options){ return mysql_refresh (&mysql,refresh_options); }
	int ping (void) { return mysql_ping(&mysql);}
	int kill (unsigned long pid) { return mysql_kill (&mysql,pid);}
  string clinet_info () {return string(mysql_get_client_info());} //:

  string host_info () {return string(mysql_get_host_info(&mysql));} //:

  int    proto_info () {return mysql_get_proto_info(&mysql);} //:

  string server_info () {return string(mysql_get_server_info(&mysql));} //:

  string stat() {return string(mysql_stat(&mysql));} //:

  Result  store(const string &str) {return store(str, throw_exceptions);} //:
  ResUse  use(const string &str)   {return use(str, throw_exceptions);} //:
  ResNSel execute(const string &str) {return execute(str, throw_exceptions);} //:
	bool exec (const string &str);
  Result  store(const string &str, bool te); //:
  ResUse  use(const string &str, bool te); //:
  ResNSel execute(const string &str, bool te); //:

  bool   create_db (string db) {return !(execute( "CREATE DATABASE " + db ));} //:
  bool   drop_db (string db) {return !(execute( "DROP DATABASE " + db ));} //:
  bool   select_db (string db) {return select_db(db.c_str());} //:
  bool   select_db (const char *db); //:
  bool   reload(); //:
  bool   shutdown (); //:
	string infoo (void) {return info ();}
	st_mysql_options get_options (void) const {return mysql.options;}
	int read_options(enum mysql_option option,const char *arg) {return  mysql_options(&mysql, option,arg);}
  int          affected_rows()  {return mysql_affected_rows((MYSQL*) &mysql);}
  int          insert_id () {return mysql_insert_id(&mysql);}


  // FIX:
  // implementation of template function must be done in the class definition
  // (instead of connection2.hh), otherwise Visual C++ gives template
  // matching errors

  template <class Sequence>
  void storein_sequence(Sequence &seq, const string &str) {
    ResUse result = use(str);
    while (1) {
	    MYSQL_ROW d = mysql_fetch_row(result.mysql_res);
		  if (!d) break;
	    Row row(d,&result,(unsigned int *)mysql_fetch_lengths(result.mysql_res),true);
		  if (!row) break;
      seq.push_back(/*typename*/ Sequence::value_type(row));
	  }
	}

  template <class Set>
  void storein_set(Set &sett, const string &str) {
    ResUse result = use(str);
	  while (1) {
	    MYSQL_ROW d = mysql_fetch_row(result.mysql_res);	
		  if (!d) return;
	    Row row(d,&result,(unsigned int *)mysql_fetch_lengths(result.mysql_res),true);
		  if (!row) break;
      sett.insert(typename Set::value_type(row));
	  }
  }

  //!dummy: void storein(TYPE &con, const string &s);
  //: Stores the results in TYPE.
  // Stores the result in TYPE. TYPE must be some sort of STL container.

  template <class T>        void storein(vector<T> &con, const string &s)
    {storein_sequence(con,s);}
  template <class T>        void storein(deque<T> &con, const string &s)
     {storein_sequence(con,s);}
  template <class T>        void storein(list<T> &con, const string &s)
    {storein_sequence(con,s);}
  template <class T>        void storein(set<T> &con, const string &s)
    {storein_set(con,s);}
  template <class T>        void storein(multiset<T> &con, const string &s)
    {storein_set(con,s);}
};

typedef Connection Mysql;

#endif





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -