1.进入MySQL后,用mysql数据库 1.1查看一看user表1.2从user拿出来User和Host
1.3创建一个用户表,只允许本地(想要远端链接就把'localhost'改成'%')代码语言:javascript代码运行次数:0运行复制mysql> create user '自己取的名字'@'localhost' identified by '自己的密码';1.4再查一下用户就有了(connector)1.5测试一下能否登录上1.6创建一个可以连接的数据库(在root创建的)1.7但ljw这没法查看到,需要root给权限1.8给权限再刷新一下1.9ljw就可以show看到了2.现在是localhost(本地连接),没法用Windows链接3.访问数据库,安装C/C++可以访问MySQL的库3.1开发环境3.1.1下载头文件如果没有下载:下载头文件;可以用这个命令下载一下:
代码语言:javascript代码运行次数:0运行复制sudo apt install libmysqlclient-dev3.1.2查看3.1.3可以更改mysql端口号(3306)代码语言:javascript代码运行次数:0运行复制vim /etc//mysql//mysql.conf.d/mysqld.cnf自己添加即可
4.在vscode上进行测试4.1创建一个目录4.2在vscode上打开并创建文件4.3包含头文件代码语言:javascript代码运行次数:0运行复制#include
#include
int main() {
printf("mysql client Version: %s\n", mysql_get_client_info());
return 0;
}makfile(记得加上 -lmysqlclient)代码语言:javascript代码运行次数:0运行复制test:test.cc
g++ -o $@ $^ -std=c++11 -lmysqlclient
.PHONY:clean
clean:
rm -f test5.mysql接口介绍5.1官方文档MySQL :: MySQL 9.1 C API Developer Guide
5.2介绍一下常用的几个接口 要使用库,必须先进行初始化! 常用接口 mysqld是一套网络服务那么就注定了我们在进行mysql操作之前,一定是要能链接上mysql,所以要在之前创建一些基础的mysql数据结构。
5.2.1初始化mysql_init()MySQL :: MySQL 8.0 C API Developer Guide :: 5.4.41 mysql_init()
代码语言:javascript代码运行次数:0运行复制int main()
{
MYSQL* my = mysql_init(nullptr);
if(my == nullptr)
{
cerr<< "init MySQL error" < return 1; } return 0; }5.2.2关闭数据库mysql_closeMySQL :: MySQL 5.7 C API Developer Guide :: 5.4.5 mysql_close() 5.2.3链接数据库mysql_real_connectMySQL :: MySQL 8.0 C API Developer Guide :: 5.4.58 mysql_real_connect() 初始化完毕之后,必须先链接数据库,在进行后续操作。(mysql网络部分是基于TCP/IP的) 代码语言:javascript代码运行次数:0运行复制const string host = "localhost"; const string user = "ljw"; const string passwd = "ljw031126"; const string db = "jj"; const unsigned int port = 6666;代码语言:javascript代码运行次数:0运行复制#include #include #include using namespace std; const string host = "localhost"; const string user = "ljw"; const string passwd = "ljw031126"; const string db = "jj"; const unsigned int port = 6666; int main() { MYSQL* my = mysql_init(nullptr); if(my == nullptr) { cerr<< "init MySQL error" < return 1; } if(mysql_real_connect(my, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0) == nullptr) { cerr<< "connect MYSQL error" < return 2; } //到这就链接成功了 cout<< "success" < //关闭~ mysql_close(my); return 0; } 测试: 5.2.3.1建立好链接之后,获取英文没有问题,如果获取中文是乱码:设置链接的默认字符集是utf8,原始默认是latin1 5.2.3.1.1mysql_set_character_setMySQL :: MySQL 5.7 C API 开发指南 :: 5.4.69 mysql_set_character_set() 代码语言:javascript代码运行次数:0运行复制mysql_set_character_set(myfd, "utf8");5.2.4 查看链接失败若关闭mysql服务就会连接失败 5.2.5查看链接状态代码语言:javascript代码运行次数:0运行复制show processlist; 5.2.6 下发mysql命令mysql_queryMySQL :: MySQL 8.4 C API 开发指南 :: 5.4.57 mysql_query() 代码语言:javascript代码运行次数:0运行复制#include #include #include #include using namespace std; const string host = "localhost"; const string user = "ljw"; const string passwd = "ljw031126"; const string db = "jj"; const unsigned int port = 6666; int main() { MYSQL* my = mysql_init(nullptr); if(my == nullptr) { cerr<< "init MySQL error" < return 1; } if(mysql_real_connect(my, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0) == nullptr) { cerr<< "connect MYSQL error" < return 2; } string sql; while(true) { cout<< "MYSQL>>>"; if(!getline(cin, sql) || sql == "quit") { cout<< "bye bye" < break; } int n =mysql_query(my, sql.c_str()); if(n == 0) { cout<< sql << "success: " << n < } else{ cerr<< sql << "faild" < } } //到这就链接成功了 cout<< "success" < //关闭~ mysql_close(my); return 0; }测试: 先创建个表,并给上权限 这里的;可以不用加 (这里测试时,没法直接back,要按住ctrl 和 back一起) 5.2.7常规用法 增删改是最简单的,只需要保证这个是成功的 这个select不行,没结果 5.3解决select5.3.1获取执行结果mysql_store_resultMySQL :: MySQL 8.0 C API 开发指南 :: 5.4.84 mysql_store_result() 把结果转储到MYSQL_RES了(是为了更好的做二次处理) 5.3.2 表上数据的本质就是一个二维数组(行,列)5.3.2.1获取结果行数mysql_num_rows5.3.2.2获取结果列数mysql_num_fields 5.3.2.3 如同迭代器一般 获取结果内容mysql_fetch_row这样的话结果就拿到了 这样就可以打印出来了 5.3.3 获取列属性 mysql_fetch_fields MySQL :: MySQL 5.7 C API Developer Guide :: 5.4.19 mysql_fetch_fields() 打印结果 很多内容属性都可以查 5.3.4 记得释放 mysql_free_result