簡體   English   中英

用C ++連接數據庫

[英]connecting to database in c++

在php中,我創建了一個配置文件,該文件打開了與數據庫的連接,然后在所有其他文件中使用了該文件,以便也打開了連接。 但是我似乎找不到找到使用c ++做同樣事情的方法。 我可以連接到數據庫,但是不能將其用作類,因為我內部有一個main(),而且在沒有main的情況下我似乎無法使其正常工作。 這是我的代碼:

// Standard C++ includes
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

// Include the Connector/C++ headers
#include "cppconn/driver.h"
#include "cppconn/exception.h"
#include "cppconn/resultset.h"
#include "cppconn/statement.h"

// Link to the Connector/C++ library
#pragma comment(lib, "mysqlcppconn.lib")

// Specify our connection target and credentials
const string server   = "localhost";
const string username = "root";
const string password = "";

int main()
{
    sql::Driver     *driver; // Create a pointer to a MySQL driver object
        sql::Connection *dbConn; // Create a pointer to a database connection object
        sql::Statement  *stmt;   // Create a pointer to a Statement object to hold our SQL commands
        sql::ResultSet  *res;    // Create a pointer to a ResultSet object to hold the results of any queries we run

    // Try to get a driver to use to connect to our DBMS
    try
    {
        driver = get_driver_instance();
    }
    catch (sql::SQLException e)
    {
        cout << "Could not get a database driver. Error message: " << e.what() << endl;
        system("pause");
        exit(1);
    }

    // Try to connect to the DBMS server
    try
    {
        dbConn = driver->connect(server, username, password);
    }
    catch (sql::SQLException e)
    {
        cout << "Could not connect to database. Error message: " << e.what() << endl;
        system("pause");
        exit(1);
    }

    stmt = dbConn->createStatement();

    // Try to query the database
    try
    {
        stmt->execute("USE test");

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

    }
    catch (sql::SQLException e)
    {
        cout << "SQL error. Error message: " << e.what() << endl;
        system("pause");
        exit(1);
    }


    sql::ResultSetMetaData *res_meta = res -> getMetaData();
    int columns = res_meta -> getColumnCount();

    while (res->next())
    {
        for (int i = 1; i <= columns; i++) {
                cout << res->getString(i) << " | " ;
                }
         cout << endl;
    }

    delete res;
    delete stmt;
    delete dbConn;
    return 0;
}

您需要創建一個class (例如, class DBConnector )並在頭文件中聲明函數。 例如,這段代碼可以進入一個函數:

sql::Driver* DBConnector::GetDriverInstance()
{
try
    {
        m_driver = get_driver_instance();
    }
    catch (sql::SQLException e)
    {
        cout << "Could not get a database driver. Error message: " << e.what() << endl;
        system("pause");
        exit(1);
    }
    return m_driver;
}

此處sql::Driver *m_driver預期被聲明為頭文件中class的成員變量。 在實際進行代碼之前,您可能需要閱讀有關類,成員函數和變量的更多信息。 除此之外,您需要非常注意內存管理。 我建議您閱讀更多內容,並使用諸如std::shared_ptr類的智能指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM