C++连接数据库SqlServer、MySql、Oracle、Access、SQLite、PostgreSQL、MongoDB、Redis

 更新时间:2024年08月10日 16:19:33   投稿:yin  
C++是一种通用的编程语言,可以使用不同的库和驱动程序来连接各种数据库,以下是一些示例代码,演示如何使用 C++ 连接 SQL Server、MySQL、Oracle、ACCESS、SQLite 、 PostgreSQL、MongoDB、Redis数据库

C++是一种通用的编程语言,可以使用不同的库和驱动程序来连接各种数据库。以下是一些示例代码,演示如何使用 C++ 连接 SQL Server、MySQL、Oracle、ACCESS、SQLite 、 PostgreSQL、MongoDB、Redis数据库。

连接 SQL Server 数据库

要使用 C++ 连接 SQL Server 数据库,可以使用 Microsoft 的 ADODB 库。以下是一个示例代码:

#include <iostream>
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile")

int main() {
    CoInitialize(NULL); // 初始化 COM 库
    _ConnectionPtr pConnection("ADODB.Connection"); // 创建 Connection 对象
    _bstr_t strConnect = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=MyDatabase;User ID=sa;Password=123456"; // 连接字符串
    pConnection->Open(strConnect, NULL, NULL, NULL); // 连接数据库

    if (pConnection->State) {
        _CommandPtr pCommand("ADODB.Command"); // 创建 Command 对象
        _bstr_t strSQL = "SELECT * FROM MyTable"; // SQL 查询语句
        pCommand->ActiveConnection = pConnection; // 设置连接对象
        pCommand->CommandText = strSQL; // 设置 SQL 语句
        _RecordsetPtr pRecordset("ADODB.Recordset"); // 创建 Recordset 对象
        pRecordset->Open(pCommand.GetInterfacePtr(), _variant_t((IDispatch *) pConnection, true), adOpenUnspecified, adLockUnspecified, -1); // 执行查询并返回结果集

        while (!pRecordset->EndOfFile) { // 遍历结果集
            // 处理数据
        }
    }

    pConnection->Close(); // 关闭连接
    CoUninitialize(); // 关闭 COM 库
    return 0;
}

连接 MySQL 数据库

要使用 C++ 连接 MySQL 数据库,可以使用 MySQL Connector/C++ 库。以下是一个示例代码:

#include <mysql_driver.h>
#include <mysql_connection.h>
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>

int main() {
    sql::mysql::MySQL_Driver *driver;
    sql::Connection *con;
    sql::Statement *stmt;
    sql::ResultSet *res;

    driver = sql::mysql::get_mysql_driver_instance(); // 获取 MySQL 驱动程序实例
    con = driver->connect("tcp://localhost:3306", "user", "password"); // 连接数据库
    stmt = con->createStatement(); // 创建 Statement 对象
    res = stmt->executeQuery("SELECT * FROM MyTable"); // 执行查询并返回结果集

    while (res->next()) { // 遍历结果集
        // 处理数据
    }

    delete res; // 删除结果集对象
    delete stmt; // 删除 Statement 对象
    delete con; // 删除连接对象
    return 0;
}

连接 Oracle 数据库

要使用 C++ 连接 Oracle 数据库,可以使用 Oracle 提供的 ODBC 驱动程序。以下是一个示例代码:

#include <iostream>
#include <windows.h>
#include <occi.h>

using namespace oracle::occi;

int main() {
    Environment *env = Environment::createEnvironment(); // 创建 OCCI 环境
    Connection *conn = env->createConnection("DRIVER={Oracle ODBC Driver};SERVER=localhost;DATABASE=MyDatabase;UID=user;PWD=password"); // 连接数据库

    if (conn->isValid()) {
        Statement *stmt = conn->createStatement("SELECT * FROM MyTable"); // 创建 Statement 对象
        ResultSet *res = stmt->executeQuery(); // 执行查询并返回结果集

        while (res->next()) { // 遍历结果集
            // 处理数据
        }
    }

    conn->close(); // 关闭连接
    env->terminate(); // 关闭 OCCI 环境
    return 0;
}

连接 Access 数据库

要使用 C++ 连接 Access 数据库,可以使用 Microsoft 的 ADODB 库。以下是一个示例代码:

#include <iostream>
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile")

int main() {
    CoInitialize(NULL); // 初始化 COM 库
    _ConnectionPtr pConnection("ADODB.Connection"); // 创建 Connection 对象
    _bstr_t strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\MyDatabase.mdb;Persist Security Info=False"; // 连接字符串
    pConnection->Open(strConnect, "", "", adConnectUnspecified); // 连接数据库

    if (pConnection->State) {
        _CommandPtr pCommand("ADODB.Command"); // 创建 Command 对象
        _bstr_t strSQL = "SELECT * FROM MyTable"; // SQL 查询语句
        pCommand->ActiveConnection = pConnection; // 设置连接对象
        pCommand->CommandText = strSQL; // 设置 SQL 语句
        _RecordsetPtr pRecordset("ADODB.Recordset"); // 创建 Recordset 对象
        pRecordset->Open(pCommand.GetInterfacePtr(), _variant_t((IDispatch *) pConnection, true), adOpenUnspecified, adLockUnspecified, -1); // 执行查询并返回结果集

        while (!pRecordset->EndOfFile) { // 遍历结果集
            // 处理数据
        }
    }

    pConnection->Close(); // 关闭连接
    CoUninitialize(); // 关闭 COM 库
    return 0;
}

连接 SQLite 数据库

要使用 C++ 连接 SQLite 数据库,可以使用SQLite C++库。以下是一个示例代码:

#include <iostream>
#include <sqlite3.h>
#include <cassert>

int main() {
    sqlite3* db;
    int rc;
    std::string sql;

    // 打开数据库
    rc = sqlite3_open("MyDatabase.db", &db);
    assert(rc == SQLITE_OK);

    // 创建表格
    sql = "CREATE TABLE IF NOT EXISTS MyTable(id INTEGER PRIMARY KEY, name TEXT);";
    rc = sqlite3_exec(db, sql.c_str(), NULL, NULL, NULL);
    assert(rc == SQLITE_OK);

    // 插入数据
    sql = "INSERT INTO MyTable(name) VALUES('hello');";
    rc = sqlite3_exec(db, sql.c_str(), NULL, NULL, NULL);
    assert(rc == SQLITE_OK);

    // 查询数据
    sql = "SELECT * FROM MyTable;";
    rc = sqlite3_exec(db, sql.c_str(), callback, 0, 0);
    assert(rc == SQLITE_OK);

    // 关闭数据库
    sqlite3_close(db);
    return 0;
}

连接 PostgreSQL 数据库

要使用 C++ 连接 PostgreSQL 数据库,可以使用 PostgreSQL C++ 驱动程序。以下是一个示例代码:

#include <iostream>
#include <postgresql/libpq-fe.h>
#include <cassert>

void callback(void* arg, int argc, char** argv, char** cols) {
    for (int i = 0; i < argc; i++) {
        std::cout << cols[i] << ": " << argv[i] << std::endl;
    }
}

int main() {
    PGconn* conn = PQconnectdb("host=localhost dbname=MyDatabase user=user password=password");
    assert(PQstatus(conn) == CONNECTION_OK);

    // 执行查询
    PGresult* res = PQexec(conn, "SELECT * FROM MyTable");
    assert(PQresultStatus(res) == PGRES_TUPLES_OK);

    // 遍历结果集
    for (int i = 0; i < PQntuples(res); i++) {
        callback(NULL, PQnfields(res), PQgetvalue(res, i), PQgetisnull(res, i));
    }

    // 关闭连接
    PQfinish(conn);
    return 0;
}

连接MongoDB数据库

#include <iostream>
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>
#include <bsoncxx/json.hpp>
#include <bsoncxx/types.hpp>

int main() {
    mongocxx::instance instance{};
    mongocxx::client conn{mongocxx::uri{"mongodb://localhost:27017"}};

    // 连接到数据库
    mongocxx::database db = conn["MyDatabase"];

    // 创建文档
    bsoncxx::builder::stream::document doc{};
    doc << "name" << "John Doe"
        << "age" << 30
        << "email" << "johndoe@example.com";

    // 插入文档到集合
    db["MyCollection"].insert(doc.view());

    // 查询文档
    mongocxx::cursor cursor = db["MyCollection"].find({});
    while (cursor) {
        bsoncxx::document::view doc = cursor->view();
        std::cout << doc["name"].get_string() << std::endl;
        std::cout << doc["age"].get_int32() << std::endl;
        std::cout << doc["email"].get_string() << std::endl;
        cursor++;
    }

    return 0;
}

这个示例使用了MongoDB C++驱动程序来连接到MongoDB数据库,创建文档并将其插入到集合中,然后查询并打印文档的内容。

连接Redis数据库

#include "stdafx.h"
#include <Windows.h>
#include <hiredis.h>

