cmake 代码:project(eisc)
#项目名
cmake_minimum_required(VERSION 3.10)
# 编译要求:cmake 要大于最低版本 3.1
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
# 设置编译器, 如果没有配置环境变量,可以改为gcc具体文件路径
include_directories(/datadisk/eisc/server/mysql/mariadb1011/include/mysql/server/)
# include_directories(/datadisk/eisc/server/mysql/mariadb1011/include/mysql/)
# 添加 头文件搜索路径 (mysql.h 搜索路径)
#add_executable("set" set.cpp)
add_executable("sql" sql.cpp)
# 生成可执行文件: 将 test.cpp 编译成 test.exe 可执行文件
target_link_libraries(sql /datadisk/eisc/server/mysql/mariadb1011/lib/libmysqlclient.so)
# rm -rf ./build ; cmake ./ -Bbuild -G "Unix Makefiles" ; cmake --build build
# rm -rf ./build ; cmake ./ -Bbuild ; cmake --build build
# 编译到当前目录下的 build 文件夹
# 也可以不用指定 -G
c++ 代码#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include "mysql.h"
using namespace std;
class MysqlDB
{
private: // private [ˈp raɪ vət] 私有
MYSQL mysql;
MYSQL_ROW row;
MYSQL_RES *result;
MYSQL_FIELD *field;
public:
MysqlDB()
{
if( mysql_init( &mysql ) == NULL ) // 判断数据库初始化
{
cout << "init error, line: " << __LINE__ << endl;
exit(-1);
}
}
~MysqlDB() // 波浪号是析构函数,删除创建的对象时执行。 不会返回任何值和带参数。作用:跳出程序释放资源
{
mysql_close( &mysql );
}
void connect( string host, string user, string passwd, string database )
{
//成功返回MYSQL指向的指针,失败返回NULL
if( !mysql_real_connect( &mysql, host.c_str(), user.c_str(), passwd.c_str(), database.c_str(), 0, NULL, 0 ) )
{
cout << "connect error, line: " << __LINE__ << endl;
exit(-1);
}
}
void createTB();
void add();
void del();
void update();
void print();
};
void MysqlDB::createTB()
{
string id, name, sex, birthday, CTtable;
do
{
cout << "请输入创建表信息:\n";
cin >> CTtable;
string sql = "create table "+ CTtable +"(id int, name varchar(10), sex varchar(20), birthday varchar(20));";
cout << sql << endl;
mysql_query( &mysql, sql.c_str() );
cout << "是否继续(y/n): ";
cin >> id;
} while( id == "y" );
}
void MysqlDB::add()
{
string id, name, sex, birthday,CTtable;
cout << "请输入写入信息:\n";
cin >> id >> name >> sex >> birthday;
string sql = "insert into stu(id,name,sex,birthday) values('" + id + "', '" + name + "', '" + sex + "', '" + birthday + "');";
cout << sql << endl;
mysql_query( &mysql, sql.c_str() );
}
void MysqlDB::del()
{
string id;
do
{
cout << "请输入删除信息的ID:\n";
cin >> id;
string sql = "delete from stu where id='" + id +"';";
cout << sql << endl;
mysql_query( &mysql, sql.c_str() );
cout << "是否继续(y/n): ";
cin >> id;
} while( id == "y" );
}
void MysqlDB::update()
{
string id, filed,value;
do
{
cout << "请输入修改信息ID,字段,值:\n";
cin >> id >> filed >> value;
string sql = "update stu set " + filed +"='" + value + "' where ID='" + id + "';";
cout << sql << endl;
mysql_query( &mysql, sql.c_str() );
cout << "是否继续(y/n): ";
cin >> id;
} while( id == "y" );
}
void MysqlDB::print()
{
string sql = "select * from stu;";
//成功返回0
mysql_query( &mysql, sql.c_str() );
//获取查询查询结果;成功返回result的指针,失败返回NULL
result = mysql_store_result( &mysql );
if( !result )
{
cout << "result error, line : " << __LINE__ << endl;
return ;
}
int num;
num = mysql_num_fields( result ); //返回字段个数
for( int i = 0; i < num; i++ )
{
field = mysql_fetch_field_direct( result, i ); //返回字段类型
cout << field->name << "\t\t"; //输出字段名
}
cout << endl;
while( row = mysql_fetch_row( result ), row != NULL )
{
for( int i = 0; i < num; i++ )
{
cout << row[i] << "\t\t";
}
cout << endl;
}
}
int main()
{
MysqlDB db; // 将 MysqlDB 继承给 db
db.connect( "127.0.0.1", "enchantment", "eisc.cn", "enchantment" );
db.print();
db.createTB();
db.print();
db.add();
db.print();
return 0;
}