/*********
代码功能:
建立一个简单数据库并进行检索。
数据库字段分别为:a(int), b(int), res(int)。
其中特征1: b = a + 1, 特征2: res = a + b。
数据库检索:用户随意输入一个整数a,检索其放入数据库得到的特征res值
与数据库中已存的res值相差不超过5的结果并打印输出。
可改进之处:
设置超参数,决定检索的数据是否放入数据库中。
如果直接放入数据库中,打印结果并存放相关数据内容到数据库中,否则只打印相差结果。
**********/
#include<iostream>
#include<mysql.h>
#include<string>
using namespace std;
const string TABLE_NAME = "test";//表名
MYSQL mysql;
MYSQL_RES *res; //这个结构代表返回行的一个查询结果集
bool ConnectDatabase()
{
//初始化mysql
mysql_init(&mysql); //连接mysql,数据库 //初始化一个MySQL结构
const char host[] = "localhost"; //主机名
const char user[] = "root"; //用户名
const char psw[] = "123456";
const char db[] = "video"; //数据库名
const int port = 3306; //端口名
//返回false则连接失败,返回true则连接成功
if (!(mysql_real_connect(&mysql, host, user, psw, db, port, NULL, 0)))
//中间分别是主机,用户名,密码,数据库名,端口号(可以写默认0或者3306等),可以先写成参数再传进去
return false;
else
return true;
}
void FreeConnect()//释放资源并关闭数据库连接
{
mysql_free_result(res);
mysql_close(&mysql);
}
int get_b(int a)//获取特征1:b
{
return a + 1;
}
int get_res(int a)//获取特征2:res
{
int b = get_b(a);
return a + b;
}
string get_insert_query(int a)//获取插入数据语句
{
char s[100];
int b = get_b(a);
sprintf_s(s, "insert into %s (a,b,res) values(%d,%d,%d);", TABLE_NAME, a, b, get_res(a));
return s;
}
void operate_status(string query)//语句执行
{
if (mysql_query(&mysql, query.c_str()))
printf("语句%s操作失败, ERROR: %s", query.c_str(),mysql_error(&mysql));
else
return;
}
void writetoDB(int a)//写进数据库
{
string query = get_insert_query(a);
operate_status(query);
}
bool in_threshold(int a, int b, int threshold)//与阈值比较
{
if (abs(a - b) < threshold)
return true;
else
return false;
}
MYSQL_RES* get_res_from_mysql(string query)//返回运行某语句后的结果集
{
operate_status(query);
MYSQL_RES *res;
res = mysql_store_result(&mysql);
return res;
}
int main()
{
if (ConnectDatabase()){
cout << "数据库连接成功" << endl;
}
else
return -1;
//====================建立数据库==========================//
/*string query1 = "create table if not exists " + TABLE_NAME + "(id int primary key auto_increment,\
a int not null,b int,res varchar(20)); ";
operate_status(query1);
writetoDB(2);
writetoDB(3);
writetoDB(6);
writetoDB(5);
writetoDB(3);
writetoDB(4);*/
//=======================================================//
cout << "数据库建立完毕......" << endl;
cout << "进行数据库检索......" << endl;
//====================数据库检索==========================//
//增加检索结果字段retrieval_res
/*string add_column = "alter table " + TABLE_NAME + " add retrieval_res varchar(100);";
operate_status(add_column);*/
cout << "请输入一个int型整数: " ;
int input;
cin >> input;
int obj = get_res(input);
string get_result_query = "select * from " + TABLE_NAME +";";
operate_status(get_result_query);//获取数据库所有数据
MYSQL_RES *res = mysql_store_result(&mysql);//获得结果集
int columns;
string ret = "";//输出结果
MYSQL_ROW row;
while (row = mysql_fetch_row(res))//遍历结果集的行
{
string id = row[0];
string data = row[3];
int data_int = atoi(data.c_str());
if (in_threshold(obj, data_int, 5))
ret += "与id = " + id + "的记录res值相差" + to_string(abs(obj - data_int)) + ";\n";
}
if (ret.length() <= 0)
cout << "数据库中无符合条件的记录!" << endl;
else
{
ret = "有以下数据与检索数据的res特征值差值小于5:\n" + ret;
cout << ret << endl;
}
//=======================================================//
FreeConnect();
system("pause");
return 0;
}
数据库信息:
数据库检索: