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" 에 위치 시킨다.
<첨부파일 : 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 |