C++程序结合MySQL

我努力的全部意义是想给爸妈买东西的时候,像他们给我买时一样干脆。        ----夏不夏说     

不多说直接看代码

int main()
{
    MYSQL * conn; //数据库链接句柄
    MYSQL_RES * res; //返回的查询结果,相当于表
    MYSQL_ROW row; //一行数据显示
     char server[ 20 ] = "localhost" ;
     char user[ 20 ] = "root" ; //用户
     char passwd [ 20 ] = "123" ; //密码
     char database[ 20 ] = "library" ; //数据库名

    conn = mysql_init( NULL ); //数据库句柄的初始化

     if ( NULL == mysql_real_connect(conn, server, user, passwd, database, 0 , NULL , 0 )) //连接数据库
    {
        cout << "connect failed\n" ;
        exit( 1 );
    }
    mysql_set_character_set(conn, "utf8" ); //设置字符集

     if (mysql_query(conn, "select * from cour" )) //我数据库中的一张表
    {
        cout << "send filed" << endl;
        exit( 1 );
    }
    
    res = mysql_use_result(conn); //获取字符集
     while ((row = mysql_fetch_row(res)) != NULL )
    {
        printf( "%s\t%s\t%s\t%s\n" , row[ 0 ], row[ 1 ], row[ 2 ], row[ 3 ]);
    }

    mysql_free_result(res); //释放结果集
    mysql_close(conn); //关闭数据库
     return 0 ;
}


以上就是最简单的C++结合MySQL的代码,为了使用方便,可以封装成一个简单的类

class Database
{
public:
    Database()
    {
    }

     static Database & getInstance();

     void init(); //初始化程序

     void sendQueryCommand( const char * command);//发送查询指令

     void sendExeCommand( const char * command);//发送执行指令

     void closeDatabase();//关闭数据库

private:
    MYSQL * conn; //数据库链接句柄
    MYSQL_RES * res; //返回的查询结果,相当于表
    MYSQL_ROW row; //一行数据显示
    MYSQL_FIELD * field;
};

Database & Database::getInstance()
{
     static Database data;
     return data;
}

void Database::init() //初始化程序
{
         char server[ 20 ] = "localhost" ;
         char user[ 20 ] = "root" ; //用户
         char passwd [ 20 ] = "123" ; //密码
         char database[ 20 ] = "library" ; //数据库名

    conn = mysql_init( NULL ); //数据库句柄的初始化

     if ( NULL == mysql_real_connect(conn, server, user, passwd, database, 0 , NULL , 0 )) //连接数据库
    {
        cout << "connect failed\n" ;
        mysql_close(conn); //关闭数据库
        exit( 1 );
    }

    mysql_set_character_set(conn, "utf8" ); //设置字符集
}

void Database::sendExeCommand( const char * command) //发送执行指令
{
     if (mysql_query(conn, command))
    {
        cout << "send failed" << endl;
        mysql_close(conn);
        exit( - 1 );
    }

}

void Database::sendQueryCommand( const char * command) //发送查询指令
{
     int iColumn = 0 ;
     int iRow = 0 ;
     if (mysql_query(conn, command))
    {
        cout << "send failed" << endl;
        mysql_close(conn); //关闭数据库
        exit( - 1 );
    }

    res = mysql_store_result(conn);
    iColumn = mysql_num_fields(res);
    iRow = mysql_num_rows(res);
    cout << "\t查询到\33[31m " << iRow << " \33[0m行" << endl;
    
     for ( int i = 0 ; i < iColumn; i ++ )
    {       
        field = mysql_fetch_field(res);
        cout << "\t" << field->name;
    }
    cout << endl;
    
     for ( int i = 0 ; i < iRow; i ++ )
    {
        row = mysql_fetch_row(res);
         for ( int j = 0 ; j < iColumn; j ++ )
        {
            cout << "\t" << row[j];
        }
        cout << endl;
    }
    
    mysql_free_result(res); //释放结果集
}

void Database::closeDatabase()
{
    mysql_close(conn); //关闭数据库
}


        这样进行简单的封装后,初始化函数和关闭数据库函数只需要执行一次,可以多次发送指令。只需向 sendExeCommand( )和sendQueryCommand()两个函数传入字符串即可。

例: Database::getInstance().sendQueryCommand( "select * from book;" );

有时候我们发送的指令需要根据输入而改变,这时候需要进行字符串拼接,这里提供两个简单的方法
1:使用函数c_str();
 string buffer = "insert into book(名称, 作者, 出版社, 价格) values('"
             + name + "', '" + author + "', '" + publishing + "', '" + caPrice + "');" ;
    Database::getInstance().sendExeCommand(buffer.c_str());

2:使用函数sprintf();
char buffer[ 200 ] = "\0" ;
sprintf(buffer, "update shopping set 购买时间 = now(), id = %d, 姓名 = '%s', \
                                    级别 = '%s', 电话 = '%s', 邮箱 = '%s' where 书号 = %d;" ,\
                                    m_iId, m_strName.c_str(), m_strLevel.c_str(), m_strPhone.c_str(),\
                                    m_strMailAddress.c_str(), book->getId());
Database::getInstance().sendExeCommand(buffer);

        第一种方式比较方便,但是有一个缺点,在进行“+”的时候,“=”右边的两个必须有一个是string类型,否则无法使用第一种方式。
       C++程序结合MySQL主要是发送指令,也就是字符串的拼接,这其中可能会涉及很多的类型转换,sting转int,string转float等等,int转string, float转string等等。网上资料很多,有需要可以查询


注:在发送向MySQL时,上面的程序发送调用存储过程的指令会发送失败,但调用函数的不会,不太懂,希望大神告知原因,谢谢。


QQ:1786610699      倔强的木木      2017年9月27日

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值