Ubuntu 12.0.4下安装MySQL并开发C++程序

1.安装MySQL
本来,按照常识,直接执行下面的apt命令就好。但其实安装失败了。

$ sudo apt-get install mysql-server

mysql命令虽然能找到,但敲下后会报错误

Can’t connect to local MySQL server through socket

这是MySQL需要的包不全导致的。即使执行apt update也不行。
需要安装MySQL的内核和客户端

 $ sudo apt-get install mysql-core-core5.5
 $ sudo apt-get install mysql-client

再执行

$ sudo apt-get install mysql-server

就可以了.
成功的话,安装过程中会弹出如下图的界面,要求输入root的密码。(这里设为123456)
mysql-setup

2.配置一个测试用的数据库
2.1 进入mysql界面

 $ mysql -uroot -p123456

2.2 创建一个DATABASE

 mysql> CREATE DATABASE cpptest;

*mysql的控制台,SQL语句要以”;”结尾.
2.3 创建一个表

 mysql>; CREATE TABLE T_ATTEND( name VARCHAR(20), thedate CHAR(10) );

2.4 插入若干条数据

 mysql>; insert into T_ATTEND values( 'zhang', '2015-04-01' ) ;
 mysql> insert into T_ATTEND values( 'susan', '2015-04-01' ) ;
 mysql> insert into T_ATTEND values( 'messi', '2015-04-01' ) ;
 mysql> insert into T_ATTEND values( 'Jordan', '2015-04-01' ) ;
 mysql> insert into T_ATTEND values( 'James', '2015-04-01' ) ;
 mysql> insert into T_ATTEND values( 'James', '2015-04-13' ) ;

2.5 查看结果

mysql> select * from T_ATTEND;

3.编写一段C++代码
3.1 安装MySQL开发用函数库

 
$ sudo apt-get install libmysqlclient-dev

3.2 编写一个连接数据库用的类DBServer.默认数据库为刚才创建的库.
dbserver.h

#ifndef _DB_CONNECTOR_H_
#define _DB_CONNECTOR_H_
#include<stdlib.h>
#include<iostream>
#include<string>
#include <mysql/mysql.h>
#ifndef US
#define US (unsigned short)
#endif
using namespace std ;
class DBServer
{
public: 
	DBServer() ;
	~DBServer() ;
public:
	unsigned short Init( const string strInitStr ) ;
	unsigned short Connect() ;
	unsigned short Connect( const string strServer = "localhost",
				const string strUser = "root",
				const string strPwd = "123456",
				const string strDBName = "cpptest" );
	unsigned short Disconnect() ;
	unsigned short Query( const string strParam, MYSQL_RES*&amp; pResult ) ;
	unsigned short Execute() ;
protected:
	MYSQL* 		m_pConn ;
	MYSQL_RES*	m_pRes ;
	string		m_strErr ;
};

#endif

dbserver.cpp

#include "dbserver.h"
#include <stdio.h>

DBServer::DBServer()
: m_pConn(NULL)
{
}

DBServer::~DBServer()
{
}

unsigned short DBServer::Init( const string strInitStr )
{
	m_pConn = mysql_init(NULL) ;
	printf("****Init****\n") ;
	//printf(" pConn = %08X \n", (int)m_pConn ) ;
	return 0 ;
}

unsigned short DBServer::Connect()
{
	return 0 ;
}

unsigned short DBServer::Connect( const string strServer /*= "localhost"*/,
                        const string strUser /*= "root"*/,
                        const string strPwd /*= "123456"*/,
                        const string strDBName /*= "cpptest"*/ )
{
	if ( !mysql_real_connect( m_pConn,  
				strServer.c_str(), 
				strUser.c_str(),
				strPwd.c_str(),
				strDBName.c_str(),
				0,
				NULL,
				0) )
	{
		printf("Can't connect to Database\n") ;
		return 1 ;
	}
	return  0 ;
}

unsigned short DBServer::Disconnect()
{
	mysql_close( m_pConn  ) ;
	return 0 ;
}

unsigned short DBServer::Query( const string strParam, MYSQL_RES*&amp; pResult )
{
	if ( mysql_query( m_pConn, strParam.c_str() ) )
	{
		m_strErr = mysql_error( m_pConn ) ;
	}
	pResult = mysql_use_result( m_pConn ) ;
	//printf( "QueryLen= %d\n", (int)mysql_fetch_lengths(res) );
	//*pResult = *res ;
	return 0 ;
}

unsigned short DBServer::Execute()
{
	return 0 ;
}

3.3 编写主程序,调用刚才写好的类
signin.cpp

#include "dbserver.h"
#include <stdio.h>
#define _SELECT_ALL_ "SELECT * FROM T_ATTEND " 
main()
{
	DBServer server ;
	MYSQL_RES* pRes ;
	MYSQL_ROW row ;
	do
	{
		if (  0 != server.Init("") )
		{
			break ;
		}
		if ( 0 != server.Connect("localhost")  )
		{
			break ;
		}
		if ( 0 != server.Query( _SELECT_ALL_, pRes  ) )
		{
			break ;
		}
		printf( "Querey length %d\n", (int)mysql_num_rows(pRes) ) ;
		row = mysql_fetch_row(pRes) ;
		while( NULL !=  row )
		{
			printf( "NAME: %s \t\t DATE: %s \n", row[0], row[1] ) ;
			row = mysql_fetch_row(pRes) ;
		}
		mysql_free_result( pRes ) ;
		server.Disconnect() ;
	}
	while(0) ;
}

3.4 编译

$ g++ dbserver.cpp signin.cpp  -L/usr/lib/mysql -I/usr/include/mysql/ -lmysqlclient  -o mytest

3.5 验证

$ ./mytest

MYSQL API的用法,可以在http://docstore.mik.ua/orelly/linux/sql/ch19_01.htm找到.

已有9条评论

  1. 我只觉得那头猪养的不错。

    1. 都是主席指导的好.

  2. W

    真心看不懂,不过我会时常来转转的。

    1. 不知道,反正按年代论一定是死猪。

  3. 估计不少人会碰到和你一样的问题的。

    1. 希望对后来人有所帮助

  4. 好多技术性文章~~学习下 欢迎每天互访~~

  5. 一直没明白为什么执行命令要加上sudo

    1. 因为Ubuntu默认把root帐号藏了起来,没有给普通用户授予root权限.给系统装工具这种事显然是需要root级别才能做的.
      sudo的意思就是super user do,就是以超级用户的身份去执行后面的命令.

  6. W

    顶头那只猪博主从哪里领来的,色调,风格,太有意思了。
    那人脸上洋溢着的不是幸福是什么?

    1. 一个专门收中国宣传画的英文站,需翻墙.

  7. 因为文章的重点看不懂所以都跑到那头猪上面去了 我觉得

  8. 大哥,c++写的真溜啊,佩服。

你好,新朋友。留言前请先填写昵称邮箱