Samchon Framework for CPP  1.0.0
samchon::library::SQLi Class Reference

A SQL interface; DBMS connector. More...

#include <SQLi.hpp>

Collaboration diagram for samchon::library::SQLi:

Public Member Functions

 SQLi (const std::string &driver, int port)
 Construct from driver name and port. More...
 
virtual void connect (const std::string &ip, const std::string &db, const std::string &id, const std::string &pwd)
 Connect to the DBMS
. More...
 
virtual void disconnect ()
 Disconnect from DBMS. More...
 
virtual auto createStatement () -> std::shared_ptr< SQLStatement >
 Factory method for creating SQLStatement. More...
 

Protected Attributes

std::string driver
 Driver; name of DBMS used for connection. More...
 
int port
 Port number of DBMS. More...
 

Private Attributes

void * hdbc
 Handler of DB-connector. More...
 
SQLStatementstmt
 SQLStatement's pointer linked with the SQLi. More...
 
std::mutex stmtMutex
 Mutex ensuring concurrency with SQLStatement. More...
 

Detailed Description

A SQL interface; DBMS connector.

SQLi is an abstract class managing connection (session) with a specific database and manages SQL statements are executed and results are returned within the context of a connection.

The reason why SQLStatement(s) are managed by SQLi is because of a principle of DBMS, DBMS system doesn't allow simultaneous query from a session (connection). Only a query (process0) is allowed at a time. If you try to simultaneous query from a SQLi, ODBC throws error. To avoid the error, an execute of query from SQLStatement will lock a mutex of SQLi to ensure exclusiveness.

library_sql.png
Note

To ensure the exclusiveness, you've to make SQLStatement from SQLi. Do not make SQLStatement by yourself. call SQLi::createSQLStatement() instead. Even you make a derived class from SQLStatement, don't make its constructor to have public accessor.

Becuase execution of a sql statement causes lock on mutex in SQLi, you've to destruct the SQLStatement or call SQLStatement::free() method(). If you don't, the mutex will not be unlocked, thus you can't do anything by the SQLi.

See also
samchon::library
Author
Jeongho Nam http://samchon.org

Definition at line 42 of file SQLi.hpp.

Constructor & Destructor Documentation

SQLi::SQLi ( const std::string &  driver,
int  port 
)

Construct from driver name and port.

Parameters
driverDriver name of DBMS
portPort number of DBMS

Definition at line 23 of file SQLi.cpp.

Member Function Documentation

void SQLi::connect ( const std::string &  ip,
const std::string &  db,
const std::string &  id,
const std::string &  pwd 
)
virtual

Connect to the DBMS
.

Parameters
ipAn IP address of the DBMS
dbA name of database to access
idYour own ID authorified from DBMS
pwdA password for the ID
Exceptions
exceptionError message from DBMS

Definition at line 40 of file SQLi.cpp.

void SQLi::disconnect ( )
virtual

Disconnect from DBMS.

Definition at line 71 of file SQLi.cpp.

auto SQLi::createStatement ( ) -> std::shared_ptr<SQLStatement>
virtual

Factory method for creating SQLStatement.

Recommend to create SQLStatement by this method. Direct creation is not recommended as the reason of domain problem of each DBMS

Returns
A SQLStatement matched for the domain SQLi

Reimplemented in samchon::library::TSQLi.

Definition at line 35 of file SQLi.cpp.

Member Data Documentation

std::string samchon::library::SQLi::driver
protected

Driver; name of DBMS used for connection.

  • MySQL: "{MySQL Server}"
  • MS-SQL: "{SQL Server}"
  • PL-SQL: "{Oracle}"

Definition at line 55 of file SQLi.hpp.

int samchon::library::SQLi::port
protected

Port number of DBMS.

  • MySQL: 3306
  • MS-SQL: 1433
  • PL-SQL: 1521

Definition at line 65 of file SQLi.hpp.

void* samchon::library::SQLi::hdbc
private

Handler of DB-connector.

Definition at line 76 of file SQLi.hpp.

Referenced by samchon::library::SQLStatement::SQLStatement().

SQLStatement* samchon::library::SQLi::stmt
private

SQLStatement's pointer linked with the SQLi.

Definition at line 81 of file SQLi.hpp.

Referenced by samchon::library::SQLStatement::free(), and samchon::library::SQLStatement::refresh().

std::mutex samchon::library::SQLi::stmtMutex
private

Mutex ensuring concurrency with SQLStatement.

Definition at line 86 of file SQLi.hpp.

Referenced by samchon::library::SQLStatement::free(), and samchon::library::SQLStatement::refresh().


The documentation for this class was generated from the following files: