首页 > 数据库 >实例讲解C++连接各种数据库,包含SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 数据库

实例讲解C++连接各种数据库,包含SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 数据库

时间:2023-11-22 09:00:36浏览次数:52  
标签:SQLite pConnection PostgreSQL 数据库 C++ sql include 连接

 

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

  1. 连接 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;
}
  1. 连接 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;
}
  1. 连接 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;
}
  1. 连接 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;
}
  1. 连接 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;
}
  1. 连接 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;
}

7.连接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数据库,创建文档并将其插入到集合中,然后查询并打印文档的内容。

 

标签:SQLite,pConnection,PostgreSQL,数据库,C++,sql,include,连接
From: https://www.cnblogs.com/hanbing81868164/p/17848051.html

相关文章

  • 监控MySQL数据库
    监控MySQL数据库想通过grafana简单监控一下MySQL数据库的情况.作为笔记处理.创建用户建议给数据库创建一个监控用户:CREATEUSER'mysqlexporter'@'localhost'IDENTIFIEDBY'Testxxxxxxxx'WITHMAX_USER_CONNECTIONS3;GRANTPROCESS,REPLICATIONCLIENT,SELECTON......
  • 七天.NET 8操作SQLite入门到实战 - 第二天 在 Windows 上配置 SQLite环境
    前言SQLite的一个重要的特性是零配置的、无需服务器,这意味着不需要复杂的安装或管理。它跟微软的Access差不多,只是一个.db格式的文件。但是与Access不同的是,它不需要安装任何软件,非常轻巧。七天.NET8操作SQLite入门到实战详细教程第一天SQLite简介EasySQLite项目源码地址......
  • 国科大数据库新技术2023真题
    一、简答题1、面向对象数据库技术的主要难点?2、在数据切分机制中,一致性哈希算法的基本原理是什么?3、大数据的4V特征是什么?4、从系统架构、数据模型、数据的一致性三个方面比较Amazon平台基础存储框架Dynamo和Goole云计算中分布式结构化数据表Bigtable的不同点。5、区块链的结......
  • openGauss学习笔记-129 openGauss 数据库管理-参数设置-查看参数值
    openGauss学习笔记-129openGauss数据库管理-参数设置-查看参数值openGauss安装后,有一套默认的运行参数,为了使openGauss与业务的配合度更高,用户需要根据业务场景和数据量的大小进行GUC参数调整。129.1操作步骤以操作系统用户omm登录数据库主节点。使用如下命令连接数据库......
  • sql 查询数据库的常用脚本
    查询数据库的所有表的记录数 ----查询所有表的记录数量----------------------------------------------------------------------------------selecta.nameas表名,max(b.rows)as记录条数fromsysobjectsa,sysindexesbwherea.id=b.idand......
  • Postgresql(PG)表的操作:
      PG表的支持数据类型:数值数据类型字符串数据类型日期/时间数据类型  #创建库postgres=#createdatabasemydb;CREATEDATABASEpostgres=#\cmydbYouarenowconnectedtodatabase"mydb"asuser"postgres".mydb=#\dDidnotfindanyrelations.#创建表mydb=......
  • mysql数据库死锁
    转载自:https://zhuanlan.zhihu.com/p/506662991?utm_id=0============== 什么是死锁说到死锁,还是先来复习下什么是死锁吧。死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于......
  • 【云贝教育】PostgreSQL PGCA题库解析-1
    psql元命令\du和\dg都可以列出角色或用户,请问这两个命令是否等价?A.等价B.不等价C.不好说D.不确定参考答案:A解析:要确认某个封装命令是否等价,只需要看后台调用的SQL即可。一、开启SQL跟踪功能1.1修改参数,开启sql跟踪修改前#log_statement='none'#none,ddl,......
  • python连接数据库到excel 第二回
    #使用前建议看一下sqllalchemy和create_engine,主要就是数据库拉数据导入excel#下面是代码部分fromsqlalchemyimportcreate_engine,text#利用sqlalchemy顺带用create_engine,text区分大小写importpandasaspd#表host='cs-'user='root'password='6Ep'db='perf......
  • 请求扩展、蓝图、flask-session、数据库连接池、wtforms、flask-script、信号、flask-
    请求扩展#1before_request:请求来了会走,依次从上往下执行,但是如果其中一个返回了响应对象,后续的就不走了,视图函数也不走而来#2after_arequest:请求走了,会从下往上依次执行,它必须返回响应对象假设:写了3个before_request第二个返回了响应对象写了3个af......