database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 1718 게시물 읽기
No. 1718
답변입니다.
작성자
Diode
작성일
2000-05-20 14:32
조회수
5,468

sprintf 란 함수를 사용하시면 됩니다.

 

이것은 출력을 인자로 받은 버퍼에 담아 주는 것이죠.

 

보통 제가 mysql에 억세스 할때 query 로 사용할 스트링은 버퍼로 만듭니다.

 

예를 들어 이런 식으로 하죠.

 

char szQuery[ 적당히 큰 크기.. 보통 1024bytes 정도 ];

 

그 다음에 말씀하신 경우라면 이렇게 합니다.

 

즉, pig 라는 아이디가 글어간 것을 얻고 싶다면

 

sprintf(szQuery, "SELECT * FROM exam where id='%s'", "pig");

 

그러면 szQuery 안에는 결과적으로 "SELECT * FROM exam where id='pig'"

 

라고 들어가게 되죠. 혹시 참고가 될까 해서 제가 만들어서 사용하는

 

MySQL 클래스를 드립니다. (MySQL 용 C++ API 는 템플릿들 때문에 컴파일

 

속도가 장난이 아니죠.. 쓰기는 편하지만. 그래서 저는 그냥 C API 로 자체

 

클래스를 만들어 사용하고 있습니다.)

 

 

다음은 csql.h 부분입니다.

 

#include "mysql.h"

 

//

// csql.h

//

// MySQL query class using MySQL C API

//

// Written by Diode

//

 

#define ERROR_NOERROR 0

#define ERROR_NOSUCHUSER -1

#define ERROR_MYSQLCONNECT -2

#define ERROR_MYSQLDBSELECT -3

#define ERROR_MYSQLQUERY -4

#define ERROR_MYSQLSTORE -5

#define ERROR_MYSQLEOF -6

 

class CSQL

{

public:

CSQL() { res = NULL; };

~CSQL()

{

if(res) mysql_free_result(res);

mysql_close(&mysql);

};

 

int Connect(char szHost[], char szUser[], char szPassword[], char szDB[]);

int Query(char szQuery[]);

int Store(void);

int Count(void)

{

if(res == NULL) return 0;

 

return res->row_count;

}

 

MYSQL_ROW Fetch(void);

 

private:

MYSQL mysql;

MYSQL_RES *res;

MYSQL_ROW row;

};

 

 

다음은 csql.cpp 입니다.

 

#include "mysql.h"

 

//

// csql.cpp

//

// MySQL query class using MySQL C API

//

// Written by Diode

//

 

int CSQL :: Connect(char szHost[], char szUser[], char szPassword[], char szDB[])

{

if(!(mysql_connect(&mysql,szHost, szUser, szPassword)))

{

return ERROR_MYSQLCONNECT;

}

 

if(mysql_select_db(&mysql, szDB))

{

return ERROR_MYSQLDBSELECT;

}

 

return ERROR_NOERROR;

}

 

int CSQL :: Query(char szQuery[])

{

if(mysql_query(&mysql, szQuery))

{

return ERROR_MYSQLQUERY;

}

 

return ERROR_NOERROR;

}

 

int CSQL :: Store(void)

{

if(!(res = mysql_store_result(&mysql)))

{

return ERROR_MYSQLSTORE;

}

 

return ERROR_NOERROR;

}

 

MYSQL_ROW CSQL :: Fetch(void)

{

row = mysql_fetch_row(res);

 

if(!mysql_eof(res))

{

return NULL;

}

 

return (row);

}

 

 

사용은 간단합니다. 간단한 예를 보면..

 

char szQuery[SMALL_BUFSIZE];

CSQL db;

MYSQL_ROW row;

 

db.Connect("localhost", "test", "사용아이디", "패스워드");

 

sprintf(szQuery, "SELECT * FROM exam Where id = '%s'", szID);

 

db.Query(szQuery);

db.Store();

 

row = db.Fetch();

 

 

그리고 이 다음엔 row 에서 원하는 값을 얻을 수 있구요.. 물론 null 일 수도 있으니 체크를 잘 하셔야 합니다. 위에서 에러처리는 다 생략이 됬으니 그부분도 신경 쓰셔야 하구요..

 

그럼..

[Top]
No.
제목
작성자
작성일
조회
1721저 이 질문에 답을...
루비치노
2000-05-20
4530
1725┕>Re: 저 이 질문에 답을...
정재익
2000-05-21 19:40:05
5119
1726┕>Re: 저 이 질문에 답을...
정재익
2000-05-21 19:40:40
5000
1716mysql 에러~
윤명욱
2000-05-20
5092
1710# MySQL Error [java.sql.SQLException: General Error: Too many open files]
김윤복
2000-05-19
4908
1711┕>Re: # MySQL Error [java.sql.SQLException: General Error: Too many open files]
fith
2000-05-19 19:59:21
5487
1709# mysql C API에서요....
이경희
2000-05-19
4903
1712┕>Re: # mysql C API에서요....
fith
2000-05-19 20:04:28
5107
1718┕>답변입니다.
Diode
2000-05-20 14:32:23
5468
1708# mysql 에 대하여~~~~~
남궁우영
2000-05-19
4653
1713┕>Re: # mysql 에 대하여~~~~~
fith
2000-05-19 20:06:34
5374
1705레코드 생성시 순서대로 정렬이 안되요?
강용걸
2000-05-19
4868
1707┕>Re: 레코드 생성시 순서대로 정렬이 안되요?
정재익
2000-05-19 16:56:32
5034
1704# nt에서 mysql설치시 에러...
신중호
2000-05-19
5171
1714┕>Re: # nt에서 mysql설치시 에러...
정재익
2000-05-19 21:44:45
5610
1715┕>Re: # nt에서 mysql설치시 에러...
정재익
2000-05-20 03:23:46
5918
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다