0. ½ÃÀÛÇÏ´Â ¸».
Á¡Á¡ ³¯¾¾°¡ ½Ò½ÒÇØ Áö´Â °ÍÀÌ ´À²¸Áø´Ù. ³ª¹«
°¡Áö¿¡´Â ¹«¼ºÇÏ´ø ³ª¹µÀÙÀÌ ¶³¾îÁ®¼ ¼¼È÷ °Ü¿ïÀ» ÁغñÇÏ´Â ¸ð½ÀµéÀÌ
º¸ÀÌ´Â °Í °°´Ù. ¿©·¯ºÐµéµµ °Ü¿ï Áغñ°¡ µÇ¾î °¡´ÂÁö ¸ð¸£°Ú´Ù.
Áö³ ½Ã°£¿¡´Â °£´ÜÇÏ°Ô RDBMS¿Í E-R Diagram¿¡
´ëÇÑ ³»¿ëµéÀ» ¿¹¸¦ µé¾î¼ Å×À̺í°ú °°Àº °ÍµéÀ» ¸¸µé¾î º¸¾Ò°í,
mSQL¿¡¼ Áö¿øµÇ°í ÀÖ´Â SQL ¹®°ú µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛ À¯Æ¿¸®Æ¼µéÀ»
¾Ë¾Æ º¸¾Ò´Ù. ¾Æ¸¶µµ Áö³¹ø ½Ã°£ÀÇ ¿¹µéÀÌ ÇöÁ¦ »õ·Î¿î µ¥ÀÌÅÍ
º£À̽º¸¦ ÀÛ¼ºÇϴµ¥ ¸¹Àº µµ¿òÀÌ µÇ¸®¶ó°í »ý°¢µÈ´Ù.
À̹ø ½Ã°£¿¡´Â ¿ì¸®µéÀÌ °¡Àå ¹Ù¶ó°í ½Ç¹«ÀûÀÎ
°ÍµéÀ» ´Ù·ç¾î º¸±â·Î ÇÑ´Ù. API(Application Programming Interface)´Â
´ëºÎºÐÀÇ °è¹ß ÅøÀ̳ª ¾ð¾î¿¡¼ Áö¿øÇÏ´Â ÇϳªÀÇ °è¹ßÀÚ¸¦ À§ÇÑ
¶óÀ̺귯¸®·Î, ´ëºÎºÐÀÇ °è¹ßÀÚµéÀº API¸¦ »ç¿ëÇÏ¿© ÇÁ·Î±×·¥À»
¸¸µé¾î ³»°í ÀÖ´Ù. ±×¹Û¿¡ mSQL¿¡¼´Â Minerva ´ëÇп¡¼ °è¹ßÇÑ
ESLÀ̶ó´Â C¾ð¾î¿Í ºñ½ÁÇÑ ½ºÅ©¸³Æ® ¾ð¾î¸¦ °¡Áö°í, À¥°ú ¿¬µ¿À»
½±°Ô ÇÒ ¼ö ÀÖµµ·Ï Áö¿øÇÏ°í ÀÖ´Ù. W3-mSQLÀº ¾ÆÁÖ Æí¸®ÇÑ WWW Interface
ÆÐÅ°Áö·Î Ãʱ⿡´Â µû·Î À¥ »çÀÌÆ®¸¦ ã¾Æ¼ ¹Þ¾Æ »ç¿ëÇØ¾ß ÇßÁö¸¸,
2.0.0¹öÀüºÎÅÍ´Â ÇÔ²² °è¹ßÀÌ µÇ°í ÀÖ´Â »óȲÀ¸·Î º¸´Ù ½¬¿î À¥
ÀÎÅÍÆäÀ̽º Á¢±ÙÀ» ÇÒ ¼ö ÀÖ´Ù.
¿ì¸®ÀÇ ÃÖ´ëÀÇ °Àû(?)ÀÎ Windows °è¿¿¡¼ÀÇ
À¥ ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ ºñ±³¸¦ ÇÏÁö ¾ÊÀ» ¼ö ¾øÀ» °ÍÀÌ´Ù. ¿©·¯ºÐµéÀÌ
ÁÖ¸ñÇØ¾ß ÇÒ Á¡Àº Windows NT¿Í IIS ¼¹ö¿¡¼ Áö¿øÇÏ°í ÀÖ´Â ISAPI,
VBScript¿Í °°ÀÌ ¾ÆÁÖ ½¬¿î ¹æ¹ýµéÀ» ¿©·¯ºÐµéÀº ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù.
±×·¯³ª ±×°Í º¸´Ùµµ ´õ ½±°í À¯Áö º¸¼ö°¡ ½±´Ù´Â Á¡ÀÌ´Ù. °ÅÀÇ Perl
½ºÅ©¸³Æ®¿Í °°Àº ¹®ÀåÀ» »ç¿ëÇϱ⸸ Çصµ À¥ÆäÀÌÁö¸¦ ½±°Ô Á¢±ÙÇÒ
¼ö ÀÕ´Ù. ÀÌÁ¦ ¿©·¯ºÐµéµµ ±¸¹Ì°¡ ´ç±æ ¶§µµ µÈ µí ½Í´Ù.
1. mSQL API
¿©·¯ºÐµéÀº ¸î °¡ÁöÀÇ ±âº»ÀûÀÎ API¸¦ Á¢ÇÏ°Ô
µÉ °ÍÀÌ´Ù. mSQL API´Â Ãʱ⿡ ¸Å¿ì ±âÃÊÀûÀÎ °ÍÀ¸·Î ½ÃÀÛÀ» ÇÏ°í
ÀÖÀ¸³ª, ÃÖ±Ù 2.0.0¹öÀü¿¡¼´Â ¸Å¿ì °·ÂÇÏ°Ô Áö¿øÀÌ µÇ°í ÀÖ´Â
°ÍÀ» ½±°Ô ¾Ë ¼ö ÀÖ´Ù. °¡Àå Áß¿äÇÑ ¼¹ö Á¦¾î¿¡ °üÇÑ API°¡ Ãß°¡
µÈ °ÍÀÌ´Ù. ÇÏÁö¸¸, ÀÌ·¯ÇÑ °Í º¸´Ùµµ ´õ Áß¿äÇÑ °ÍÀÌ ¹Ù·Î ±âº»ÀûÀÎ
µ¥ÀÌÅͺ£À̽º¿Í Á¢¼ÓÇÏ´Â °ÍÀÌ´Ù. µ¥ÀÌÅÍ º£À̽º¿ÍÀÇ Á¢¼Ó ±×¸®°í
»óÈ£ Åë½Å¿¡ °üÇÑ °£´ÜÇÑ APIºÎÅÍ ½ÃÀÛÇØ º¸µµ·Ï ÇÏÀÚ.
mSQL µ¥ÀÌÅͺ£À̽º ¹èÆ÷ÆÇ¿¡´Â µ¥ÀÌÅͺ£À̽º¿ÍÀÇ
Åë½ÅÀ» À§ÇÑ API ¶óÀ̺귯¸®¶ó´Â °ÍÀ» ÇÔ²² ¹èÆ÷ÇÑ´Ù. ¿©·¯ºÐµéÀÌ
mSQLµ¥ÀÌÅͺ£À̽º¸¦ ¼³Ä¡Çß´Ù¸é, Hughes µð·ºÅ丮¿¡ lib¿Í Include
µð·ºÅ丮°¡ Á¸ÀçÇÒ °ÍÀÌ´Ù. ´ÙÀ½°ú °°Àº ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö¸¦ È®ÀÎÇØ
º¸ÀÚ. Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é, ´Ù½Ã mSQLÀ» ¼³Ä¡ÇØ¾ß ÇÑ´Ù. ÇÊÀÚ´Â mSQL¶óÀ̺귯¸®¿Í
Çì´õ ÆÄÀÏÀ» /usr/local/lib, /usr/local/include µîÀÇ µð·ºÅ丮¿¡
ÇÏÀÌÆÛ ¸µÅ©¸¦ ½ÃÄѼ »ç¿ëÇÏ°í ÀÖ´Ù.
<±×¸²1> ¶óÀ̺귯¸® ÆÄÀÏ.
<±×¸²2> Mini SQLµ¥ÀÌÅͺ£À̽º °ü·Ã
Çì´õ ÆÄÀϵé.
À§¿Í °°ÀÌ ¸ðµç ÆÄÀϵéÀÌ Àß ÀÖ´Ù¸é, ½ÃÀÛÇصµ
ÁÁ´Ù. ´ÙÀ½Àº ¿ì¸®°¡ ¾Ë¾Æ¾ß ÇÒ ÇÔ¼öµéÀ» Hughes¿¡¼ Á¤ÀÇ ÇسõÀº
°ÍµéÀÌ´Ù. ¿©·¯ºÐµéÀº À̵é Áß¿¡¼ ÀϺθ¸ ¸ÀÀ» º¸°Ô µÉ °Í °°´Ù.
/* ** msql.h -
** ** ** Copyright (c) 1993-95 David
J. Hughes ** Copyright (c) 1995 Hughes Technologies
Pty Ltd ** ** Permission to use, copy, and distribute
for non-commercial purposes, ** is hereby granted without
fee, providing that the above copyright ** notice appear
in all copies and that both the copyright notice and this
** permission notice appear in supporting documentation.
** ** This software is provided "as is" without
any expressed or implied warranty. ** ** ID = "$Id:"
** */
// ´ÙÀ½
ºÎºÐÀº »õ·Î Ãß°¡µÈ ºÎºÐÀ¸·Î ÅÒÆÄÀÏÀÌ Àß ¾ÈµÉ
°æ¿ì¿¡ ÇØÁÖ¸é µÈ´Ù. #include <time.h>
// »ðÀÔ ³¡.. |
#ifndef MSQL_H #define MSQL_H
#if defined(__STDC__) || defined(__cplusplus)
# define __ANSI_PROTO(x) x
#else # define __ANSI_PROTO(x) ()
#endif
#ifdef __cplusplus extern "C"
{ #endif
typedef char **
m_row;
typedef struct field_s { char *name,
*table;
int type,
length,
flags;
} m_field;
typedef struct m_seq_s { int step,
value;
} m_seq;
typedef struct m_data_s
{ int width;
m_row data;
struct m_data_s
*next; } m_data;
typedef struct m_fdata_s { m_field field;
struct m_fdata_s
*next; } m_fdata;
typedef struct result_s { m_data
*queryData, *cursor;
m_fdata *fieldData,
*fieldCursor;
int numRows,
numFields;
} m_result;
#define msqlNumRows(res) res->numRows
#define msqlNumFields(res) res->numFields
#define INT_TYPE 1
#define CHAR_TYPE 2
#define REAL_TYPE 3
#define IDENT_TYPE 4
#define NULL_TYPE 5
#define TEXT_TYPE 6
#define DATE_TYPE 7
#define UINT_TYPE 8
#define MONEY_TYPE 9
#define TIME_TYPE 10
#define LAST_REAL_TYPE 10 #define IDX_TYPE 253
#define SYSVAR_TYPE 254
#define ANY_TYPE 255
#define NOT_NULL_FLAG 1
#define UNIQUE_FLAG 2
#define IS_UNIQUE(n) (n
& UNIQUE_FLAG) #define IS_NOT_NULL(n) (n
& NOT_NULL_FLAG)
static char msqlTypeNames[][12] =
{"???",
"int", "char","real","ident","null","text","date","uint",
"money","time","???"};
/* ** Pre-declarations for the API
library functions ** º»°ÝÀûÀ¸·Î API ÇÔ¼ö°¡ Á¤ÀǵǴÂ
ºÎºÐÀÔ´Ï´Ù. */ #ifndef _MSQL_SERVER_SOURCE extern
char msqlErrMsg[]; int
msqlConnect __ANSI_PROTO((char *));
int msqlSelectDB
__ANSI_PROTO((int, char*)); int
msqlQuery __ANSI_PROTO((int, char*));
int msqlCreateDB
__ANSI_PROTO((int, char*)); int
msqlDropDB __ANSI_PROTO((int, char*));
int msqlShutdown
__ANSI_PROTO((int)); int
msqlGetProtoInfo __ANSI_PROTO((void));
int msqlReloadAcls
__ANSI_PROTO((int)); int
msqlGetServerStats __ANSI_PROTO((int));
char *msqlGetServerInfo
__ANSI_PROTO((void)); char
*msqlGetHostInfo __ANSI_PROTO((void));
char *msqlUnixTimeToDat
e __ANSI_PROTO((time_t)); char
*msqlUnixTimeToTime __ANSI_PROTO((time_t));
void msqlClose
__ANSI_PROTO((int)); void
msqlDataSeek __ANSI_PROTO((m_result*,
int)); void
msqlFieldSeek __ANSI_PROTO((m_result*,
int)); void
msqlFreeResult __ANSI_PROTO((m_result*));
m_row
msqlFetchRow __ANSI_PROTO((m_result*));
m_seq *msqlGetSequenceInfo
__ANSI_PROTO((int, char*)); m_field *msqlFetchField
__ANSI_PROTO((m_result *)); m_result
*msqlListDBs __ANSI_PROTO((int)); m_result
*msqlListTables __ANSI_PROTO((int)); m_result
*msqlListFields __ANSI_PROTO((int, char*)); m_result
*msqlListIndex __ANSI_PROTO((int, char*, char*)); m_result
*msqlStoreResult __ANSI_PROTO((void)); time_t msqlDateToUnixTime
__ANSI_PROTO((char *)); time_t msqlTimeToUnixTime
__ANSI_PROTO((char *)); #endif
int msqlLoadConfigFile
__ANSI_PROTO((char *)); int msqlGetIntConf
__ANSI_PROTO((char *, char *)); char *msqlGetCharConf
__ANSI_PROTO((char *, char*));
#ifdef __cplusplus }
#endif #endif /*MSQL_H*/
<¸®½ºÆ®1> msql.h Çì´õ ÆÄÀÏ ¸®½ºÆ®.
¸ðµç ÇÔ¼öµéÀ» ¸ðµÎ ¾Ë¾Æ¾ß ÇÒ ÇÊ¿ä´Â ¾øÀ¸¸ç,
µ¥ÀÌÅÍ º£À̽º¿Í Åë½ÅÀ» Çϴµ¥ ÀÖ¾î¼ °ÅÀÇ ÇÊ¿äÇÏÁö ¾Ê´Â ÇÔ¼öµéÀÌ
ÀÖ´Ù. ¿ì¸®´Â °¡Àå ¸¹ÀÌ »ç¿ëµÇ°í ÀÖ´Â ÇÔ¼öµéÀ» ¾Ë¾Æ º¼ °ÍÀÌ´Ù.
¶ÇÇÑ mSQL DBMS Ãʺ¸ÀÚµéÀÌ ½±°Ô ³õÄ¥ ¼ö ÀÖ´Â ¼û¾î ÀÖ´Â ÀÛÀº ¼Ò½ºµéÀ»
¼¹ö¿¡¼ ã¾Æ¼ ÇÔ²² ºÐ¼®Çϵµ·Ï ÇÑ´Ù. ÇÊÀÚ°¡ ƯÁ¤ API¸¦ °øºÎÇÒ
¶§ ¸ÕÀú ÇÏ´Â °ÍÀº Çì´õ ÆÄÀÏÀ» ¸ÕÀú º¸´Â °ÍÀÌ´Ù. APIÇì´õ ÆÄÀÏÀ»
¸ÕÀú º¸´Â ÀÌÀ¯´Â ½±°Ô µ¥ÀÌÅÍ º£À̽º¿¡ ¾î¶² API°¡ ÀÖÀ¸¸ç, ¾î¶²
±â´ÉÀ» ÇÒ ¼ö ÀÖÀ» °ÍÀ̶ó°í ÇÏ´Â °ÍµéÀ» ÃßÃøÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù.
´ÙÀ½Àº mSQL API·Î µ¥ÀÌÅͺ£À̽º °ü·Ã ÇÁ·Î±×·¥À»
ÀÛ¼ºÇÒ ¶§ ±âº»ÀûÀ¸·Î »ç¿ëµÇ´Â ÇÔ¼öµéÀ» ¼ø¼´ë·Î ³ª¿ÇÏ¿´´Ù.
´ëÃæÀÇ ÇÔ¼ö »ç¿ë ¼ø¼´Â ´ÙÀ½°ú °°´Ù.
#include <stdio.h> #include
<string.h> #include <stdlib.h> #include
<unistd.h> #include "msql.h"
int main(argc,argv) int argc;
char *argv[]; { //
¼ÒÄÏ ½Äº°ÀÚ¸¦ ¼±¾ð ÇÑ´Ù. int sock;
// µ¥ÀÌÅÍ º£À̽º·ÎºÎÅÍ Äù¸®ÀÇ °á°ú¸¦ ÀúÀåÇÏ´Â
°÷À» ¼±¾ðÇÑ´Ù. // Çì´õ ÆÄÀÏ¿¡ m_resultÇüÀ» ¼±¾ðÇØ ³õ¾ÒÀ¸´Ï
Âü°íÇϱ⠹ٶõ´Ù. m_result
*rs;
//
Mini SQL°ú Á¢¼ÓÀ» ÇÏ´Â ºÎºÐ, ¿¡·¯°¡ ³ª¸é, ¿¡·¯ ¸Þ½ÃÁö Ãâ·Â.
if ((sock
= msqlConnect(NULL)) < 0) { printf("Couldn't
connect to engine!\n%s\n\n", msqlErrMsg); perror("");
exit(1);
}
//
Mini SQL¿¡¼ °ü¸®ÇÏ´Â µ¥ÀÌÅÍ º£À̽º¿¡¼ ¼±ÅÃÇÏ¿© Á¢¼ÓÇÑ´Ù.
if (msqlSelectDB(sock,"µ¥ÀÌÅͺ£À̽º¸í")
< 0) { printf("µ¥ÀÌÅͺ£À̽º¿Í
Á¢¼ÓÇÒ ¼ö ¾ø½À´Ï´Ù, %s\n",,msqlErrMsg); }
//
Äõ¸®¸¦ ½ÇÇàÇÑ´Ù. msqlQuery(sock,qbuf)
//
µ¥ÀÌÅ͸¦ m_resultÇü¿¡ ÀúÀåÇÑ´Ù.(¹è¿¿¡ ÀúÀåÇÑ´Ù°í »ý°¢Çϸé
ÆíÇÏ´Ù) rs=msqlstoreResult()
//
ÀúÀåµÈ µ¥ÀÌÅÍ µéÀ» Àû´çÇÑ Ã³¸®¸¦ ÇØÁÖ¾î¼ ÇÁ·Î±×·¥ÀÇ ¸ñÀûÀ»
´Þ¼ºÇÑ´Ù.
//
µ¥ÀÌÅ͵éÀ» ÀÚÀ¯·Ó°Ô ÇØÁ¦½ÃÄÑ ÁØ´Ù. MsqlFreeresult(rs);
//
µ¥ÀÌÅÍ º£À̽º¿Í Á¢¼ÓÀ» ÇØÁ¦ÇÑ´Ù. msqlClose(sock);
exit(0);
}
<¸®½ºÆ®3> ±âº»ÀûÀÎ ÇÁ·Î±×·¡¹Ö °ñ°Ý.
´ÙÀ½Àº ÇÔ¼ö¿¡ ´ëÇÑ ¼¼ºÎÀûÀÎ ³»¿ëÀ» ´Ù·çµµ·Ï
Çغ¸ÀÚ. ´ëÃæ ¾î¶»°Ô »ç¿ëµÇ´ÂÁö´Â ½±°Ô ¾Ë ÀÖÀ¸¸®¶ó »ý°¢µÇÁö¸¸,
°¢°¢ÀÇ ÇÔ¼öµéÀÇ ±â´Éµé°ú ¿É¼ÇµéÀ» »ó¼¼ÇÏ°Ô ¾Ë¾Æ º¸ÀÚ. ´ëºÎºÐÀÇ
APIµéÀº msqlÀ̶ó´Â ´Ü¾î°¡ ÇÔ¼öÀÇ ¸Ç ¾Õ¿¡ ºÙ¾î¼ ´Ù¸¥ ÇÔ¼öµé°úÀÇ
±¸ºÐÀ» ÇØÁØ´Ù. ¶ÇÇÑ ¸ðµç ÇÔ¼öµéÀ» »ç¿ëÇϴµ¥ ÀÖ¾î¼ ¹ß»ýÇÏ´Â
¸ðµç ¿¡·¯µéÀº MsqlErrMsg[]¶ó´Â ¹è¿¿¡ ÀúÀåÀÌ µÇ¹Ç·Î ¿¡·¯ Á¦¾î¸¦
ÇÏ·Á°í ÇÒ¶§¿¡ ¿¡·¯¸¦ Ç¥½ÃÇÏ°Ô À§ÇÏ¿© Postgres95¿¡¼ »ç¿ëÇÏ´Â
Ç÷¡±× üũ´Â ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ´ÜÁö ÇÔ¼öÀÇ ¸í·É ¼öÇàÀÇ ¼º°ø ¹×
½ÇÆÐÀÇ ¿©ºÎ¸¸ if¹®À¸·Î ÆÇ´ÜÇÏ¿© ±×¿¡ ´ëÀÀµÇ´Â ¸Þ½ÃÁö¸¦ Ãâ·ÂÇØÁֱ⸸
ÇÏ¸é µÈ´Ù. ´ëºÎºÐÀÇ ÇÔ¼öµéÀº ´ÙÀ½°ú °°Àº »óÅ °ªÀ» returnÇØÁØ´Ù.
Flag
°ª --------- ¼º°ø 0 |
|
|
|
---------
½ÇÆÐ -1
1-1. µ¥ÀÌÅͺ£À̽º Á¢¼Ó ¹× Äõ¸®¿Í °ü·ÃµÈ ÇÔ¼ö
* int msqlConnect (char *host) ÀÌ ÇÔ¼ö´Â MSQL µ¥ÀÌÅÍ º£À̽º ¿£Áø°úÀÇ Á¢¼ÓÀ»
Çü¼ºÇÏ´Â ¿ªÇÒÀ» Çϸç, ÇÁ·Î±×·¥ÀÇ Ãʱ⿡ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °æ¿ì°¡
¸¹´Ù. ±âº»°ªÀ¸·Î È£½ºÆ® ¸íÀÌ NULLÀÎ °æ¿ì¿¡´Â Localhost·Î °£ÁÖÇÏ¿©
Á¢¼ÓÇÏ°Ô µÈ´Ù. ÀÌ ÇÔ¼ö´Â À§ÀÇ °£´ÜÇÑ ¿¹Á¦¿¡¼ º¸¾ÒµíÀÌ sockÀ̶ó´Â
º¯¼ö¿¡ socket descriptor¸¦ ³Ñ°ÜÁØ´Ù. µû¶ó¼ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÒ
¶§¿¡´Â À§ÀÇ ¿¹Á¦¿Í °°ÀÌ »ç¿ëÇØ¾ß ÇÑ´Ù. ÀÌ °ªÀº µ¥ÀÌÅͺ£À̽º¿Í
¿¬°áÇÏ¿© °è¼ÓÀûÀ¸·Î ÇÔ¼ö¿¡ ÀÌ °ªÀ» ³Ö¾î¾ß ÇÑ´Ù.
* int msqlSelectDB(int sockdes, char *dbname) MsqlConnect°¡ ¼º°øÀûÀ¸·Î ÀÌ·ç¾îÁ³´Ù¸é, ´ÙÀ½Àº
ÇØ´ç ¼¹ö¿¡¼ °ü¸®¸¦ ÇÏ°í ÀÖ´Â µ¥ÀÌÅÍ º£À̽º Áß¿¡ Á¢±ÙÇÏ·Á´Â
µ¥ÀÌÅͺ£À̽º¸¦ ¼±ÅÃÇϵµ·Ï ÇÏ´Â ÇÔ¼ö·Î Mini SQL 2.0 ¹öÀü ºÎÅÍ´Â
´ÙÁßÀ¸·Î ¿©·¯ °³ÀÇ µ¥ÀÌÅͺ£À̽º¸¦ Á¢±ÙÇϵµ·Ï ÇÑ´Ù. sockÀº µ¥ÀÌÅͺ£À̽º¿Í
Á¢¼ÓÀ» Çϱâ À§ÇÏ¿© »ç¿ëÇß´ø msqlconnect()ÇÔ¼ö°¡ ¸®ÅÏÇÏ´Â sockdes°ªÀ»
³Ö¾î ÁÖ¸é µÈ´Ù. ±×¸®°í dbname¿¡¼´Â ¹®ÀÚÇüÀ¸·Î µ¥ÀÌÅÍ º£À̽ºÀÇ
À̸§À» ³Ö¾î ÁØ´Ù.
* int msqlCreateDB (int sockdes, Char *dbname) µ¥ÀÌÅͺ£À̽º¸¦ »ý¼ºÇϴµ¥ ¸¶Ä¡ Áö³ ´ÞÀÇ µ¥ÀÌÅͺ£À̽º
À¯Æ¿¸®Æ¼¿¡¼ msqladmin°ú°°Àº ¿ªÇÒÀ» ÇÏ´Â °ÍÀÌ´Ù. »ç¿ëÀÚµéÀÌ
ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â °ÅÀÇ µå¹°¸ç, µ¥ÀÌÅͺ£À̽º À¯Æ¿¸®Æ¼¸¦
¸¸µé·Á°í ÇÏÁö ¾Ê´Â ÇÑ »ç¿ëÇÏÁö ¾Ê´Â ÇÔ¼öÀÌ´Ù.
* int msqlDropDB (Int sockdes, char *dbname) µ¥ÀÌÅͺ£À̽º¸¦ ¸ðµÎ Áö¿ì±â À§ÇÑ ÇÔ¼ö·Î msqladmin¿¡¼
»ç¿ëµÇ´Â ÇÔ¼öÀÌ´Ù.
* int msqlQuery (int sockdes, char *query) µ¥ÀÌÅͺ£À̽º¿¡ Á¢±ÙÇÏ¿© ¾ÆÁÖ ÀÚÁÖ »ç¿ëµÇ°í, Áß¿äÇÑ
ÇÔ¼ö·Î ÇÁ·Î±×·¡¸Ó°¡ ¸¸µç Äõ¸®¸¦ Á÷Á¢ µ¥ÀÌÅÍ º£À̽º·Î Àü¼ÛÇÏ¿©
ÁÖ´Â ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÇÁ·Î±×·¡¸Ó°¡ ¿øÇÏ´Â µ¥ÀÌÅ͵éÀ»
¿©·¯ °¡Áö Äõ¸®¹®¿¡ Á¶°Ç(where, order by)À» ÀÌ¿ëÇÏ¿© ¾ò¾î³¾ ¼ö
ÀÖ´Ù. query¶ó´Â º¯¼ö´Â ÁÖ·Î mallocÀ̳ª ¹è¿·Î ¼±¾ðµÇ¾î¼ ±×
¹®ÀÚ¿ ³»¿¡ SELECT, UPDATE, DELETE µîÀÇ Äõ¸®¹®µéÀÌ »ðÀÔÀÌ µÇ±â
¶§¹®¿¡ ÃæºÐÇÑ ¾çÀÇ ¸Þ¸ð¸®¸¦ ÇÒ´çÇØÁÖ´Â °ÍÀÌ ÁÁ°í, ±×·¸°Ô ÇÏÁö
¾Ê´Â´Ù¸é, Á÷Á¢ Äõ¸®¹®À» ÀÔ·ÂÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö°¡ ½ÇÇàÀÌ µÇ¸é,
MsqlStroreResult() ÇÔ¼ö¸¦ ½ÇÇàÇÏ¿© ÇÁ·Î±×·¥¿¡ ¼±¾ðÇÑ m_resultÇü
rs º¯¼ö¿¡ ÀúÀåÇϵµ·Ï ÇØ¾ß ½ÇÁ¦·Î ¿ì¸®°¡ ½±°Ô ¾µ¼ö ÀÖ´Â ¹è¿ÀÇ
ÇüÅ°¡ µÈ´Ù. m_resultÇüÀº ±¸Á¶°¡ ¾à°£ º¹ÀâÇϱâ´Â ÇÏÁö¸¸, µ¥ÀÌÅͺ£À̽º
±¸Á¶¸¦ ¾Ë·Á°í ÇÏÁö ¾Ê´Â ÇÑ ÀÌ ÀÚ·áÇü¿¡ ´ëÇÏ¿© ³Ê¹« ÀÚ¼¼ÇÏ°Ô
¾Ë·Á°í Çϰųª, ¾î·Æ°Ô »ý°¢ÇÏÁö ¾Ê¾Æµµ µÈ´Ù. ÇÁ·Î±×·¡¸Ó°¡ »ç¿ëÇÏ´Â
¹æ¹ý¿¡ ´ëÇÏ¿©¼´Â ¾ÆÁÖ ½±°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï µÇ¾î ÀÖ´Ù.
* m_result *msqlStoreResult () ÀÌ ÇÔ¼ö´Â ¾Õ¿¡¼µµ ¸»ÇßµíÀÌ msqlQuery()ÇÔ¼ö¿Í
ÇÔ²² »ç¿ëµÇ¾îÁ®¼ ±× Äõ¸®ÀÇ °á°ú °ªÀ» m_result ÇüÀÇ rs º¯¼ö¿¡
ÀúÀåÇϵµ·Ï ÇÏ´Â ÇÔ¼öÀÌ´Ù. À¯°¨½º·´°Ôµµ Áß¿äÇÑ ¿ªÇÒÀ» ÇÏÁö¸¸,
Ưº°ÇÑ º¯¼ö¸¦ °¡ÁöÁö ¾Ê´Â ÇÔ¼öÀÌ´Ù.
* Void msqlFreeResult(m_result *rs) ´õ ÀÌ»ó Äõ¸®¸¦ ÇÑ m_result º¯¼öÇüÀ¸·Î ¼±¾ðÇÑ
rs º¯¼ö °á°ú°ªÀÌ ÇÊ¿äÇÏÁö ¾Ê´Ù¸é, rs°ªÀ» Àμö·Î ³Ö¾î ÁÖ¸é °á°ú
ÀÚÀ¯·Ó°Ô ¸¸µé¾î ÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù.
* void msqlDataSeek(m_result *rs, int pos),
void msqlFieldSeek(m_result *rs, int pos) m_result ±¸Á¶Ã¼¿¡´Â µ¥ÀÌÅÍÀÇ ´ÙÀ½ÀÇ row µ¥ÀÌÅÍ
°ª¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áö´Â clientÃøÀÇ Ä¿¼¶ó´Â °ÍÀÌ Æ÷ÇÔÇÑ´Ù. MsqlDataseek
ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µ¥ÀÌÅÍÀÇ À§Ä¡ Á¤º¸¸¦ À̵¿ÇÒ ¼ö ÀÖ´Ù. posÀÇ Ã³À½
½ÃÀÛ °ªÀº 0À¸·Î ½ÃÀÛÇÏ°í, Äù¸®·Î ¼±ÅõǾîÁø µ¥ÀÌÅÍÁß ¸Ç ³¡¿¡
ÀÖ´Â µ¥ÀÌÅ͸¦ ¾ò±â¸¦ ¿øÇÒ ¶§¿¡´Â msqlNumrows() ÇÔ¼ö·Î ¼±ÅõǿÀÁø
µ¥ÀÌÅÍÀÇ °³¼ö¸¦ ¾òÀº ÈÄ¿¡ -1°ªÀ» ÇØÁÖ¾î pos °ª¿¡ ³Ñ°Ü ÁÖ°í,
msqlFetchrows() ³ª msqlFetchfield()ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ¾òÀ» ¼ö ÀÖ´Ù.
// Çà ´ÜÀ§ µ¥ÀÌÅ͸¦
¾ò´Â´Ù. m_row mrow; // ¿´ÜÀ§ÀÇ µ¥ÀÌÅ͸¦
¾ò´Â´Ù. m_field mfield;
for(int i; I<= msqlNumRows(rs); i++) {
mrow=msqlFetchRows(rs);
°¢ÀÇ
Çà¿¡ ´ëÇÏ¿© ¸Å¹ø Çѹø¾¿ Á¢±ÙÀ» ÇÑ´Ù.
¸¶Âù°¡Áö·Î m_fieldÇüµµ °°Àº
¹æ¹ýÀ» »ç¿ëÇÑ´Ù. |
¡å
¡å ¡å
¹ø È£ |
ÀÌ ¸§ |
³ª ÀÌ |
mrow[0] |
mrow[1] |
mrow[2] |
mrow[0] |
mrow[1] |
mrow[2] |
: |
: |
: |
} |
* m_row msqlFetchRow(m_result *rs) ,
m_field *msqlFetchField(m_result *rs) µÎ ÇÔ¼ö´Â ½ÇÁ¦·Î µ¥ÀÌÅ͸¦ ÀúÀåÇÏ´Â ÇÔ¼ö·Î m_rowÇüÀ¸·Î
ÀúÀåÇÏ¿© ÇÁ·Î±×·¡¸Ó°¡ °Ë»öµÈ µ¥ÀÌÅÍÀÇ row¿¿¡ ´ëÇÏ¿© ½±°Ô Á¢±ÙÀÌ
°¡´ÉÇϵµ·Ï ÇÑ´Ù. °ÅÀÇ ¸ðµç ÇÔ¼öµéÀÌ ÀÌ ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© µ¥ÀÌÅ͸¦
¹Þ¾Æ µéÀ̴µ¥ »ç¿ëµÈ´Ù. ¹°·Ð msqlFetchField() ÇÔ¼ö¸¦ »ç¿ëÇÏ·Á¸é,
m_fieldÇüÀ¸·Î ¼±¾ðÇÑ º¯¼ö°¡ ÀÖ¾î¾ß ÇÑ´Ù.
* int msqlNumRows(m_result *rs), int
msqlNumFields(m_result *rs) msqlQuery()¸¦
½ÇÇàÇÏ°í³ª¼ result °ªÀ» rs¿¡ ÀúÀåÇÏ¿´´Ù¸é, ¿ì¸®´Â ¸î °³ÀÇ µ¥ÀÌÅ͵éÀÌ
ÇöÁ¦ Äõ¸®·Î ¼±ÅõǾú´ÂÁö ¾Ë¾Æ¾ß ÇÒ¶§°¡ ¾ÆÁÖ ¸¹¾Æ ƯÈ÷ ºñºñ¿¡½º
°Ô½ÃÆÇÀ̳ª, °Ë»öÀ» ¿øÇÒ ¶§¿¡´Â ¸î¹øÀÇ ·çÇÁ¸¦ µ¹·Á¾ß ÇÒÁö ¸ð¸¦¶§¿¡
¾ÆÁÖ À¯¿ëÇÏ°Ô »ç¿ëµÈ´Ù. rows¿Í Field´Â ½±°Ô ¾Ë ¼ö ÀÖµíÀÌ row´Â
rowÀÇ °³¼ö¸¦ fieldÇÔ¼ö´Â fieldÀÇ °³¼ö¸¦ Ãâ·ÂÇÏ¿© ÁØ´Ù.
* void msqlClose(int sock) mSQL µ¥ÀÌÅͺ£À̽º ¿£Áø°úÀÇ ¸ðµç Åë½ÅÀ» Á¾·áÇϱâ
À§ÇÏ¿© ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ´ëºÎºÐÀÇ °æ¿ì¿¡´Â ÇÁ·Î±×·¥ÀÇ ¸Ç ¸¶Áö¸·¿¡¼
ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.
1-2. µ¥ÀÌÅÍ º£À̽º ½ºÅ°¸¶¿Í °ü·ÃµÈ ÇÔ¼ö
´ÙÀ½Àº µ¥ÀÌÅÍ º£À̽ºÀÇ ½ºÅ°¸¶¿Í °ü·ÃµÈ ÇÔ¼öµéÀ»
¼Ò°³ÇÒ °ÍÀÌ´Ù. ¿©·¯ºÐµéÀº msqladminÀ̶ó´Â ÇÁ·Î±×·¥À» ÀÌ¿ëÇÏ¿©
µ¥ÀÌÅͺ£À̽ºÀÇ ½ºÅ°¸¶¸¦ ¼³°èÇÒ ¼ö ÀÖ´Ù. ±×¸®°í Relshow,
msqldump¶ó´Â ÇÁ·Î±×·¥À» ÀÌ¿ëÇÏ¿© µ¥ÀÌÅÍ º£À̽º ½ºÅ°¸¶À» º¼ °ÍÀÌ´Ù.
ÀÌ·¸°ÔÇؼ µ¥ÀÌÅÍ º£À̽ºÀÇ ½ºÅ°¸¶¸¦ º¸´Â ¹æ¹ýµµ ÀÖ°ÚÁö¸¸, Á»´õ
º»ÀÎÀÇ ÃëÇâ¿¡ ¸Â°Ô ÀÌ·¯ÇÑ ÇÁ·Î±×·¥µéÀ» °è¹ßÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ÀÇ
ÇÔ¼öµéÀ» ±×°ÍÀ» ¸¸µå´Âµ¥ ¾ÆÁÖ À¯¿ëÇÏ°Ô »ç¿ëµÉ °Í °°´Ù.
* m_result *msqlListDBs(Int sock) mSQL µ¥ÀÌÅͺ£À̽º ¿£Áø¿¡¼ °ü¸®ÇÏ°í ÀÖ´Â µ¥ÀÌÅÍ
º£À̽ºÀÇ ¸ðµç List¸¦ º¸¿©ÁØ´Ù. ÀÌ¿¡ ´ëÇÑ µ¥ÀÌÅ͵éÀº m_result
ÇüÀ¸·Î ÀúÀåÀÌ µÇ´Âµ¥, ÀÌÀü¿¡ ¾Ë¾Æº¸¾Ò´ø msqlfetchrow()ÇÔ¼ö¸¦
ÀÌ¿ëÇÏ¿© µ¥ÀÌÅÍ º£À̽ºµéÀÇ À̸§µéÀ» ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù.
* m_result *msqlListTables(int sock) msqlListDBs() ÇÔ¼ö¿Í ¸¶Âù°¡Áö·Î µ¥ÀÌÅͺ£À̽º
Å×À̺íÀ» m_resultÇüÀ¸·Î ÀúÀåÇÑ´Ù.
* m_result *msqlListFields (int sock, char
*tableNAME) ƯÁ¤ µ¥ÀÌÅͺ£À̽ºÀÇ
Å×ÀÌºí¿¡¼ÀÇ ¸ðµç Çʵ忡 ´ëÇÑ Á¤º¸¸¦ ÀúÀåÇÑ´Ù.
* m_result *msqlListIndex(int sock, char
tableNAME, char *index) Å×À̺íÁß¿¡¼
index Å×À̺íÀÇ ±¸Á¶¸¦ ¾Ë ¼ö ÀÖ°Ô ÇÑ´Ù.
mSQL API¿¡ ´ëÇÏ¿© ÀÚ¼¼ÇÏ°Ô ¼³¸í¸¸À» ´õÇÑ´Ù´Â
°ÍÀº ¿Ø(~)Áö ½Ç¹«ÀûÀÎ °Í °°Áö ¾Ê¾Æ ÇÊÀÚ¸¦ ½È¾îÇÑ´Ù. ½ÇÁ¦ÀûÀÎ
¿¹Á¦¸¦ ÁÖ·Î ´Ù·ç´Â °ÍÀÌ ÇÊÀÚÀÇ ½ºÅ¸ÀÏÀÌ´Ù. ´ÙÀ½Àº ½ÇÁ¦·Î ÄÄÆÄÀÏÀÌ
°¡´ÉÇϵµ·Ï ¸¸µé¾îÁø °£´ÜÇÑ ÇÁ·Î±×·¥ ¿¹Á¦ÀÌ´Ù. ¾Æ·¡ÀÇ ÇÁ·Î±×·¥
¿¹Á¦¸¦ º¸±â Àü¿¡ ÄÄÆÄÀÏÇÏ´Â ¹æ¹ýÀ» ¸ÕÀú ¾Ë¾Æ¾ß µÉ °Í °°´Ù.
1-3. ÄÄÆÄÀÏÇÏ´Â ¹æ¹ý
ÄÄÆÄÀÏÇÏ´Â ¹æ¹ý ¿©·¯ºÐÀÌ Gcc¿Í °°Àº ¼º´É ÁÁ°í,
Æí¸®Çϸç, ¶Ù¾î³ ÄÄÆÄÀÏ·¯°¡ ÀÖ´Ù¸é ¸ðµÎ °¡´ÉÇÏ´Ù.
ÄÄÆÄÀÏÇÏ´Â ¹æ¹ýÀº ¿©·¯ °¡Áö°¡ µÉ ¼ö ÀÖ´Ù.
ÀÚ½ÅÀÇ ½Ã½ºÅÛ¿¡ ¸Â°Ô ´ÙÀ½À» °íÄ¡¸é ´ëºÎºÐ ¼º°øÀûÀ¸·Î ÄÄÆÄÀÏÀ»
ÇÒ ¼ö ÀÖÀ¸¸®¶ó »ý°¢ÇÑ´Ù.
cc -c -I/usr/local/Hughes/include
msqlapp.c cc -c msqlapp msqlapp.c -L/usr/local/Hughes/lib
-lmsql cc -c msqlapp msqlapp.c -L/usr/local/Hughes/lib
-I/usr/local/Hughes/include -lmsql -lnsl -lsocket |
/* mSQL 2.0 release C
API demonstration1 Programmed by Kyung-Ho,
Kim */
#include <stdio.h> #include
<stdlib.h> #include <time.h> #include
"msql.h"
void printErrMsg(void);
void main(void) { char
key, *hostname; int sockdes, i, usn;
m_result *rs; m_row mrow;
printf("mSQL 2.0 Á¢¼Ó
ÇÁ·Î±×·¥¡¬n"); printf("Á¢¼ÓÇÒ
mSQL 2.0 ¼¹ö¸¦ ÀÔ·ÂÇϼ¼¿ä¡¬n"); hostname=malloc(30
* sizeof(char)); gets(hostname);
printf("Áö±Ý <%s>¿¡
Á¢¼ÓÀ» ½ÃµµÇÕ´Ï´Ù.¡¬n", hostname); sockdes=msqlConnect(hostname);
printf("¼ÒÄÏ ¹øÈ£ : %d ¹øÀ¸·Î ¿¬°á¿¡
¼º°øÇßÀ¾´Ï´Ù.¡¬n", sockdes);
msqlClose(sockdes); printf("Á¢¼ÓÀ»
Á¾·áÇßÀ¾´Ï´Ù. ¿©±â°¡ ÇÁ·Î±×·¥ÀÇ ³¡ÀÔ´Ï´Ù¡¬n");
free(hostname); }
void printErrMsg(void) { puts("mSQL
2.0 rel : ¿¡·¯°¡ ¹ß»ýÇßÀ¾´Ï´Ù.¡¬n"); puts(msqlErrMsg);
}
<¿¹Á¦1> msqlapp.c ÇÁ·Î±×·¥ ¿¹Á¦
½±°Ô º¸¾Æ¼´Â µ¥ÀÌÅÍ º£À̽º¿¡ Á¢±ÙÇÏ¿© ¾Æ¹«
Àϵµ ÇÏÁö ¾Ê°í Á¢¼ÓÀ» Á¾·áÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ´ÙÀ½Àº
¿©·¯ºÐµéÀÇ µ¥ÀÌÅÍ º£À̽º ¼Ò½º µð·ºÅ丮¸¦ µÚÁú Â÷·ÊÀÌ´Ù. ´ÙÀ½°ú
°°Àº °æ·Î¿¡ ¼¹ö¿Í °ü·ÃÀÌ µÇ¾î ÀÖ´Â ¼Ò½º¿Í °ü·ÃÀÌ ¾ø´Â ¸î °³ÀÇ
¼Ò½º¸¦ º¼ ¼ö ÀÖ´Ù. Insert_test.c ÆÄÀÏ°ú select_test.c ÆÄÀÏÀ»
½±°Ô ãÀ» ¼ö ÀÖÀ¸¸ç, sample.msql ÆÄÀϵµ ÇÔ²² ãÀ» ¼ö ÀÖ´Ù. ÀÌ
ÆÄÀϵéÀº ¿©·¯ºÐµéÀ» À§ÇÑ ÆÄÀÏÀÌ´Ù. µÎ°³ÀÇ ÆÄÀÏ ´ëÇÏ¿© ¿©·¯ºÐµéÀÌ
Á÷Á¢ ¼Ò½º¸¦ ºÐ¼®ÇØ º¸´Â °Íµµ ¸¹Àº µµ¿òÀÌ µÉ °ÍÀÌ´Ù.
<±×¸² 3> mSQL ¼¹ö µð·ºÅ丮
¿©·¯ºÐµéÀº sample.msqlÀ» ¸ÕÀú µ¥ÀÌÅͺ£À̽º·Î
¸¸µé¾î¾ß ÇÑ´Ù. ±×¸®°í 2°³ÀÇ Å×½ºÆ® ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÏ¿© ½ÇÇàÇØ
º¸±â ¹Ù¶õ´Ù. ±×¸®°í relshow.c, msqladmin.c, msqldump.c msqlimport.c
msqlexport.c µîµîÀÇ ÆÄÀϵµ ÇÔ²² º¸À̴µ¥ ÀÌ·¯ÇÑ ÆÄÀϵéÀ» ºÐ¼®ÇÏ´Â
°ÍÀÌ °¡Àå ÁÁÀº ¹æ¹ýÀÌ´Ù.
2. mSQL Tool Version 0.7
ÀÌÁ¦´Â °£´ÜÇÑ ¿¹Á¦¸¦ ´Ù·ç¾î º¸¾ÒÀ¸´Ï ¸öÀ»
Ç® ½Ã°£ÀÌ µÈ °Í °°´Ù. ±Ý³â ¿©¸§¿¡ ¸¸µé¾ú´ø ÇÁ·Î±×·¥À» Çѹø ¼Ò°³ÇØ
º¼±îÇÑ´Ù. ±×·¡ÇÈ ÇÔ¼öµµ »ç¿ëµÇÁö ¾Ê¾ÒÀ¸¸ç, ¿©·¯ºÐµéÀÌ ½±°Ô °íÃļ
´Ù½Ã »õ·Ó°Ô ¸¸µé±âµµ ½¬¿ï °ÍÀ¸·Î º¸ÀÌ°í, ÀüüÀûÀÎ mSQL API µ¿ÀÛÀ»
¾Ë ¼ö ÀÖÀ¸¸®¶ó »ý°¢µÈ´Ù. Àß ¸¸µé¾î Á³´Ù°í ÀÌ ÇÁ·Î±×·¥À» ¼Ò°³ÇÏ´Â
°ÍÀÌ ¾Æ´Ï¶ó´Â °ÍÀ» ¾Ë¾Æ ÁÖ¾úÀ¸¸é ÇÑ´Ù. ÇÊÀÚ´Â ¿©·¯ °³ÀÇ
µ¥ÀÌÅÍ º£À̽º¸¦ »ç¿ëÇÏ°í Àִµ¥ ¶§¶§·Î µ¥ÀÌÅÍ º£À̽º ½ºÅ°¸¶¸¦
º¸°í ½Í°Å³ª µ¥ÀÌÅ͵éÀÌ Àß µé¾î °¬´ÂÁö¸¦ ¾Ë¾Æ º¸°í ½ÍÀ» ¶§°¡
ÀÖ´Ù. À̶§ ºÒÆíÇÑ °ÍÀ» ´Ù¸¥ »ç¶÷ÀÌ ¸¸µç ÅøÀ» ÀÌ¿ëÇÏÁö ¾Ê°í,
Á÷Á¢ ¸¸µé¾ú´Ù´Â °Í »ÓÀÌ´Ù.
´ÙÀ½Àº ÇÁ·Î±×·¥À» ½ÃÇàÇϸé, µ¥ÀÌÅÍ º£À̽ºÀÇ
Á¢¼ÓÀ» ¿øÇϴ ȣ½ºÆ®ÀÇ À̸§À» ³Ö±â¸¦ ¿øÇÑ´Ù.
<±×¸² 3> msqltool 0.7 ½ÇÇà
¿©±â¿¡ mSQL µ¥ÀÌÅÍ º£À̽º ¿£ÁøÀÌ µ¿ÀÛÇÏ´Â
¿öÅ©½ºÅ×À̼ÇÀ̳ª ¸®´ª½º ¼¹öÀÇ IP³ª Domain name À» ÀÔ·ÂÇϸé
¹Ù·Î Á¢¼ÓÀ» ÇÑ´Ù. ¸¸¾à ¾Æ¹« ÀԷµµ ÇÏÁö ¾Ê°í Enter¸¦ Çϸé, localhost·Î
Á¢¼ÓÇϵµ·Ï Çß´Ù. ÀÌ ÇÁ·Î±×·¥ÀÇ ÁÖ¿ä ºÎºÐÀ» »ìÆ캸¸é ´ÙÀ½°ú
°°´Ù.
1. µ¥ÀÌÅÍ º£À̽º ¼¹ö¿¡ Á¢¼ÓÇϱâ
// // msqlConnect() ÇÔ¼ö¸¦ »ç¿ëÇؼ mSQL
2.0°úÀÇ Á¢¼Ó ¿©ºÎ È®ÀÎ // printf("Áö±Ý <%s>¿¡
Á¢¼ÓÀ» ½ÃµµÇÕ´Ï´Ù.¡¬n", hostname); if((sockdes=msqlConnect(hostname))
< 0){ printErrMsg(); printf("¿¬°á¿¡
½ÇÆÐÇßÀ¾´Ï´Ù. %s ¼¹ö¿¡ mSQL 2.0 DBMS°¡ µ¿ÀÛÇÏ´ÂÁö È®ÀÎÇϼ¼¿ä.¡¬n",
hostname);
msqlClose(sockdes); exit(1);
}
2. Á¢¼ÓÇÑ È£½ºÆ®ÀÇ ¸ðµç µ¥ÀÌÅÍ º£À̽ºµéÀ» ¾Ë¾Æ³»±â
do{ // //
Á¢¼ÓµÈ µ¥ÀÌŸº£À̽º½Ã½ºÅÛÀÇ ¸ðµç µ¥ÀÌŸ º£À̽º¸¦ ¾Ë¾Æ³½´Ù
// printf("¡¬nÁö±Ý
%s ¿¡¼ °ü¸®ÇÏ°í ÀÖ´Â µ¥ÀÌÅÍ º£À̽ºÀÔ´Ï´Ù. ¡¬n", hostname);
if(!(rs=msqlListDBs(sockdes))){
printErrMsg(); printf("°ü¸®ÇÏ°í
ÀÖ´Â µ¥ÀÌŸ º£À̽º°¡ ¾ø´Â °Í °°À¾´Ï´Ù.¡¬n¡¬n"); exit(1);
} else{
totaldb=msqlNumRows(rs);
printf("ÇöÁ¦ ÃÑ %d
°³ÀÇ µ¥ÀÌŸ º£À̽º¸¦ °ü¸®ÇÏ°í ÀÖÀ¾´Ï´Ù. ¡¬n", totaldb);
// °¢ µ¥ÀÌŸ º£À̽ºÀÇ À̸§À»
¾ò´Â´Ù. for(counter=0;
counter<totaldb; counter++){ mrow=msqlFetchRow(rs);
dblist[counter]=*mrow;
}
3. µ¥ÀÌÅÍ º£À̽ºÀÇ Å×ÀÌºí ½ºÅ°¸¶ Ãâ·Â
if(utb!=0){ //
//
Å×ÀÌºí³»¿¡ Çʵå Á¤º¸¸¦ ¾Ë¾Æ³½´Ù. //
printf("ÀÔ·ÂÇϽÅ
¼ýÀÚ´Â %d ¹øÀÔ´Ï´Ù. ¡¬n", utb); strcpy(tbname,
tblist[utb-1]); printf("Áö±Ý
%s Å×À̺íÀ» Á¢±Ù Áß ÀÔ´Ï´Ù.¡¬n¡¬n", tbname); if(!(rs=msqlListFields(sockdes,
tbname))){ printErrMsg();
exit(1);
}
else{
counter=0;
printf("¡¬n");
printf("-----------------------------------------------¡¬n");
printf("
ÇöÁ¦ Á¢±Ù ÁßÀÎ µ¥ÀÌŸ º£À̽º : %s¡¬n", dbname);
printf("
ÇöÁ¦ Á¢±Ù ÁßÀÎ Å×À̺í :
%s¡¬n", tbname);
printf("-----------------------------------------------¡¬n");
printf("
¹ø È£ ÇʵåÀ̸§ ÇʵåÇü Çʵå±æÀÌ
ÇʼöÅ° Unique À妽º ¡¬n");
printf("------------------------------------------------¡¬n");
while((mfield=msqlFetchField(rs))){
printf("
%3d %-13.13s %-7.7s %6d %s¡¬n",
counter+1, mfield->name,¡¬ fieldtype(mfield->type),
mfield->length, keytype(mfield->type, mfield->flags));
counter++;
}
printf("------------------------------------------------¡¬n");
}
printf("¿£ÅÍÅ°¸¦
ÀÔ·ÂÇÏ½Ã¸é µ¥ÀÌŸ º£À̽º ¸Þ´º·Î µ¹¾Æ °©´Ï´Ù...¡¬n¡¬n");
}
else
break;
}while(tolower(getc(stdin))!=
0x1C); }
°¢ ºÎºÐº°·Î Ưº°È÷ ¼³¸íÇÒ °ÍÀº ¾øÀ» °Í °°´Ù.
µ¶ÀÚ ¿©·¯ºÐµéÀÌ APIÀÇ ¼³¸íÀ» º¸¸é¼ µ¿ÀÛÀÌ ¾î¶»°Ô µÇ´ÂÁö ½±°Ô
¾Ë ¼ö ÀÖ´Ù.
<±×¸² 4> msqltool¿¡¼ µ¥ÀÌÅÍ º£À̽ºÀÇ
Å×ÀÌºí ½ºÅ°¸¶
4. Full Source Code List
/* mSQL 2.0 release Database
Schema Browser. Msqltools version 0.7
Programmed by Kyung-Ho, Kim
GNU General Public License.
Copyrighted by GPL. This Program
is FREE */
#include <stdio.h> #include <stdlib.h>
#include <string.h> #include <time.h> #include
<ctype.h> #include "msql.h" #define
DEBUG printf("¿©±â±îÁö´Â
¿¡·¯°¡ ³ªÁö ¾Ê¾ÒÀ¾´Ï´Ù¡¬n");
extern int errno; void printErrMsg(void);
char *fieldtype(int type); char *keytype(int type, int flag);
// // ¿¡·¯°¡ ¹ß»ýÇÏ¸é ¿¡·¯¸¦ Ãâ·ÂÇÑ´Ù.
// void printErrMsg(void) { char *buffer;
buffer = (char *)malloc( 30 * sizeof(char));
puts("--------------------------------------------------------¡¬n");
puts("mSQL 2.0 rel : ¿¡·¯°¡ ¹ß»ýÇßÀ¾´Ï´Ù.¡¬n");
puts(msqlErrMsg); sprintf(buffer,
"¿¡·¯ ¹ß»ý"); perror(buffer);
puts("--------------------------------------------------------\n");
free(buffer); }
char *fieldtype(int type) { char
*buffer;
buffer=(char *)malloc(10*sizeof(char));
switch(type){ case
INT_TYPE: strcpy(buffer, "Á¤¼öÇü");
break; case UINT_TYPE:
strcpy(buffer, "¹èÁ¤¼öÇü");
break; case DATE_TYPE:
strcpy(buffer, "³¯ Â¥");
break; case TIME_TYPE:
strcpy(buffer, "½Ã °£");
break; case MONEY_TYPE:
strcpy(buffer, " µ· ");
break; case CHAR_TYPE:
strcpy(buffer,"¹® ÀÚ");
break; case TEXT_TYPE:
strcpy(buffer, "ÅؽºÆ®");
break; case REAL_TYPE:
strcpy(buffer, "½Ç ¼ö");
break; case IDX_TYPE:
strcpy(buffer,"À妽º");
break; default:
strcpy(buffer, "¾ø À½");
break; } return
b
uffer; free(buffer); }
char *keytype(int type, int flag) {
char *buffer;
buffer=(char *)malloc(17*sizeof(char));
if(type !=IDX_TYPE) sprintf(buffer,
"%s", IS_NOT_NULL(flag)? " Y N/A"
: " N N/A");
else sprintf(buffer,
"%s", IS_UNIQUE(flag)? "N/A Y
" : "N/A N
");
return buffer; }
void main(void) {
char *hostname, dbname[20], tbname[20];
int sockdes, counter, udb=1, utb, totaldb, totaltb,
totalfd;
m_result *rs; m_row
mrow; m_field *mfield; char
**mmrow, **dblist, **tblist;
// // ÇÁ·Î±×·¥
½ÃÀÛ-Á¢¼ÓÇÒ ¼¹öÀÇ ÁÖ¼Ò¸¦ ÀÔ·Â ¹Þ´Â´Ù. //
printf("------------------------------------------------------¡¬n");
printf(" mSQL
2.0 ºê¶ó¿ìÀú v.0.7 -- Á¦ÀÛÀÚ: ±è.°æÈ£(zesus:Hitel)¡¬n");
printf("------------------------------------------------------¡¬n");
printf("Á¢¼ÓÇÒ mSQL 2.0 ¼¹ö¸¦ ÀÔ·ÂÇϼ¼¿ä¡¬n");
hostname=malloc(30 * sizeof(char)); printf("¿ø°Ý
È£½ºÆ® (Enter=localhost): "); gets(hostname);
//scanf("%s",hostname); //getchar();
if(strcmp(hostname,"¡¬n")<0) strcpy(hostname,"localhost");
// // msqlConnect()
ÇÔ¼ö¸¦ »ç¿ëÇؼ mSQL 2.0°úÀÇ Á¢¼Ó ¿©ºÎ È®ÀÎ //
printf("Áö±Ý <%s>¿¡ Á¢¼ÓÀ» ½ÃµµÇÕ´Ï´Ù.¡¬n",
hostname); if((sockdes=msqlConnect(hostname))
< 0){ printErrMsg(); printf("¿¬°á¿¡
½ÇÆÐÇßÀ¾´Ï´Ù. %s ¼¹ö¿¡ mSQL 2.0 DBMS°¡ µ¿ÀÛÇÏ´ÂÁö È®ÀÎÇϼ¼¿ä.¡¬n",
hostname); msqlClose(sockdes);
exit(1); } else{
printf("¼ÒÄÏ ¹øÈ£ : %d ¹øÀ¸·Î
¿¬°á¿¡ ¼º°øÇßÀ¾´Ï´Ù.¡¬n", sockdes); printf("%s
: mSQL 2.0 ¼¹ö¿¡ ¼º°øÀûÀ¸·Î Á¢¼ÓÀ» ÇßÀ¾´Ï´Ù.¡¬n", hostname);
printf("----------------------------------------------------¡¬n¡¬n");
}
do{ //
// Á¢¼ÓµÈ µ¥ÀÌŸº£À̽º½Ã½ºÅÛÀÇ ¸ðµç
µ¥ÀÌŸ º£À̽º¸¦ ¾Ë¾Æ³½´Ù //
printf("¡¬nÁö±Ý %s ¿¡¼ °ü¸®ÇÏ°í
ÀÖ´Â µ¥ÀÌÅÍ º£À̽º ÀÔ´Ï´Ù.¡¬n", hostname); if(!(rs=msqlListDBs(sockdes))){
printErrMsg(); printf("°ü¸®ÇÏ°í
ÀÖ´Â µ¥ÀÌŸ º£À̽º°¡ ¾ø´Â °Í °°À¾´Ï´Ù.¡¬n¡¬n"); exit(1);
} else{
totaldb=msqlNumRows(rs);
printf("ÇöÁ¦ ÃÑ %d
°³ÀÇ µ¥ÀÌŸ º£À̽º¸¦ °ü¸®ÇÏ°í ÀÖÀ¾´Ï´Ù. ¡¬n", totaldb);
// °¢ µ¥ÀÌŸ º£À̽ºÀÇ À̸§À»
¾ò´Â´Ù. for(counter=0;
counter<totaldb; counter++){ mrow=msqlFetchRow(rs);
dblist[counter]=*mrow;
}
// °¢
µ¥ÀÌŸ º£À̽ºÀÇ À̸§À» Ãâ·ÂÇÑ´Ù. printf("----------------------------------------------------¡¬n");
printf(" ¹ø
È£ µ¥ÀÌŸ
º£À̽º¡¬n"); printf("----------------------------------------------------¡¬n");
for(counter=0; counter<totaldb;
counter++) printf("
%3d. %-16.16s¡¬n",
counter+1, dblist[counter]);
// °ü¸®ÇÏ°í
ÀÖ´Â µ¥ÀÌŸ º£À̽º¸¦ »ç¿ëÀÚÀÇ ¼±ÅÃÀ» ÀÔ·Â ¹ÞÀ½. printf("------------------------------------------------------¡¬n");
printf("µ¥ÀÌŸ º£À̽º¸¦
¼±ÅÃÇϼ¼¿ä[¹øÈ£,0(Á¾·á)] : "); scanf("%d",&udb);
getc(stdin); }
if(udb!=0){ //
// »ç¿ëÀÚÀÇ ¿ä±¸¿¡ µû¶ó ¼±ÅÃµÈ µ¥ÀÌŸ
º£À̽º¿¡ Á¢±ÙÇÑ´Ù. // printf("ÀÔ·ÂÇϽÅ
¼ýÀÚ´Â %d ¹øÀÔ´Ï´Ù. ¡¬n¡¬n", udb); strcpy(dbname,
dblist[udb-1]); printf("%s
µ¥ÀÌŸ º£À̽º¸¦ Á¢±ÙÇÕ´Ï´Ù.¡¬n", dbname); if(msqlSelectDB(sockdes,
dbname)==-1) printErrMsg();
else printf("%s
µ¥ÀÌŸ º£À̽º¿¡ ¼º°øÀûÀ¸·Î Á¢±ÙÇß½À´Ï´Ù.¡¬n¡¬n", dbname);
do{ //
// µ¥ÀÌŸ
º£À̽º³»ÀÇ Å×À̺í Á¤º¸¸¦ º¸¿© ÁØ´Ù. //
if(!(rs=msqlListTables(sockdes))){
printErrMsg();
exit(1);
}
else{
totaltb=msqlNumRows(rs);
for(counter=0;
counter < totaltb; counter++){
mrow=msqlFetchRow(rs);
tblist[counter]=*mrow; }
printf("¡¬n");
printf("----------------------------------------------------¡¬n");
printf("
ÇöÁ¦ Á¢±Ù ÁßÀÎ µ¥ÀÌŸ º£À̽º : %s¡¬n", dbname);
printf("
Á¸ÀçÇÏ´Â Å×À̺íÀÇ ¼ö :
%d¡¬n", totaltb); printf("----------------------------------------------------¡¬n");
printf("
¹ø È£ Å×À̺í
À̸§¡¬n");
printf("--------------------------------------------------------¡¬n");
for(counter=0;
counter<totaltb; counter++)
printf(" %3d %s¡¬n",
counter+1, tblist[counter]);
printf("-----------------------------------------------------¡¬n");
printf("Á¢±ÙÇÒ
Å×À̺íÀ» ÀÔ·ÂÇϼ¼¿ä[¹øÈ£,0(Àü¸Þ´º))] : "); scanf("%d",
&utb); getchar();
}
if(utb!=0){
//
//
Å×ÀÌºí³»¿¡ Çʵå Á¤º¸¸¦ ¾Ë¾Æ³½´Ù. //
printf("ÀÔ·ÂÇϽÅ
¼ýÀÚ´Â %d ¹øÀÔ´Ï´Ù. ¡¬n", utb); strcpy(tbname,
tblist[utb-1]); printf("Áö±Ý
%s Å×À̺íÀ» Á¢±Ù Áß ÀÔ´Ï´Ù.¡¬n¡¬n", tbname); if(!(rs=msqlListFields(sockdes,
tbname))){ printErrMsg();
exit(1);
}
else{
counter=0;
printf("¡¬n");
printf("-------------------------------------------------¡¬n");
printf("
ÇöÁ¦ Á¢±Ù ÁßÀÎ µ¥ÀÌŸ º£À̽º : %s¡¬n", dbname);
printf("
ÇöÁ¦ Á¢±Ù ÁßÀÎ Å×À̺í :
%s¡¬n", tbname); printf("-------------------------------------------------¡¬n");
printf("
¹ø È£ Çʵå À̸§ ÇʵåÇü
Çʵå±æÀÌ ÇʼöÅ°
Unique À妽º ¡¬n"); printf("-------------------------------------------------¡¬n");
while((mfield=msqlFetchField(rs))){
printf("
%3d %-13.13s %-7.7s %6d %s¡¬n",
counter+1, mfield->name, ¡¬
fieldtype(mfield->type),
mfield->length, keytype(mfield->type, mfield->flags));
counter++;
}
printf("-------------------------------------------------¡¬n");
}
printf("¿£ÅÍÅ°¸¦
ÀÔ·ÂÇÏ½Ã¸é µ¥ÀÌŸ º£À̽º ¸Þ´º·Î µ¹¾Æ °©´Ï´Ù...¡¬n¡¬n");
}
else
break;
}while(tolower(getc(stdin))!=
0x1C); } }while(udb!=0);
// // mSQL 2.0
µ¥ÀÌŸ º£À̽º ½Ã½ºÅÛ°úÀÇ Á¢¼ÓÀ» Á¾·áÇÑ´Ù. //
msqlClose(sockdes); printf("%s
: mSQL 2.0 ¼¹ö¿¡¼ Á¢¼ÓÀ» Á¾·á ÇßÀ¾´Ï´Ù.¡¬n", hostname);
free(hostname);
printf("¡¬n¡¬n");
printf("-------------------------------------------------------¡¬n");
printf(" mSQL
2.0 ºê¶ó¿ìÀú v0.7 À» »ç¿ëÇØ Áּż ´ë´ÜÈ÷ °¨»çÇÕ´Ï´Ù.¡¬n");
printf("-------------------------------------------------------¡¬n");
printf("¡¬n¡¬n¡¬n"); }
3. ¸¶Ä¡¸ç..
ÀÌ ¹øÈ£¿¡¼´Â mSQLÀÇ API¿¡ ´ëÇÏ¿© ¾Ë¾Æ º¸¾Ò´Ù.
¸¹Àº sampleÆÄÀϵéÀ» ½Ç¾î ½ÇÁ¦ÀûÀ¸·Î ÀÌÇظ¦ ³ôÀÌ·Á°í ÇßÀ¸³ª ºÎÁ·ÇÑ
¸éÀÌ ¸¹¾Ò´ø °ÍÀ¸·Î »ý°¢ÀÌ µç´Ù. ´ÙÀ½ È£¿¡¼´Â Web°ú ¿¬µ¿ÇÏ´Â
°£´ÜÇÑ ¿¹Á¦¸¦ º¸À̱â·Î ÇÑ´Ù.
¡ã top
|