#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;
}
http://yamoe.tistory.com/159
여기에 있는 소스를 참조해서 했습니다.
거의 MySQL 레퍼런스 메뉴얼의 Complete Example이랑 비슷해서 따라하고 했는데 ....
MySQL 5.5 에는 lib 디렉토리 아래에 opt도 없고 뭔가 맞질 않아서
5.1의 라이브러리도 써보구
가능한 모든 설정이면 설정 다 해주고 했는데도
error LNK2019: "__declspec(dllimport) public: class std::basic_string,class std::allocator > const & __thiscall sql::SQLException::getSQLState(void)const " (__imp_?getSQLState@SQLException@sql@@QBEABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) 외부 기호(참조 위치: __catch$_main$0 함수)에서 확인하지 못했습니다.
error LNK2019: "__declspec(dllimport) public: int __thiscall sql::SQLException::getErrorCode(void)const " (__imp_?getErrorCode@SQLException@sql@@QBEHXZ) 외부 기호(참조 위치: __catch$_main$0 함수)에서 확인하지 못했습니다.
error LNK2019: "__declspec(dllimport) public: __thiscall sql::SQLString::operator class std::basic_string,class std::allocator > const &(void)const " (__imp_??BSQLString@sql@@QBEABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
error LNK2019: "__declspec(dllimport) public: __thiscall sql::SQLString::SQLString(char const * const)" (__imp_??0SQLString@sql@@QAE@QBD@Z) 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
error LNK2019: "__declspec(dllimport) public: __thiscall sql::SQLString::~SQLString(void)" (__imp_??1SQLString@sql@@QAE@XZ) 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
error LNK2019: "__declspec(dllimport) public: __thiscall sql::SQLString::SQLString(class std::basic_string,class std::allocator > const &)" (__imp_??0SQLString@sql@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
error LNK2019: __imp__get_driver_instance 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다. D:\C++ Project\YongInProject\Debug\YongInProject.exe : fatal error LNK1120: 7개의 확인할 수 없는 외부 참조입니다.
이거와 lnk2001 에러가 나네요....
dll 파일 실행 디렉토리와 system32에 놓으란 말도 있어서 거기다가도 놓았구여
라이브러리도 전처리기에 바로 해주기도 하고 프로젝트 속성에서 링크-> 입력에다가도 놓고
다 해봤는데도 뭐가 문제인지 잘 모르겠네요..
저번엔 오라클도 연동해보려고 하다가 또 저런 에러나서 MySQL로 변경해서 해보려고 하는데 또 오류나고......
참고로 저는 64비트 VS 2008 사용하고 있습니다.
MySQL은 5.5 버전이구여 MySQL connector C++ 1.1.0 , boost 깔려있습니다.
|