[C/C++] MariaDB

Alexandria·2024년 3월 4일
0

C lang

목록 보기
14/14
post-thumbnail

1. 환경

mariadb-connector-cpp를 설치한다.

# tar -xvzf mariadb-connector-cpp-*.tar.gz
# cd mariadb-connector-cpp-*/
mariadb-connector-cpp-1.0.1-ubuntu-focal-amd64# install -d /usr/include/mariadb/conncpp
mariadb-connector-cpp-1.0.1-ubuntu-focal-amd64# install -d /usr/include/mariadb/conncpp/compat
mariadb-connector-cpp-1.0.1-ubuntu-focal-amd64# install include/mariadb/* /usr/include/mariadb/
mariadb-connector-cpp-1.0.1-ubuntu-focal-amd64# install include/mariadb/conncpp/* /usr/include/mariadb/conncpp
mariadb-connector-cpp-1.0.1-ubuntu-focal-amd64# install include/mariadb/conncpp/compat/* /usr/include/mariadb/conncpp/compat
mariadb-connector-cpp-1.0.1-ubuntu-focal-amd64# install -d /lib/x86_64-linux-gnu/mariadb
mariadb-connector-cpp-1.0.1-ubuntu-focal-amd64# install -d /lib/x86_64-linux-gnu/mariadb/plugin
mariadb-connector-cpp-1.0.1-ubuntu-focal-amd64# install lib/mariadb/libmariadbcpp.so /usr/lib
mariadb-connector-cpp-1.0.1-ubuntu-focal-amd64# cp lib64/mariadb/libmariadbcpp.so /lib/x86_64-linux-gnu
mariadb-connector-cpp-1.0.1-ubuntu-focal-amd64# cp lib64/mariadb/libmariadb.so.3 /lib/x86_64-linux-gnu
mariadb-connector-cpp-1.0.1-ubuntu-focal-amd64# cp lib64/mariadb/plugin/* /lib/x86_64-linux-gnu/mariadb/plugin

컴파일 시 libmariadbcpp.so를 링킹하여 컴파일한다.

2. CREATE

{% raw %}#include <mariadb/conncpp.hpp>
#include <iostream>             // std::cerr, std::cout, std::endl

int main(void)
{
    try
    {
        sql::Driver                         *driver = sql::mariadb::get_driver_instance();
        sql::SQLString                      url("jdbc:mariadb://127.0.0.1:3306/test"); // host:port/database
        sql::Properties                     properties({{"user", "root"}, {"password", "root"}});
        std::unique_ptr<sql::Connection>    conn(driver->connect(url, properties));
        std::unique_ptr<sql::Statement>     stmt(conn->createStatement());
        conn->setAutoCommit(true);
        if(stmt.get() != NULL)
        {
            stmt->execute("DROP TABLE IF EXISTS mytable");
            if (!stmt->execute("CREATE TABLE mytable (a varchar(255) primary key, b int(11)) ENGINE=InnoDB")) std::cout << "created table : mytable" << std::endl;
        }
        if(!stmt->isClosed()) stmt->close();
        if(!conn->isClosed()) conn->close();
    }
    catch(sql::SQLException& e)
    {
        std::cerr << "except : " << e.what() << std::endl;
    }
}{% endraw %}

3. DROP

{% raw %}#include <mariadb/conncpp.hpp>
#include <iostream>             // std::cerr, std::endl

int main(void)
{
    try
    {
        sql::Driver                         *driver = sql::mariadb::get_driver_instance();
        sql::SQLString                      url("jdbc:mariadb://127.0.0.1:3306/test"); // host:port/database
        sql::Properties                     properties({{"user", "root"}, {"password", "root"}});
        std::unique_ptr<sql::Connection>    conn(driver->connect(url, properties));
        std::unique_ptr<sql::Statement>     stmt(conn->createStatement());
        conn->setAutoCommit(true);
        if(stmt.get() != NULL)
        {
            stmt->execute("DROP TABLE IF EXISTS mytable");
            if (!stmt->execute("CREATE TABLE mytable (a varchar(255) primary key, b int(11)) ENGINE=InnoDB"))
            {
                std::string                             a_value("test");
                unsigned int                            b_value = 44;
                std::unique_ptr<sql::PreparedStatement> stmt_insert(conn->prepareStatement("INSERT INTO mytable (a, b) VALUES (?, ?)"));
                stmt_insert->setString(1,   a_value);
                stmt_insert->setUInt(2,     b_value);
                stmt_insert->executeQuery();
                if(!stmt_insert->isClosed()) stmt_insert->close();
            }
        }
        stmt->execute("DROP TABLE mytable");
        if(!stmt->isClosed()) stmt->close();
        if(!conn->isClosed()) conn->close();
    }
    catch(sql::SQLException& e)
    {
        std::cerr << "except : " << e.what() << std::endl;
    }
}{% endraw %}

4. INSERT

{% raw %}#include <mariadb/conncpp.hpp>
#include <iostream>             // std::cerr, std::endl

int main(void)
{
    try
    {
        sql::Driver                         *driver = sql::mariadb::get_driver_instance();
        sql::SQLString                      url("jdbc:mariadb://127.0.0.1:3306/test"); // host:port/database
        sql::Properties                     properties({{"user", "root"}, {"password", "root"}});
        std::unique_ptr<sql::Connection>    conn(driver->connect(url, properties));
        std::unique_ptr<sql::Statement>     stmt(conn->createStatement());
        conn->setAutoCommit(true);
        if(stmt.get() != NULL)
        {
            stmt->execute("DROP TABLE IF EXISTS mytable");
            if (!stmt->execute("CREATE TABLE mytable (a varchar(255) primary key, b int(11)) ENGINE=InnoDB"))
            {
                std::string                             a_value("test");
                unsigned int                            b_value = 44;
                std::unique_ptr<sql::PreparedStatement> stmt_insert(conn->prepareStatement("INSERT INTO mytable (a, b) VALUES (?, ?)"));
                stmt_insert->setString(1,   a_value);
                stmt_insert->setUInt(2,     b_value);
                stmt_insert->executeQuery();
                if(!stmt_insert->isClosed()) stmt_insert->close();
            }
        }
        if(!stmt->isClosed()) stmt->close();
        if(!conn->isClosed()) conn->close();
    }
    catch(sql::SQLException& e)
    {
        std::cerr << "except : " << e.what() << std::endl;
    }
}{% endraw %}

5. SELECT

{% raw %}#include <mariadb/conncpp.hpp>
#include <iostream>             // std::cerr, std::cout, std::endl

int main(void)
{
    try
    {
        sql::Driver                         *driver = sql::mariadb::get_driver_instance();
        sql::SQLString                      url("jdbc:mariadb://127.0.0.1:3306/test"); // host:port/database
        sql::Properties                     properties({{"user", "root"}, {"password", "root"}});
        std::unique_ptr<sql::Connection>    conn(driver->connect(url, properties));
        std::unique_ptr<sql::Statement>     stmt(conn->createStatement());
        conn->setAutoCommit(true);
        if(stmt.get() != NULL)
        {
            stmt->execute("DROP TABLE IF EXISTS mytable");
            if (!stmt->execute("CREATE TABLE mytable (a varchar(255) primary key, b int(11)) ENGINE=InnoDB"))
            {
                std::unique_ptr<sql::ResultSet> rset1(stmt->executeQuery("SELECT * FROM mytable"));
                if(!rset1 || rset1->next() == false) std::cerr << "not data" << std::endl;
                if(!rset1->isClosed()) rset1->close();

                std::string                             a_value("test");
                unsigned int                            b_value = 44;
                std::unique_ptr<sql::PreparedStatement> stmt_insert(conn->prepareStatement("INSERT INTO mytable (a, b) VALUES (?, ?)"));
                stmt_insert->setString(1,   a_value);
                stmt_insert->setUInt(2,     b_value);
                stmt_insert->executeQuery();
                if(!stmt_insert->isClosed()) stmt_insert->close();

                std::unique_ptr<sql::ResultSet> rset2(stmt->executeQuery("SELECT * FROM mytable"));
                if(rset2 && rset2->next()) std::cout << rset2->getString(1) << " " << rset2->getUInt(2) << std::endl;
                if(!rset2->isClosed()) rset2->close();
            }
        }
        if(!stmt->isClosed()) stmt->close();
        if(!conn->isClosed()) conn->close();
    }
    catch(sql::SQLException& e)
    {
        std::cerr << "except : " << e.what() << std::endl;
    }
}{% endraw %}

6. UPDATE

{% raw %}#include <mariadb/conncpp.hpp>
#include <iostream>             // std::cerr, std::endl

int main(void)
{
    try
    {
        sql::Driver                         *driver = sql::mariadb::get_driver_instance();
        sql::SQLString                      url("jdbc:mariadb://127.0.0.1:3306/test"); // host:port/database
        sql::Properties                     properties({{"user", "root"}, {"password", "root"}});
        std::unique_ptr<sql::Connection>    conn(driver->connect(url, properties));
        std::unique_ptr<sql::Statement>     stmt(conn->createStatement());
        conn->setAutoCommit(true);
        if(stmt.get() != NULL)
        {
            stmt->execute("DROP TABLE IF EXISTS mytable");
            if (!stmt->execute("CREATE TABLE mytable (a varchar(255) primary key, b int(11)) ENGINE=InnoDB"))
            {
                std::string                             a_value("test");
                unsigned int                            b_value = 44;
                std::unique_ptr<sql::PreparedStatement> stmt_insert(conn->prepareStatement("INSERT INTO mytable (a, b) VALUES (?, ?)"));
                stmt_insert->setString(1,   a_value);
                stmt_insert->setUInt(2,     b_value);
                stmt_insert->executeQuery();
                if(!stmt_insert->isClosed()) stmt_insert->close();


                std::unique_ptr<sql::PreparedStatement> stmt_update(conn->prepareStatement("UPDATE mytable SET b = ? WHERE a = ?"));
                stmt_update->setUInt(1,     2);
                stmt_update->setString(2,   a_value);
                stmt_update->executeQuery();
                if(!stmt_update->isClosed()) stmt_update->close();
            }
        }
        if(!stmt->isClosed()) stmt->close();
        if(!conn->isClosed()) conn->close();
    }
    catch(sql::SQLException& e)
    {
        std::cerr << "except : " << e.what() << std::endl;
    }
}{% endraw %}

7. DELETE

{% raw %}#include <mariadb/conncpp.hpp>
#include <iostream>             // std::cerr, std::endl

int main(void)
{
    try
    {
        sql::Driver                         *driver = sql::mariadb::get_driver_instance();
        sql::SQLString                      url("jdbc:mariadb://127.0.0.1:3306/test"); // host:port/database
        sql::Properties                     properties({{"user", "root"}, {"password", "root"}});
        std::unique_ptr<sql::Connection>    conn(driver->connect(url, properties));
        std::unique_ptr<sql::Statement>     stmt(conn->createStatement());
        conn->setAutoCommit(true);
        if(stmt.get() != NULL)
        {
            stmt->execute("DROP TABLE IF EXISTS mytable");
            if (!stmt->execute("CREATE TABLE mytable (a varchar(255) primary key, b int(11)) ENGINE=InnoDB"))
            {
                std::string                             a_value("test");
                unsigned int                            b_value = 44;
                std::unique_ptr<sql::PreparedStatement> stmt_insert(conn->prepareStatement("INSERT INTO mytable (a, b) VALUES (?, ?)"));
                stmt_insert->setString(1,   a_value);
                stmt_insert->setUInt(2,     b_value);
                stmt_insert->executeQuery();
                if(!stmt_insert->isClosed()) stmt_insert->close();

                stmt->execute("DELETE FROM mytable WHERE a='test'");
            }
        }
        if(!stmt->isClosed()) stmt->close();
        if(!conn->isClosed()) conn->close();
    }
    catch(sql::SQLException& e)
    {
        std::cerr << "except : " << e.what() << std::endl;
    }
}{% endraw %}
profile
IT 도서관

0개의 댓글

관련 채용 정보