#pragma comment(lib, "Win32_Interop.lib")
#pragma comment(lib, "hiredis.lib")

int main()
{
    //redis默认监听端口为6387 可以再配置文件中修改 
    redisContext* pRedisContext = redisConnect("127.0.0.1", 6379);
    if (NULL == pRedisContext || pRedisContext->err)
    {
        printf("%s \r\n", pRedisContext->errstr);
        printf("Connect to redis server failed \n");
        return -1;
    }

    //输入Redis密码
    const char *pszRedisPwd = "123456";
    redisReply *pRedisReply = (redisReply*)redisCommand(pRedisContext, "AUTH %s", pszRedisPwd);
    if (NULL != pRedisReply)
    {
        freeReplyObject(pRedisReply);
    }
    //用get命令获取数据
    char szRedisBuff[256] = { 0 };
    sprintf_s(szRedisBuff, "GET %s", "name");
    pRedisReply = (redisReply*)redisCommand(pRedisContext, szRedisBuff);
    if (NULL == pRedisReply)
    {
        printf("Get data Error!");
        return -1;
    }

    if (NULL == pRedisReply->str)
    {
        freeReplyObject(pRedisReply);
        return -1;
    }

    string strRes(pRedisReply->str);
    freeReplyObject(pRedisReply);

    //向Redis写入数据
    pRedisReply = (redisReply *)redisCommand(pRedisContext, "SET keyName huantest");
    if (NULL != pRedisReply)
    {
        freeReplyObject(pRedisReply);
    }

    return 0;
}

总结

到此这篇关于C++连接数据库SqlServer、MySql、Oracle、Access、SQLite、PostgreSQL、MongoDB、Redis的文章就介绍到这了,更多相关C++连接8种数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用C语言来画出皮卡丘的教程(附代码)

    使用C语言来画出皮卡丘的教程(附代码)

    在C语言中使用图形库画图需要引入graphics.h库,我们可以通过代码实现画出一个可爱的皮卡丘,将皮卡丘的绘制分为以下部分:耳朵、脸部、眼睛、嘴巴、手臂、腿部、尾巴,下面我们就来学习如何使用C语言编写画皮卡丘的代码
    2024-01-01
  • C++ ASIO实现异步套接字管理详解

    C++ ASIO实现异步套接字管理详解

    Boost ASIO(Asynchronous I/O)是一个用于异步I/O操作的C++库,该框架提供了一种方便的方式来处理网络通信、多线程编程和异步操作,本文介绍了如何通过ASIO框架实现一个简单的异步网络套接字应用程序,需要的可以参考下
    2023-08-08
  • C++ 数据类型强制转化的实现

    C++ 数据类型强制转化的实现

    这篇文章主要介绍了C++ 数据类型强制转化的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • C++派生访问说明符小记(推荐)

    C++派生访问说明符小记(推荐)

    下面小编就为大家带来一篇C++派生访问说明符小记(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • C语言详细分析讲解关键字enum与sizeof及typedef的用法

    C语言详细分析讲解关键字enum与sizeof及typedef的用法

    在 C 语言中经常会见到 enum、sizeof、typedef,那么我们今天就来讲解下它们三个,enum是C语言中的一种自定义类型,它是一种枚举类型,sizeof是编译器的内置指示符,用于计算类型或变量所占内存打小,typedef用于给一个已经存在的数据类型重命名,本质上不能产生新的类型
    2022-04-04
  • C++实现LeetCode(85.最大矩形)

    C++实现LeetCode(85.最大矩形)

    这篇文章主要介绍了C++实现LeetCode(85.最大矩形),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • c++中ref的作用示例解析

    c++中ref的作用示例解析

    这篇文章主要为大家介绍了c++中ref的作用示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • C语言如何利用ASCII码表统计字符串每个字符出现的次数

    C语言如何利用ASCII码表统计字符串每个字符出现的次数

    这篇文章主要介绍了C语言如何利用ASCII码表统计字符串每个字符出现的次数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • C++使用easyx画实时走动的钟表

    C++使用easyx画实时走动的钟表

    这篇文章主要为大家详细介绍了C++使用easyx画实时走动的钟表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C++中的类扩展之继承和组合详解

    C++中的类扩展之继承和组合详解

    在C++中,类扩展可以通过继承、组合和装饰模式实现。继承可以实现对已有类的修改和扩展,组合可以增加新的功能,装饰模式则能够在不改变原类的情况下为其添加新的功能。这些技术在C++程序设计中应用广泛,提高了程序的可扩展性和可维护性
    2023-04-04

最新评论