文章目录
- 1.Windows下安装MySQL数据库
- 2.环境配置
- 3.常用SQL语句
- 4.数据库常用的API接口
- 5.使用C++对这些常用API进行封装
1.Windows下安装MySQL数据库
1.1下载MySQL
因为我的电脑是64位,所以选择64位的MySQL进行下载
下载地址点击下载MySQL
1.2 安装MySQL
把MySQL文件夹放在自己想要放的位置,注意:路径名字最好不要有中文
1.3 生成data文件夹
以管理员身份运行cmd
进入E:\mysql-5.7.20-winx64\bin 下 放MySQL文件夹的位置
执行命令:mysqld --initialize-insecure --user=mysql 在E:\mysql-5.7.20-winx64目录下生成data目录
1.4启动服务
执行命令:net start mysql 启动mysql服务,若提示:服务名无效…看后面解决方法
1.5解决服务器服务失败问题
提示:服务名无效
解决方法:
执行命令:mysqld -install 即可(不需要my.ini配置文件 注意:网上写的很多需要my.ini配置文件,其实不需要my.ini配置文件也可以,我之前放置了my.ini文件,反而提示服务无法启动,把my.ini删除后启动成功了)
若出现下图,需要去资源管理器中把mysql进程全结束了,重新启动即可。
1.6 登录MySQL
登录mysql:(因为之前没设置密码,所以密码为空,不用输入密码,直接回车即可)
1.7 退出MySQL
mysql> quit
Bye
2.环境配置
建立vs工程,将mysql的库函数以及库文件加载到工程目录下,该文件一般在mysql的安装目录下
/>> 包含头文件目录: 项目–>属性—>C/C++选项—>常规—>附加包含目录
/>> 包含静态库文件: 项目—>属性—>链接—>常规—>附加库目录
/>> 将静态库引入到工程中:项目—>属性—>链接—>输入—>附加依赖项,添加:libmysql.lib;
头文件引入的顺序
引入文件的顺序需要注意 <mysql.h>一定要在<Winsock2.h>后引入
3.常用SQL语句
连接数据库:mysql -h 127.0.0.1 -P 3306 -u root -p 注意:-h 127.0.0.1 表示本地连接 -P 3306 MySQL的默认端 口号 -u root 代表用户 -p 后面输入密码
显示数据库: show databases;
选择数据库: use cashier;
显示当前数据库中所有表:show tables;
显示指定表结构:desc employee;
创建数据库: create database Cashier;
4.数据库常用的API接口
/>> 初始化数据库:mysql_init
/ >> 链接数据库:mysql_real_connect
/>> 执行sql语句:mysql_query
/ >> 断开连接: mysql_close
/ >> mysql_store_result: 检索完整的数据集到客户端
/ >> mysql_num_fields:结果集中总共有多少行
/ >> mysql_fetch_row(resource result): 从指定的结果集中获取一行数据并作为数组返回
/ >> mysql_free_result: 释放结果集
5.使用C++对这些常用API进行封装
头文件 MySQL.h
#pragma once
#include <iostream>
#include <WinSock2.h>
#include <mysql.h>
#include <string>
#include <vector>
using namespace std;
class MySQL {
public:
MySQL();
bool ConnectionMySql(const char* host,const char* user,const char* passward,const char* dbName,int port=3306);
~MySQL();
bool Insert(const string& strSQL);
bool Delete(const string& strSQL);
bool Update(const string& strSQL);
size_t GetCount(const string& strSQL);
vector<vector<string>> Select(const string& strSQL);
bool SelectDB(const string& daName);
private:
MYSQL* _mysql;
string _dbName;
vector<string> _tables;
};
CPP文件 MySQL.cpp
#include "MySQL.h"
MySQL::MySQL() {
_mysql = mysql_init(nullptr);
}
bool MySQL::ConnectionMySql(const char* host, const char* user, const char* passward, const char* dbName, int port) {
if (!mysql_real_connect(_mysql, host, user, passward, dbName, port, NULL, 0)) {
return false;
}
mysql_query(_mysql, "set names 'gbk'");
return true;
}
bool MySQL::Insert(const string& strSql) {
if (mysql_query(_mysql, strSql.c_str())) {
return false;
}
return true;
}
bool MySQL::Update(const string& strSQL) {
if (mysql_query(_mysql, strSQL.c_str()))
return false;
return true;
}
vector<vector<string>> MySQL::Select(const string& sql) {
vector<vector<string>> vRet;
if (mysql_query(_mysql, sql.c_str())) {
string vsRet(mysql_error(_mysql));
return vRet;
}
MYSQL_RES* res = mysql_store_result(_mysql);
if (res == NULL) {
return vRet;
}
MYSQL_ROW rows;
int num_fields = mysql_num_fields(res);
while (rows = mysql_fetch_row(res)) {
int i = 0;
vector<string> vItem;
vItem.resize(num_fields);
for (i = 0; i < num_fields; ++i) {
vItem[i] = rows[i];
}
vRet.push_back(vItem);
}
const char* str = mysql_error(_mysql);
mysql_free_result(res);
return vRet;
}
size_t MySQL::GetCount(const string& strSQL) {
if (mysql_query(_mysql, strSQL.c_str())) {
return 0;
}
MYSQL_RES* res = mysql_store_result(_mysql);
if (res == NULL) {
return 0;
}
return mysql_num_fields(res);
}
bool MySQL::Delete(const string& strSQL) {
if (mysql_query(_mysql, strSQL.c_str()))
return false;
return true;
}
MySQL::~MySQL() {
mysql_close(_mysql);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)