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

📄 database.cpp.svn-base

📁 ROSE的源代码。了解的自己研究,编译通过
💻 SVN-BASE
字号:
#include "database.h"
#include "../log.h"

// constructor
CDatabase::CDatabase( char* server , char* username, char* password, char* database, unsigned int port , MYSQL* mysql)
{
    Server = server;
    Username = username;
    Password = password;
    Database = database;
    Port = port;    
    Mysql = mysql;
    SQLMutex = PTHREAD_MUTEX_INITIALIZER;
    mysql_init( Mysql ); 
}

// deconstructor
CDatabase::~CDatabase( )
{
}

// disconnect from mysql
void CDatabase::Disconnect( )
{
    mysql_close( Mysql );
}

int CDatabase::Connect( )
{
    Log( MSG_INFO, "Connecting to MySQL" );
    if(!mysql_real_connect( Mysql, Server, Username, Password, Database,Port, NULL, 0 ))
    {
        Log( MSG_FATALERROR, "Error connecting to MySQL server: %s\n", mysql_error( Mysql ) );
        return -1;
    }
    if(!QExecute("SET SESSION interactive_timeout=%i", 2678400))
        Log( MSG_WARNING, "Can't change timeout session");
    else
        Log( MSG_INFO, "SQL timeout set to %i seconds", 2678400);
            
    return 0;
}

// reconnect to mysql
int CDatabase::Reconnect( )
{
    if(!mysql_real_connect( Mysql, Server, Username, Password, Database,Port, NULL, 0 ))
    {
            Log( MSG_FATALERROR, "Error reconnecting to MySQL server: %s\n", mysql_error( Mysql ) );
            return -1;
    }
    if(!QExecute("SET SESSION interactive_timeout=%i", 2678400))
        Log( MSG_WARNING, "Can't change timeout session");
    else
        Log( MSG_INFO, "SQL timeout set to %i seconds", 2678400);
        
    return 0;
}

// execute query
bool CDatabase::QExecute( char *Format,... )
{
    bool Qfail = true;
    char query[1024];
	va_list ap; 
    va_start( ap, Format );
	vsprintf( query, Format, ap ); 
	va_end  ( ap );    
    Log( MSG_QUERY, query );	
    pthread_mutex_lock( &SQLMutex );
    while(Qfail)
    {
        if(mysql_query( Mysql, query )!=0)
        {
            Log( MSG_FATALERROR, "Could not execute query: %s", mysql_error( Mysql ) );   
            if(Reconnect( )==-1)
            {
                Log( MSG_FATALERROR, "Could not execute query: %s", mysql_error( Mysql ) );   
                pthread_mutex_unlock( &SQLMutex );        
                return false;
            }
            else Qfail = false;
        }
        else Qfail = false;
    }
    pthread_mutex_unlock( &SQLMutex );            
    return true;    
}

MYSQL_RES* CDatabase::QStore( char *Format, ...)
{
    bool Qfail = true;    
    char query[1024];
	va_list ap; 
    va_start( ap, Format );
	vsprintf( query, Format, ap ); 
	va_end  ( ap );  
    result = NULL;
    Log( MSG_QUERY, query );    
    pthread_mutex_lock( &SQLMutex );  
    while(Qfail)
    {    
        if(mysql_query( Mysql, query )!=0)
        {
            Log( MSG_FATALERROR, "Could not execute query: %s", mysql_error( Mysql ) );   
            if(Reconnect( )==-1)
            {
                Log( MSG_FATALERROR, "Could not execute query: %s", mysql_error( Mysql ) );   
                pthread_mutex_unlock( &SQLMutex );        
                return false;
            }
            else Qfail = false;
        }    
        else Qfail = false;
    }
    result = mysql_store_result( Mysql );
    return result;
}

MYSQL_RES* CDatabase::QUse( char *Format, ...)
{
    bool Qfail = true;    
    char query[1024];
	va_list ap; 
    va_start( ap, Format );
	vsprintf( query, Format, ap ); 
	va_end  ( ap );  
    result = NULL;
    Log( MSG_QUERY, query );    
    pthread_mutex_lock( &SQLMutex );  
    while(Qfail)
    {    
        if(mysql_query( Mysql, query )!=0)
        {
            Log( MSG_FATALERROR, "Could not execute query: %s", mysql_error( Mysql ) );   
            if(Reconnect( )==-1)
            {
                Log( MSG_FATALERROR, "Could not execute query: %s", mysql_error( Mysql ) );   
                pthread_mutex_unlock( &SQLMutex );        
                return false;
            }
            else Qfail = false;
        }    
        else Qfail = false;
    }
    result = mysql_use_result( Mysql );
    return result;
}

void CDatabase::QFree( )
{
    mysql_free_result( result );
    pthread_mutex_unlock( &SQLMutex );
}

⌨️ 快捷键说明

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