您好,欢迎访问一九零五行业门户网

mysql C API statment and bind 执行查询

#include string #include mysql/mysql.h #include default.h typedefstd::stringstring; structmysql_parm{ stringhost; stringuser; stringpassword; stringdatabase; stringunixsock; }; classdbstmt; classdbmysql; classdbstmt{ dbstmt(const dbstmt);
#include
#include
#include
typedef std::string string;
struct mysql_parm{
 string host;
 string user;
 string password;
 string database;
 string unixsock;
};
class dbstmt;
class dbmysql;
class dbstmt{
 dbstmt(const dbstmt&);
 dbstmt& operator=(const dbstmt&);
 mysql_stmt* stmt_;
public:
 dbstmt(pcsz_t query,dbmysql& mysql);
 void execute(){
  if(mysql_stmt_execute(stmt_))
   throw mysql_stmt_error(stmt_);
 }
void execute(mysql_bind* bind){
  if(mysql_stmt_execute(stmt_))
   throw mysql_stmt_error(stmt_);
  if(mysql_stmt_bind_result(stmt_,bind)){
   throw mysql_stmt_error(stmt_);
  }
  if(mysql_stmt_store_result(stmt_))
   throw mysql_stmt_error(stmt_);
 }
 //void execute(){
 // if(mysql_stmt_execute(stmt_))
 //  throw mysql_stmt_error(stmt_);
 //}
void bind(mysql_bind* bind){
  if(mysql_stmt_bind_param(stmt_,bind) )
   throw mysql_stmt_error(stmt_);
 }
int fetch(){
  return mysql_stmt_fetch(stmt_)==0;
 }
 ~dbstmt(){
  if(stmt_){
   mysql_stmt_close(stmt_);
  }
 }
};
class dbmysql{
 dbmysql(const dbmysql&);
 dbmysql&operator=(const dbmysql&);
mysql * mysqlptr_;
uint32_t errno_;
protected:
 friend class dbstmt;
 mysql_stmt* _createstmt(){
  mysql_stmt *ret=mysql_stmt_init(mysqlptr_);
  if(ret)
   return ret;
  errno_=mysql_errno(mysqlptr_);
  throw mysql_error(mysqlptr_);
 }
public:
 const char* strerr(){
  return mysql_error(mysqlptr_);
 }
 dbmysql():mysqlptr_(null){
  mysqlptr_=mysql_init(null);
  if(null== mysqlptr_)
   throw mysql :outof memory;
 }
 void open(const mysql_parm& parm){
  if(!mysql_real_connect(mysqlptr_,
   parm.host.c_str(),
   parm.user.c_str(),
   parm.password.c_str(),
   parm.database.c_str(),
   0,
   parm.unixsock.c_str(),
   0 ))
  {
   errno_=mysql_errno(mysqlptr_);
   throw(mysql_error(mysqlptr_));
  }
 }
 void close(){
  if(mysqlptr_)
  {
   mysql_close(mysqlptr_);
   mysqlptr_=null;
  }
 }
};
dbstmt::dbstmt(pcsz_t query,dbmysql& mysql):stmt_(null){
 stmt_=mysql._createstmt();
 if(!stmt_)
  throw mysql.strerr();
 if( mysql_stmt_prepare(stmt_,query,strlen(query)) )
 {
  //const char* err=
throw mysql_stmt_error(stmt_);
 }
}
struct account{
 char user[36];
 byte password[16];
 uint32_t status;
 uint32_t id;
};
#define decl_bind(h,n)/
class bind_##h:public h{/
 typedef h parent;/
 mysql_bind  _bind[n];/
 my_bool   _is_null[n];/
 unsigned long _length[n];/
public:/
 bind_##h(){/
  int i=0;/
  bzero(_bind,sizeof(_bind));
#define bind_bin(x,l)/
 _bind[i].buffer_type= mysql_type_string;/
 _bind[i].buffer= (char *)&(parent::x);/
 _bind[i].buffer_length= l;/
 _bind[i].is_null= _is_null+i;/
 _bind[i].length= _length+i;/
 ++i;
#define bind_int(x)/
 _bind[i].buffer_type= mysql_type_long;/
 _bind[i].buffer= (char *)&(parent::x);/
 _bind[i].buffer_length= 0;/
 _bind[i].is_null= _is_null+i;/
 _bind[i].length= _length+i;/
 ++i;
#define end_bind(h)  }/
 operator mysql_bind*(){/
 return _bind;/
 }/
};
//account acc;
//
//decl_bind(4)
// bind_bin(acc.user,32);
// bind_bin(acc.password,16);
// bind_int(acc.status);
// bind_int(acc.id);
// smt.executeandstore(bind);
//end_bind(4)
decl_bind(account,4)
 bind_bin(user,32)
 bind_bin(password,16)
 bind_int(status)
 bind_int(id)
end_bind(account)
int main(){
 try{
dbmysql mysql;
  mysql_parm parm;
  parm.host=localhost;
  parm.user=root;
  parm.password=mypwd;
  parm.unixsock=/var/lib/mysql/mysql.sock;
  parm.database=testdb;
  mysql.open(parm);
dbstmt smt(select user,password,status,id from account,mysql);
  dbstmt smt1(insert into account(user,password,status) value(?,?,?),mysql);
 //
bind_account acc;
smt.execute(acc);
while(smt.fetch()){
   //acc.user[length[0]]=0;
   //acc.user,
   printf(%s %d %d/n,acc.user,acc.status,acc.id);
   //printf(%d %d/n,acc.status,acc.id);
;
};
  smt1.bind(acc);
  smt1.execute();
}catch(const char* err){
  printf(error:%s/n,err);
 }
return 0;
}
其它类似信息

推荐信息