mysql connector/c++

C++ 2010. 10. 26. 00:50

 

 
mysql connector/c++ 로 Visual C++과 mysql 연동.
mysql connector/c++ 은 소스에서 boost와 stl 을 사용하므로 환경 세팅시 필수로 설치해야 함.
 
Setting
 
사전 준비 사항
1.mysql 설치시
   "custom Setup > C Include Files / Lib Files" 선택 설치
   mysql 설치된 디렉토리에 include, lib 폴더가 생성됨.
 
2.mysql.com 에서 Connector/C++ 1.1 설치.
   보통 "C:\Program Files\MySQL\MySQL Connector C++ 1.1.0" 에 설치 됨.
 
Visual C++ project 설정
1.Additional Include Directories
   project property의 
   "Configuration Properties > C/C++ > General > Additional Include Directories" 에서 
   "C:\Program Files\MySQL\MySQL Server 5.1\include" 추가
   "C:\Program Files\MySQL\MySQL Connector C++ 1.1.0\include" 추가
 
2.Additional Library Directories
   project property의 
   "Configuration Properties > Linker > General > Additional Library Directories" 에서 
   "C:\Program Files\MySQL\MySQL Server 5.1\lib\opt" 추가
   "C:\Program Files\MySQL\MySQL Connector C++ 1.1.0\lib\opt" 추가
   (debug 모드에는 "C:\Program Files\MySQL\MySQL Connector C++ 1.1.0\lib\debug"로 추가)
  
3.Additional Dependencies
   project property의
   "Configuration Properties > Linker > Input > Additional Dependencies" 에서
   "mysqlcppconn-static.lib libmysql.lib" 추가
 
4.CPPCONN_PUBLIC_FUNC
   project property의
   "Configuration Properties > C/C++ > Preprocessor > Preprocessor Definitions" 에서
   "CPPCONN_PUBLIC_FUNC=" 추가
 
boost libraries 설치
1.boost 설치
   http://www.boostpro.com/download/ 다운 받아 설치
 
2.Visual Studio 설정
   "Tools 메뉴 > Option > Projects and Solutions" 에서 
   "Show directories for > Include files" 에 "C:\Program Files\boost\boost_1_44" 추가
   "Show directories for > Library files" 에 "C:\Program Files\boost\boost_1_44\lib" 추가
  
sqlstring.h 다운로드
다음 주소에서 connector/c++ 버전 확인 후 sqlstring.h 파일 생성하여
"C:\Program Files\MySQL\MySQL Connector C++ 1.1.0\include\cppconn" 에 위치 시킨다.
 
sqlstring.h
다운로드
<첨부파일 : 1.1.0~r814-1 버전>
 
 
**. dynamic linked library 로 할 경우
  project property의
  "Configuration Properties > Linker > Input > Additional Dependencies" 에서
  "mysqlcppconn.lib" 로 변경 후 
  컴파일 된 파일과 같은 디렉토리 mysqlcppconn.lib를 copy 하거나
  환경변수 PATH 에 mysqlcppconn.lib의 디렉토리 추가.  
할게 많네...
 
 
 
간단한 샘플
DB 샘플 정보
DSN 이름 : mysqld
database : test
UID/PWD : root/root
 
drop table TEST;
create table TEST
(
t_str varchar(10),
t_blob blob
);  
insert into TEST values ('hi~`, 'hi man~~~~');
 
Sample Code
#include <iostream>
#include <tchar.h>
#include <windows.h>
 
#include <string>
#include <boost/lexical_cast.hpp>
 
#include "mysql_connection.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>
 
using namespace std;
 
void print(string &msg)
{
printf(msg.c_str());
printf("\n");
}
int main()
{
const string username = "root";
const string password = "root";
const string hostname = "tcp://localhost:3306";
const string schema   = "test";
 
sql::Driver *driver = NULL;
sql::Connection *con = NULL;
sql::Statement *stmt = NULL;
sql::PreparedStatement *pstmt = NULL;
sql::ResultSet *res = NULL;
 
string output = "";
try
{
 
driver = get_driver_instance();
con    = driver->connect(hostname, username, password);
con->setSchema(schema);
 
con->setTransactionIsolation(sql::TRANSACTION_READ_COMMITTED);
con->setAutoCommit(false);
 
 
stmt = con->createStatement();
{ //한글 설정
stmt->execute("set names euckr"); //for 한글
}
 
{ //delete
print(string("[delete] statement"));
stmt->execute("delete from test");
print(string(""));
 
 
print(string("[insert] statement"));
stmt->execute("insert into test values('hi', 'hi man~')");
print(string(""));
}
 
 
{ //statement select
print(string("[select] statement"));
 
res = stmt->executeQuery("select * from test");
output = "";
int j = 1;
while (res->next())
{
output.append(boost::lexical_cast<string>(j++)).append(".");
output.append("\tt_str  : ").append(res->getString("t_str"));
}
print(output);
delete res;
res = NULL;
print(string(""));
}
 
 
{ //insert
print(string("[insert] preparestatement & binding"));
 
pstmt = con->prepareStatement("insert into test (t_str, t_blob) values (?, ?)");
pstmt->setString(1, "테스트1");
 
string str = "테스트1의 blob 입니다.\n쨋든 방가..";
pstmt->setBlob(2, new std::istringstream(str));
 
pstmt->execute();
delete pstmt;
pstmt = NULL;
print(string(""));
}
 
 
{ //select
print(string("[select] preparestatement & binding"));
pstmt = con->prepareStatement("select t_str, t_blob from test where t_str like ?");
pstmt->setString(1, "테스트%");
res = pstmt->executeQuery();
output = "";
int i = 1;
while (res->next())
{
output.append(boost::lexical_cast<string>(i++)).append(".");
output.append("\tt_str  : ").append(res->getString("t_str")).append("\n");
 
istream* is = res->getBlob("t_blob");
string str = "";
while (!is->eof())
{
char buff[512];
is->getline(buff, 512);
str += buff;
str += "\n\t";
}
output.append("\tt_blob : ").append(str).append("\n");
}
print(output);
print(string(""));
}
 
con->commit();
//con->rollback();
}
catch (sql::SQLException &e)
{
string errmsg;
errmsg.append("ErrorCode: [").append(boost::lexical_cast<string>(e.getErrorCode())).append("]\n");
errmsg.append("SQLState : [").append(e.getSQLState()).append("]\n");
errmsg.append("Cause    : [").append(e.what()).append("] ");
print(errmsg);
}
 
if (stmt) delete stmt;
if (res) delete res;
if (pstmt) delete pstmt;
if (con) delete con;
 
return 0;
} 

 
 
 
메뉴얼
MySQL Connector/C++
    (간단한 사용방법, 샘플)
 
Sample
    http://mysql-connector-cplus-pplus-p.sourcearchive.com/ 에서 DOWNLOAD 항목으로 들어가
    파일 다운로드 후 압축해제 하면 example 폴더에 예제 들어있음.
    (좀 더 다양함. 아래 첨부파일은 미리 받아둔 것.)
 

 
 
 
 
 
 

'C++' 카테고리의 다른 글

STL (Standard Template Library)  (0) 2010.11.01
C++ 파일과 콘솔 출력 예제  (0) 2010.11.01
Registry 레지스트리  (0) 2010.10.27
DLL (Dynamic Link Library)  (0) 2010.10.27
ODBC (open database connectivity)  (1) 2010.10.25
현재 위치 __FILE__, __LINE__, __FUNCTION__  (0) 2010.10.23
Database 연동  (0) 2010.10.22
struct padding (구조체 패딩) 문제  (0) 2010.10.21