这几天学习到了c++连接数据库,跟之前java的真的是完全不同。特别是登陆成功与否的判断问题,走了许多弯路,mysql_query()这个函数负责执行sql语句,只要sql语句没有出错就会一只返回0,所以不能凭借他的返回值来判断是否登陆成功,应该配合mysql_store_result()和mysql_num_rows()来获取受影响的行数,如果查找到数据则返回1,没有查找到就返回0,可以凭借此来判断是否登陆成功。
mysql_query()方法判断sql语句是否执行成功。
在我的数据库如下图所示,id为主键,自增不为空,所以用户注册之后需要返回他的注册id 是多少,这时有两个方法,mysql.h里面的mysql_insert_id()方法和max(id)方法。但因为后者在并发用户同时注册时返回值的正确性,所以不在此多介绍,
mysql_insert_id()定义:
mysql_insert_id() 函数返回上一步 INSERT 操作产生的 ID。
如果上一查询没有产生 AUTO_INCREMENT 的 ID,则 mysql_insert_id() 返回 0。
语法
mysql_insert_id(connection)
可以很清楚的看到这个函数的用法,结果就是返回一个值,就是用户最后后注册的id。
运行后的结果:
下面是源码,写的有点乱,见谅。
#include<iostream>
#include<Windows.h>
#include <mysql.h>
#include<string>
using namespace std;
MYSQL_RES* result = NULL;
int connect() {//用于连接数据库并初始化
MYSQL mysql;//必备的一个数据结构
mysql_init(&mysql);//开辟空间
MYSQL_RES* result = NULL;
//初始化数据库
if (0 == mysql_library_init(0, NULL, NULL)) {
cout << "mysql_library_init() succeed" << endl;
}
else {
cout << "mysql_library_init() failed" << endl;
return -1;
}
//初始化数据结构
if (NULL != mysql_init(&mysql)) {
cout << "mysql_init() succeed" << endl;
}
else {
cout << "mysql_init() failed" << endl;
return -1;
}
//连接数据库
if (NULL
!= mysql_real_connect(&mysql, "localhost", "root", "123456", "test",
3306, NULL, 0))
//这里的地址,用户名,密码,端口可以根据自己本地的情况更改
{
cout << "mysql_real_connect() succeed" << endl;
}
else {
cout << "mysql_real_connect() failed" << endl;
return -1;
}
//cout << "please input username" << endl;
//string username;
//getline(cin, username);//接收用户名
//cout << "please input password" << endl;
//string password;
//getline(cin, password);//接收密码
//string query = "select * from test.login where username='" + username + "' and password='" + password + "'";
// //查询
//mysql_query(&mysql, query.data());
//result = mysql_store_result(&mysql);
cout << mysql_num_rows(result);
system("pause");
// //if (mysql_query(&mysql, query.data()))
//if(mysql_num_rows(result))
// {
// cout << "登陆成功";
// }
// else {
// cout << "登陆失败";
// }
// system("pause");
// mysql_close(&mysql);
// mysql_server_end();
cout << "please input username" << endl;
string username;
getline(cin, username);//接收用户名
cout << "please input password" << endl;
string password;
getline(cin, password);//接收密码
string query = "insert into test.login values('0','" + username + "','" + password + "');";
//string query = "insert into test.login(username,password) values('"username"','"password"');";
//查询
//cout << mysql_num_rows(result);
//system("pause");
//if (mysql_query(&mysql, query.data()))
if (mysql_query(&mysql, query.data()))
{
cout << "插入失败";
cout << endl;
cout << mysql_error(&mysql);
}
else {
cout << "插入成功";
cout << endl;
cout << "正在查询您的id" << endl;
}
Sleep(1000);
cout << "还有3秒" << endl;
Sleep(1000);//使程序暂停一秒,需包含windows.h头文件
cout << "还有2秒" << endl;
Sleep(1000);
cout << "还有1秒" << endl;
Sleep(1000);
string fanhui = "SELECT LAST_INSERT_ID();";
mysql_query(&mysql, fanhui.data());//用于执行sql语句,返回值为0则代表执行成功,不能借此判断是否插入或者查询成功,因为只要语句没问题都会返回0;
int x = mysql_insert_id(&mysql);//该方法用于获取刚刚插入数据的id,赋值给x
cout << "查询成功" << endl;
cout << "您的id为:" << x << endl;
system("pause");
mysql_close(&mysql);
mysql_server_end();
return 0;
}
如有问题,欢迎各位指出,谢谢。