C++与mysql连接遇到的问题汇总

接下来我会详细讲解如何解决C++与mysql连接遇到的常见问题。

C++与mysql连接遇到的问题汇总

安装mysql驱动

在C++中连接mysql需要用到mysql的驱动,因此要先安装mysql驱动。

Windows平台下的mysql驱动安装

  • 下载mysql C++ Connector

mysqldownload.csdn.net/pr/d/1575/download/36

  • 解压安装

解压后得到一个lib文件夹和一个include文件夹,将lib文件夹中的libmysql.lib(如果是64位系统的话,是libmysql64.lib)复制到C++的lib文件夹下面,将include文件夹中的内容全部复制到C++的include文件夹下面。

注意:lib文件夹和include文件夹中的文件都要复制到正确的位置,否则连接mysql时会出现找不到文件的错误。

Linux平台下的mysql驱动安装

  • Ubuntu系统

在终端中输入以下命令:

sudo apt-get install libmysqlcppconn-dev

等待安装完成后,就可以用C++连接mysql了。

  • CentOS系统

在终端中输入以下命令:

sudo yum install mysql-connector-c++-devel

等待安装完成后,就可以用C++连接mysql了。

建立连接

在使用C++连接mysql之前,需要先建立连接。

#include <iostream>
#include "mysql_connection.h"
#include "mysql_driver.h"
#include "cppconn/exception.h"
#include "cppconn/resultset.h"
#include "cppconn/statement.h"
using namespace std;
using namespace sql::mysql;

int main() {
    try {
        /* 建立连接 */
        sql::Driver *driver;
        sql::Connection *conn;
        sql::Statement *stmt;
        sql::ResultSet *res;
        driver = get_driver_instance();
        conn = driver->connect("tcp://127.0.0.1:3306", "root", "password");
        stmt = conn->createStatement();
        /* 连接成功后,可以在这里进行操作 */
        stmt->execute("CREATE DATABASE IF NOT EXISTS test");
        stmt->execute("USE test");
        stmt->execute("CREATE TABLE IF NOT EXISTS user ("
                      "id INT NOT NULL AUTO_INCREMENT,"
                      "name VARCHAR(20) NOT NULL,"
                      "age INT NOT NULL,"
                      "PRIMARY KEY (id))");
        cout << "created table user" << endl;
        /* 关闭连接 */
        delete stmt;
        delete conn;
    } catch (sql::SQLException &e) {
        cout << "# ERR: SQLException in " << __FILE__;
        cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
        cout << "# ERR: " << e.what();
        cout << " (MySQL error code: " << e.getErrorCode();
        cout << ", SQLState: " << e.getSQLState() << " )" << endl;
    }
    return 0;
}
  • 使用指定的用户名和密码建立连接:

conn = driver->connect("tcp://127.0.0.1:3306", "root", "password");

这里的127.0.0.1是mysql的IP地址,3306是mysql的端口号,root是用户名,password是密码。如果用户名和密码是正确的,连接将建立成功。

  • 连接成功后,可以使用stmt对象进行mysql相关操作。

stmt->execute("CREATE DATABASE IF NOT EXISTS test");

这里创建了一个名为test的数据库。

查询数据

在mysql中查询数据,需要使用到mysql中的SELECT语句。在C++中,可以使用sql::ResultSet对象来保存查询结果。

try {
    /* 建立连接 */
    sql::Driver *driver;
    sql::Connection *conn;
    sql::Statement *stmt;
    sql::ResultSet *res;
    driver = get_driver_instance();
    conn = driver->connect("tcp://127.0.0.1:3306", "root", "password");
    stmt = conn->createStatement();
    /* 查询数据 */
    res = stmt->executeQuery("SELECT * FROM user");
    while (res->next()) {
        cout << "id: " << res->getInt("id") << endl;
        cout << "name: " << res->getString("name") << endl;
        cout << "age: " << res->getInt("age") << endl;
        cout << endl;
    }
    /* 关闭连接 */
    delete res;
    delete stmt;
    delete conn;
} catch (sql::SQLException &e) {
    cout << "# ERR: SQLException in " << __FILE__;
    cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
    cout << "# ERR: " << e.what();
    cout << " (MySQL error code: " << e.getErrorCode();
    cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}
  • 查询语句:

SELECT * FROM user

这里查询了user表中的所有数据。

  • 使用res对象保存查询结果:

res = stmt->executeQuery("SELECT * FROM user");

  • 遍历结果集并输出:

while (res->next()) {
cout << "id: " << res->getInt("id") << endl;
cout << "name: " << res->getString("name") << endl;
cout << "age: " << res->getInt("age") << endl;
cout << endl;
}

这里使用了res->getInt("id")、res->getString("name")和res->getInt("age")来获取查询结果中的数据。

以上就是使用C++连接mysql时遇到问题的解决方案,希望能对你有所帮助。

示例1:

  • 首先,我们需要在mysql中创建一个database和一个table,用来存储我们的数据。

CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE IF NOT EXISTS student (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO student (name, age) VALUES ("Tom", 18);
INSERT INTO student (name, age) VALUES ("Jerry", 19);

  • 然后,在C++中连接mysql并查询student表中的所有数据。

cpp
try {
/* 建立连接 */
sql::Driver* driver;
sql::Connection* conn;
sql::Statement* stmt;
sql::ResultSet* res;
driver = get_driver_instance();
conn = driver->connect("tcp://127.0.0.1:3306", "root", "password");
stmt = conn->createStatement();
/* 查询数据 */
res = stmt->executeQuery("SELECT * FROM student");
while (res->next()) {
cout << "id: " << res->getInt("id") << endl;
cout << "name: " << res->getString("name") << endl;
cout << "age: " << res->getInt("age") << endl;
cout << endl;
}
/* 关闭连接 */
delete res;
delete stmt;
delete conn;
}
catch (sql::SQLException& e) {
cout << "# ERR: SQLException in " << __FILE__;
cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
cout << "# ERR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}

  • 编译运行,输出结果:

```
id: 1
name: Tom
age: 18

id: 2
name: Jerry
age: 19
```

示例2:

  • 我们还可以使用C++向mysql中插入一条数据。

cpp
try {
/* 建立连接 */
sql::Driver* driver;
sql::Connection* conn;
sql::Statement* stmt;
driver = get_driver_instance();
conn = driver->connect("tcp://127.0.0.1:3306", "root", "password");
stmt = conn->createStatement();
/* 插入数据 */
stmt->execute("INSERT INTO student (name, age) VALUES ('Lisa', 20)");
/* 查询数据 */
sql::ResultSet* res = stmt->executeQuery("SELECT * FROM student");
while (res->next()) {
cout << "id: " << res->getInt("id") << endl;
cout << "name: " << res->getString("name") << endl;
cout << "age: " << res->getInt("age") << endl;
cout << endl;
}
/* 关闭连接 */
delete res;
delete stmt;
delete conn;
}
catch (sql::SQLException& e) {
cout << "# ERR: SQLException in " << __FILE__;
cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
cout << "# ERR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}

  • 编译运行,输出结果:

```
id: 1
name: Tom
age: 18

id: 2
name: Jerry
age: 19

id: 3
name: Lisa
age: 20
```

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++与mysql连接遇到的问题汇总 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • go xorm框架的使用

    Go Xorm是一款Go语言的ORM框架,它提供了对数据库的增删改查操作,支持多种数据库,包括MySQL、PostgreSQL、SQLite、Oracle等等。使用Go Xorm可以极大地简化数据库的操作,提高开发效率。 下面是Go Xorm框架的使用攻略: 安装Go Xorm并创建数据库连接 要安装Go Xorm,可以在终端中执行以下命令: go get …

    database 2023年5月21日
    00
  • sql优化实战 把full join改为left join +union all(从5分钟降为10秒)

    SQL优化是提高数据库性能的重要手段之一,本文将详细讲解如何通过将FULL JOIN改为LEFT JOIN + UNION ALL的方式,将查询时间从5分钟降为10秒。 什么是FULL JOIN? FULL JOIN是一种关联查询方式,它会返回左右两个表中所有的记录,即使没有匹配的记录也会被显示出来。在SQL语句中,FULL JOIN可以通过“FULL OU…

    database 2023年5月19日
    00
  • MySQL学习笔记之数据的增、删、改实现方法

    MySQL学习笔记之数据的增、删、改实现方法 添加新数据 MySQL中添加新数据的语句为INSERT INTO。可以使用下面的格式添加单行数据: INSERT INTO table_name (column1, column2, column3, …) VALUES (value1, value2, value3, …); 其中,table_name…

    database 2023年5月19日
    00
  • 这几个SQL语法的坑,你踩过吗

    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址 大家好,我是大彬~ 今天给大家分享几个SQL常见的“坏毛病”及优化技巧。 SQL语句的执行顺…

    2023年4月8日
    00
  • redis通用缓存设计(1)

    1.缓存中的key如何设计? 为了达到唯一标识的目的,key=类名+方法名+参数 即:    目标类全名+方法名(全限定名)+参数     ————>然后用MD5转换一下 //生成key public static String getKey(ProceedingJoinPoint pjp){ StringBuilder stringB…

    Redis 2023年4月11日
    00
  • 【python 3.6】python读取json数据存入MySQL(一)

        整体思路: 1,读取json文件 2,将数据格式化为dict,取出key,创建数据库表头 3,取出dict的value,组装成sql语句,循环执行 4,执行SQL语句   #python 3.6 # -*- coding:utf-8 -*- __author__ = ‘BH8ANK’ import json import pymysql conn =…

    MySQL 2023年4月13日
    00
  • HTML5 Web Database 数据库的SQL语句的使用方法

    下面是详细讲解“HTML5 Web Database 数据库的SQL语句的使用方法”的完整攻略: 1. HTML5 Web Database简介 HTML5 Web Database是浏览器本地存储数据的一种方式,它能够在浏览器中创建一个SQL数据库,数据以表格的形式存储,并支持SQL语句进行增、删、改、查等操作。HTML5 Web Database使用方便…

    database 2023年5月21日
    00
  • CentOS7.4下MySQL5.7.28二进制方式安装的方法步骤

    接下来我将为你详细讲解“CentOS7.4下MySQL5.7.28二进制方式安装的方法步骤”的完整攻略。 环境准备 在开始安装MySQL之前,我们需要先进行环境准备。具体步骤如下: 确保CentOS7.4已经安装,并且处于最新状态。可以使用以下命令进行操作: sudo yum update -y 安装必要的依赖。在CentOS7.4上,可以使用以下命令安装:…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部