linux下C++访问mysql数据库(2)

在这个程序中,比上一次的要完善一些,实现了通过C++对数据表进行添加,修改,插入,删除的功能。

头文件——myDB.h:

#ifndef myDB_class
#define myDB_class

#include <iostream>
#include <string>
#include <mysql/mysql.h>

class myDB
{
public:
	myDB();
	~myDB();
	int initDB(std::string host, std::string user, std::string password, std::string db_name);
	void Run();

private:
	int exeSQL();
	int insertSQL();
	int deleteSQL();
	int updateSQL();
	MYSQL *connection;
	MYSQL_RES *result;
	MYSQL_ROW row;
};

#endif

myDB.cpp

#include "myDB.h"
#include <iostream>
#include <cstdlib>

using namespace std;

myDB::myDB()
{
	connection = mysql_init(NULL); // 初始化数据库的连接变量
	if(connection == NULL)
		{
			std::cout << "error:" << mysql_error(connection);
			exit(1);			// exit(1)表示发生错误后退出程序, exit(0)表示正常退出
		}
}

myDB::~myDB()
{
	if(connection != NULL)
		{
			mysql_close(connection); // 关闭数据库连接
		}
}

int myDB::initDB(std::string host, std::string user, std::string password, std::string db_name)
{
        char value = 1;
        mysql_options(connection_,MYSQL_OPT_RECONNECT,(char*)&value);//mysql自动重连
        
	connection = mysql_real_connect(connection, host.c_str(), user.c_str(), password.c_str(), db_name.c_str(), 0, NULL, 0); // 建立数据库连接
	if(connection == NULL)
	{
		std::cout << "error:" << mysql_error(connection);
		exit(1);			// exit(1)表示发生错误后退出程序, exit(0)表示正常退出
	}
	return 0;
}

int myDB::exeSQL()
{
    // mysql_query()执行成功返回0,失败返回非0值。与PHP中不一样
	std::string sql;
	sql = "select * from user;";
    if(mysql_query(connection, sql.c_str()))
    {
		std::cout << "Query Error:" << mysql_error(connection);
        exit(1);
    }
    else
    {
        result = mysql_use_result(connection); // 获取结果集
        // mysql_field_count()返回connection查询的列数
        for(int i=0; i < mysql_field_count(connection); ++i)
        {
            // 获取下一行
            row = mysql_fetch_row(result);
            if(row <= 0)
            {
                break;
            }
            // mysql_num_fields()返回结果集中的字段数
            for(int j=0; j < mysql_num_fields(result); ++j)
            {
				std::cout << row[j] << " ";
            }
			std::cout << endl;
        }
		std::cout << endl;
        // 释放结果集的内存
        mysql_free_result(result);
    }
    return 0;
}

int myDB::insertSQL()
{
	std::string username;
	std::string psd;
	std::string level;
	std::cout << "请输入id、username、password、level:" << std::endl;
	std::cin >> username >> psd >> level;
	string sql = "insert into user(id,username,password,level) values ( NULL,'" + username +"','"+ psd  +"', "+ level +");";
	if(mysql_query(connection, sql.c_str()))
	{
		std::cout << "Query Error:" << mysql_error(connection);
		exit(1);
	}
	std::cout << endl;
	exeSQL();
	return 0;
}

int myDB::deleteSQL()
{
	std::string id;
	std::cout << "输入要删除用户的ID:" << std::endl;
	std::cin >> id;
	std::string sql;
	sql = "delete from user where id = " + id + ";";
	if(mysql_query(connection, sql.c_str()))
	{
		std::cout << "Query Error:" << mysql_error(connection);
		exit(1);
	}
	std::cout << endl;
	exeSQL();
	return 0;
	
}

int myDB::updateSQL()
{
	std::string id;
	std::string thing;
	std::cout << "请输入要修改的用户的id与内容(eg:修改1号用户的姓名,输入:1 【回车】 username = 'Mary')" << std::endl;
	std::cin >> id >> thing;
	std::string sql;
	sql = "update user set " + thing + "where id =" + id + ";";
	if(mysql_query(connection, sql.c_str()))
	{
		std::cout << "Query Error:" << mysql_error(connection);
		exit(1);
	}
	std::cout << endl;
	exeSQL();
	return 0;
	
}

void myDB::Run()
{
		int i = 1;
	while(i != 0)
		{
			int sel;
			std::cout << "1、查询    2、添加     3、删除    4、修改    5、退出" << std::endl;
			std::cin >> sel;
			switch(sel)
			{
			case 1:exeSQL();
				break;
			case 2:insertSQL();
				break;
			case 3:deleteSQL();
				break;
			case 4:updateSQL();
				break;
			case 5:i = 0;
				break;
			default:std::cout << "error" << std::endl;
				break;
			}
		}
}


main.cpp

#include <iostream>
#include "myDB.h"

int main()
{
	myDB db;
	db.initDB("localhost", "root", "wei123", "wei");
	db.Run();
	return 0;
}

所有代码就都在这里了,下面是makefile文件

Makefile

mydb:main.cpp myDB.cpp
	g++ -o mydb main.cpp myDB.cpp -lmysqlclient

clean:
	rm -f *.o mydb

(g++ 和rm之前用Tab隔开)

你可能感兴趣的:(linux下C++访问mysql数据库(2))