

³o¬O¤@½g±qDr. Dobb¡¦s Sourcebook(¤¤ë/¤»¤ë1997¦~)ªºDatabase Developer±MÄæ ½Ķ¹L¨Óªº¤¤¤åª©¡C³o½g¤å³¹¬O±qDatabase Magic with Java(ISBN 0-13-889254-7 Prentice-Hall PTR)ºK¿ý¤U¨Óªº¡C¥»¤å¤¤ªºJava½d¨Òµ{¦¡¥i¥H¦bDr. Dobb¡¦sªººô¯¸ (http://www.ddj.com)¤¤§K¶O¤U¸ü¡C
ª©Åv©Ò¦³ ½¦L¥²¨s 1997, Ken North.
ODBC, JDBC¥H¤Î¶Â²°¤lªº»Ý¨D §@ªÌ: Ken North ½Ķ: Trilogy Technology Internatioal ¦b§Ú¼g³o½g¤å³¹®É, ¤@¨Ç¦b§Ú¨Æ·~¦´Á©Ò¹w¨£ªº²z©À³£¤w¸g¤@¤@¦¨¬°¨Æ¹ê¡CDonald Knuth ªñ¤é¥¿¦b¼¶¼g¤@¥»¹q¸£µ{¦¡ÃÀ³Nªº®Ñ¡C²³©Ò©Pª¾ George Foreman ¬O¦ì²Ä¤@¬yªº «¶q¯Å®±¤ý, Mick Jagger, Eric Clapton ¥H¤Î Tina Turner ³£¬O«D±`¨üÅwªïªºªíºt ªÌ, IBM¬O¥Ø«e¹q¸£¬É¼Æ¤@¼Æ¤Gªº¤½¥q¡C
¡§Plus ca change, plus c¡¦est la meme chose.¡¨ ¤µ¤Ñ¦pªG§ÚÌn§ä¤@Ó´yz¦³Ãö¸ê®Æ®wµ{¦¡¼¶¼gªº¦r²´, ¬O¤£¬O¸g±`³£±q ¡¨±`¼Æ¡¨ (constant) ³oÓ¦r¶}©l?¤W±¨º¥yªk¤åªº·N«ä´N¬O²ø¤l©Ò»¡¡u¸UÅܤ£Â÷¨ä©v¡v, ³o¤£´N ¬O¤µ¤Ñ¸ê®Æ®wµ{¦¡¶}µoªÌ³Ì¦nªº¤ß²z¼g·Ó?
¦pªG±z´¿¸g¨Ï¥ÎC©ÎC++»y¨¥¼¶¼gSQLªºµ{¦¡, ±z¥i¯à¹ï¨Ï¥Î Header ÀÉ®×»Pinclude ¡¨±`¼Æ¡¨(constants)´N¤£·|·Pı¯¥Í¡C¤@¨Ç²³æªº¨Ò¤l, ¦p: ¦bInformix ESQL¤¤¨Ï¥Î SQLTYPES.HÀÉ®×, ©Î¬O¦bSybase Open Client CT-Library¤¤¨Ï¥Î CSTYPES.H ÀɮסC¦p ªG§Q¥Î Oracle Call Interface ¼¶¼gµ{¦¡ , ±z¥i¯à·| include ¤@Ó header ÀÉ®×¨Ó ©w¸q oopen(), oclose(), ologon() ©Î¤@¨Ç¨ä¥¦ªº¨ç¦¡¡C°²¦p±N¤@¨Ç°T®§«O«ù¡¨±`¼Æ¡¨ ªº§ÎºA¦A³z¹L HeaderÀɮתº¤è¦¡»Pµ{¦¡µ²¦X¶i¦Ó½sĶ, ³o¼Ë°µ¹ï¤U¤@¥N¦³¥ô¦ó¦n³B¶Ü? Åý§ÚÌ·Q·Q¦blisting 1¤¤ªºHeaderÀÉ®×:
Listing 1 CONSTANTS.H char *CurrentKnuth WritingProject = ¡§The Art of Computer Programming¡¨; #define IsClaptonStar True #define IsForemanChamp True #define NewMustangPrice 2465.
°²¦p§ÚÌ¥u¬Ý«e¤T¦æ, §A·|µo²{³o¨Ç¡¨±`¼Æ¡¨¦b´X¤Q¦~¥H«e©Î¦b¤µ¤Ñ©Ò¥Nªíªº·N«ä ³£¬O¦³·N¸qªº¡C¦ý¬O, ³Ì«á¤@¦æ«o´£¿ô§ÚÌ, ¨Ã«D©Ò¦³¨Æª«³£¬O¤@¦¨¤£Åܪº¡C§ÚÌ¥²¶· n±N©Ò¦³¨Ï¥Î¨ì³oÓHeaderÀɪºì©lµ{¦¡«·s½sĶ¡C¤]³\±z·|ÃhºÃ, ¤W±³oÓ¨Ò¤l¬O§_ ¥Nªí§Ú̦b¶}µo¸ê®Æ®w¦s¨úµ{¦¡®É³£·|µo¥Í¬Û¦Pªºª¬ªp? Åý§Ú̦Ҽ{¤U±¤@¨Ç¨Ò¤l:
¤@Ó©w¸qParadox 3.0¸ê®Æ«¬ºAªºHeaderÀÉ®×, ¹ï¤µ¤ÑªºParadox¨Ó»¡¤w¸g¬O¹L®É¤F ¡C·íODBC 3.0¨ú¥N¤F¦´Áªºª©¥»«á, ¤@Óµ{¦¡¤¤¤@¦ê¦CªºODBCÀ³¥Îµ{¦¡¤¶±¨ç¼Æ¤]±N± ¹ï¹L®É©Î¤£¦A¾A¥Îªº©R¹B¡C
¹ï¤µ¤éªº¸ê®Æ®wºÞ²z¨t²Î¦Ó¨¥, §A¥i¥H»¡¸ê®Æ«¬ºA, À³¥Îµ{¦¡¤¶±, ¸ê®Æ®w©Ò´£¨Ñ ªº¥\¯à¨Ã¤£¬O¤@ºØ¡¨±`¼Æ¡¨¡C¥Ñ©ó¸ê®Æ®wºÞ²z¨t²Î¥«³õÄvª§«D±`¿E¯P, ©Ò¥H¸ê®Æ®w¼t°Ó ¥²¶·¤£Â_ªº±À¥X¨ã¦³·s¥\¯àªº·s²£«~¡C³Ìªñ¿³°_¤@ªÑ¼ö¼é³y¦¨Á|¥@ª`¥ØµJÂIªººô»Úºô¸ô ´N¬O¤@ӫܦnªº¨Ò¤l¡C¦b³oªÑ¼ö¼éªºÀ£¤O¤U, ¢¨Ï¼t°Ó¥²¶·¼W¥[·sªº¥\¯à¨ì SQLªº²£«~ ¤¤¡C¥Ñ©ó¤j²³¹ï°ê»Úºô»Úºô¸ôªº¿³½ì, ³y¦¨¸ê®Æ®w¼t°Ó§âª`·N¤O¶°¤¤¦b³æ¤@³sµ²©Ê, Â× ´Iªº¸ê®Æ«¬ºA¤ä´©, ¥H¤Î¦p¦ó±NHTML®æ¦¡¶Ç°e¨ìºô»Úºô¸ô¨Ï¥ÎªÌªºÂsÄý¾¹¤W¡C¦b¦nªº¤@ ±¨Ó¬Ý, ºô»Úºô¸ô´£ª@¤F³sµ²³nÅ骺·¦æ, ¦b¥t¤@¤è±¨Ó¬Ý, ¥¦¤Ó±j½Õ¡¨¸U¥Î¡¨ªºÆ[©À, ¦Ó³o¨ÇÆ[©À¦b¤µ¤Ñ¸ê®Æ®wºÞ²z¨t²Î²£«~©Î¬O¦h«¸ê®Æ®wÀ³¥Îµ{¦¡¤¶±¤¤¨Ã¤£¬O³Ì¤Á¹ê»Ú ªº¤@ºØµ{¦¡·§©À¡C
Åý§Ú̦Ҽ{¤U±SQL¸ê®Æ®w¥H¤ÎÀx¦s¨ç¦¡(Stored Procedures)ªºª¬ªp:
©Ò¿×Àx¦s¨ç¦¡, ´N¬O¤@²Õ¸g¹L³Ì¨Î¤Æ³B²z«áÀx¦s¦b¸ê®Æ®w¤¤ªº SQL±Ôz©ÎºÙ¤§¬°¼Ò ²Õ¡C¥¦Ì³Q©ñ¸m©ó¥D¾÷ºÝ, «È¤áºÝªºµ{¦¡¥i¥H¦Û¥Ñ¥h¦s¨ú¥¦¡CÁöµMÀx¦s¨ç¦¡¥i¯à·|¦¨¬° ¥¼¨ÓSQL3ªº¼Ð·Ç, ¦ý¬O¦b¥Ø«eªº SQL¼Ð·Ç¤¤©|¥¼±N¥¦¯Ç¤J¨ä¤¤¡C´«¥y¸Ü»¡¹ïÀx¦s¨ç¦¡ªº ¤ä´©µ{«×¥i¯à·|¦]´£¨Ñ¼t°Óªº¤£¦P¦Ó¦³¤£¦Pªº§ïÅܩήt²§¡C³oºØ±¡ªp¬Æ¦Ü·|µo¥Í¦b¦P¤@ ²£«~ªº¤£¦Pª©¥»¤W¡C¨Ò¦p, Watcom SQL 3.2ª©¥»¨Ã¤£¥]§tÀx¦s¨ç¦¡, ¦ý¬O¦bWatcom 4.0 ¥H¤ÎSybase SQL Anywhere´N¤ä´©Àx¦s¨ç¦¡¡C¦pªG±zªºÀ³¥Îµ{¦¡ì¨Ó¬O§Q¥Î Watcom 3.2 ¶}µoªº, ±z¥i¯à´N¥²¶·±N©Ò¦³»PÀx¦s¨ç¦¡¦³Ãöªºµ{¦¡«·s×§ï¡C³o¨Çק藍¨£±o¬O±z©Ò »Ýn§@ªº³Ì«á¤@¦¸¤u§@, ¦]¬° SQL¼t°ÓªºÄvª§¸}¨B¥¿§Ö³tªº©¹¨Ï¥ÎJava§@¬°Àx¦s¨ç¦¡µ{ ¦¡»y¨¥ªº¤è¦V¶i¦æ¤¤¡C
¶Â²°¤l©M¦h«¸ê®Æ®wÀ³¥Îµ{¦¡¤¶±
ÀHµÛ¸ê®Æ®w²£«~ª©¥»ªº¤£Â_ªº§ó·s, µ{¦¡¶}µoªÌ¥²¶·¤£Â_ªº§ó·sì¥ý¶}µoªºµ{¦¡, ¥H«K¥R¥÷¹B¥Î·sªº¸ê®Æ«¬ºA, ·sªºÀ³¥Îµ{¦¡¤¶±¥H¤Î·sªº¥\¯à¡C¤@¨Ç¦³¸gÅ窺µ{¦¡¶}µo ªÌ¸g±`·|¹Á¸Õ¦³¨t²Îªº±Nµ{¦¡¹º¤À¦¨¤£¦P¼h¦¸ªº¼Ò²Õ, ¬Æ¦Ü±N¸ê®Æ®w¬Ý¦¨¤@Ӷ²°¤l, ¥H´Á¾¨¶q´î¤Öµ{¦¡×§ïªº¤u¤Ò¡C
¤@Ó²z·Qªº¶Â²°¤l¬O¸Ñ¨M¦UºØ¤£±`ºA©Ê»P¶}µo®t²§©Êªº¤@ºØ¤è®×¡C¦]¬°¥¦·|±N¨ü¨ì ¶}µo®t²§¼vÅTªºµ{¦¡½X©t¥ß¦¨¤@Ó²z·Qªº·§©À¼h¦¸, ©Ò¥H¥¦¸g±`¬O¼¶¼g¤@Ó¦b¦h«¥¥x ¤W°õ¦æ³nÅ骺¸Ñ¨M¤è®×¡CUNIX ®Ö¤ß¥H¤ÎWindows NTµwÅé·§©À¼h(HAL)³£¬O«Ü¨å«¬ªº¶Â²° ¤l¨Ò¤l¡C¦b³o¨Ç§@·~¨t²Î¤¤¤j³¡¥÷ªºµ{¦¡³£¨ã¦³¥iÄâ±a©Ê, ¦]¬°¥¦§â¨º¨Ç»PµwÅ馳Ãöªº ÅÞ¿è³£¬Ý¦¨¤@¥u¶Â²°¤l¡C¤@¨ÇµêÀÀ¾÷¾¹, ¨Ò¦pJava VM ´N¬O¨Ì¾Ú³oºØì²z³]pªº, ©Ò¥H Java classes´N¨ã³Æ¦³µwÅé¿W¥ß»P¥iÄâ±aªº¯S©Ê¡Cµ{¦¡¶}µo¤Hû¥i¥H±NJavaÀ³¥Îµ{¦¡¤¶ ±À³¥Î¦bJava VM¤W, ¥H¤Î¤@Ө㦳³æ¤@¦æ¬°¸ó¥¥xªº¶Â²°¤l¡C(Javaªºµo®iÁö¥¼¿²¤Q¥þ ¤Q¬üªº¹Ò¬É, ¦ý¬O¦b¤£¤[ªº±N¨ÓJava¶Õ¥²·|º¡¨¬¶Â²°¤lÄYVªº»Ý¨D)¡C
¸ê®Æ®wµ{¦¡¶}µo¤Hû±`±NODBC¥H¤ÎJDBC·í§@¤@ºØ¦s¨úµêÀÀ¸ê®Æ®wªºÀ³¥Îµ{¦¡¤¶±¡C JDBC¥H¤ÎODBC¥i¥H¹B§@¦b¦UºØ¤£¦Pªº¸ê®Æ®w, ¦UºØ¤£¦Pªº§@·~¨t²Î¡CÁöµMODBC¥H¤ÎJDBC ¤ä´©¦h«¸ê®Æ®w©M¦h«¥¥x, ¦ý¬O¦b¥¦Ì©|¥¼ÂX®i¨ìÀ³¥Î¶Â²°¤l²z·Qªº·§©À¤§«e, ¥¦Ì ¤´¤£µ¥©óJava¡CJava»P¸ê®Æ®wÀ³¥Îµ{¦¡¤¶±¤§¶¡ªº®t§O¦b©ó, ¤@Ó¸ê®Æ®wµ{¦¡¶}µo¤Hû ¤£¯à°÷´Á«Ý¤@ºØ²Î¤@ªº³æ¤@¦æ¬°µo¥Í¦b¤£¦Pªº¥D¾÷¥H¤Î¸ê®Æ®w¤W¡C
¨Ï¥Î¥iÄ⦡ SQL ¼¶¼g¤@Ó¸ó¥¥xµ{¦¡·|¾D¹Jªº°ÝÃD»P¥Ø«e§Q¥Îºô»Úºô¸ôÂsÄý¾¹¤Î HTML¨Ó¼¶¼g©Ò¾D¹Jªº°ÝÃD¨Ã¤£¬Û¦P, ±z¥²¶·¦b¨Ï¥Î·~¬É¼Ð·Ç¥H´Á±o¨ì³Ì¤j¥iÄâ©Ê©Î¥R¥÷ §Q¥ÎÂX¥R¥\¯à¦ÓÄ묹¥iÄâ©Ê¤GªÌ¤§¶¡§@¤@§à¾Ü¡C¨Ï¥ÎJDBC©MODBC¦³¤@Ó¦@¦PªºÀuÂI´N¬O, ¥¦Ì³£¬O¦h«¸ê®Æ®wÀ³¥Îµ{¦¡¤¶±¡C©Ò¥H¥¦Ì¨ã³Æ¤¹³\±zªºµ{¦¡¾A¥Î¦b¥¦ªºÀô¹Ò¥H¤Î¦b ¨Ï¥Î¥\¯à¤W§@¤£¦P¿ï¾Üªº¥\¯à¡C
°£«D¬OÀ³¥Î¦b«D±`²³æªºÀ³¥Îµ{¦¡, ±z³Ì¦n¤£n±N¸ê®Æ®wºÞ²z¨t²Î·í¦¨¤@Ó¤w©w¸q ¦nªº¶Â²°¤l¨Ó¼¶¼g ODBC ©Î JDBC µ{¦¡¡C¤@¨Ç¥i¸ü¤Jªº¸ê®Æ®wÅX°Êµ{¦¡, ¥¦Ì¤¹³\JDBC ©MODBCµ{¦¡³s±µ¨ì¦UºØ¤£¦Pªº¸ê®Æ®w, ¦ý¬O«oµLªk«OÃÒÅX°Êµ{¦¡, ºô¸ô¶Ç¿é¥H¤Î SQL¤Þ Àº³£¯à°÷¥¿±`ªº¹B§@¤£·|µo¥Í°ÝÃD¡C¨Ò¦p: ODBC´£¨Ñ¤@Ө禡¤¹³\±z±N³sµ²ªºÄݩʳ]©w ¬°«D¦P¨B³B²z (Asynchronous Processing)¡C©Ò¿×«D¦P¨B¼Ò¦¡¬O«ü¤@ӫȤáºÝµ{¦¡®i¥Ü «DªýÂ_(Non-blocking)¦æ¬°, Åý¨Ï¥ÎªÌ¥i¥H¦bµ¥«Ý¤@Ó¬d¸ß«ü¥O§¹¦¨¤§«e¥h§@¨ä¥Lªº¤u §@¡C§Y¨Ï±z±N³sµ²ªºÄݩʳ]©w¬°«D¦P¨B³B²z¼Ò¦¡, ¦ý¬O¨Ã¤£«OÃÒ©Ò¦³³sµ²ªº¸ê®Æ®w³£·| ¦Û°Ê¦b«D¦P¨B¼Ò¦¡¤U¹B§@¡C¦]¬°¦³¨Çºô¸ôµ{¦¡®w¨Ã¤£¤ä´©«D¦P¨B³B²z, ©Ò¥HÁöµM§A©I¥s ODBCªº¨ç¦¡³]©w¬°«D¦P¨B¼Ò¦¡, ¨Ã¤£¯à§JªAºô¸ôµ{¦¡®wªº¨î¡C
¦Û§Ú¬Ù¹î»P¦Û§Ú½Õ¾Aªºµ{¦¡³]p²ß©Ê
¦b§Úªº¸ê®Æ®wµ{¦¡¼¶¼g¬ã°Q·|¤¤, §Ú¸g±`¹Á¸ÕªÈ¥¿¤@Ó¤j®a±`¥Çªº¿ù»~Æ[©À¡ÐJDBC ¥H¤ÎODBC¨Ã¨S¦³§¹¥þ¿í´`¼Ð·Ç¡C¦³¨Çµ{¦¡¶}µo¤Hû±`·|¦³Ó¿ù»~ªºÆ[©À, »{¬°¥ô¦óµ{¦¡ ¥un©I¥sODBC©ÎJDBC´N¯à«OÃÒ¸ê®Æ®wªº¦æ¬°¥¿±`¡C¨Ò¦p: ODBC 2.0©w¸q¤F19ºØ¸ê®Æ«¬ºA , ¦³¨Çµ{¦¡³]p®v´N»{¬°¥LÌ¥i¥H¦b¦UºØ¤£¦PªºÅX°Êµ{¦¡©M¸ê®Æ®w¤¤¨Ï¥Î¥ô¦ó¤@ºØ«¬ºA ¡C¨Æ¹ê¤W¤@ÓÅX°Êµ{¦¡©M¸ê®Æ®w¥u»Ýn¤ä´©¤@ºØ¡¨¦r¤¸¡¨«¬ºA, ´N²Å¦XODBC SQL»yªk¤¤ ³Ì°ò¥»ªº»yªk¡C
ODBC ¥H¤Î JDBC ¨Ã¤£±j¨î³W©w©Ò¦³ªº¥\¯à³£¥²¶·¤ä´©, ¨Æ¹ê¤W¥¦·|±N¸ê®Æ®w»PÅX °Êµ{¦¡©Ò´£¨Ñªº¥\¯à¥þ³¡Åý±zª¾¹D, ±z¥i¥H§Q¥Î ODBC ©Ò´£¨Ñªº¨ç¦¡©Î¬O JDBC ©Ò´£¨Ñ ªº methods, ¦b±zªºµ{¦¡³sµ²¨ì¸ê®Æ®w«á, n¨D¸ê®Æ®w´£¨Ñ±z©Ò¦³¤ä´©ªº¥\¯àªº¸ê°T¡C µ{¦¡¶}µo¤Hû¥i¥H§Q¥Î¡¨µ{¦¡°õ¦æ®É½Ð¨D¡¨ªº§Þ¥©©Î¦Û§Ú½Õ¾Aµ{¦¡³]p²ß©Ê¤G¤è±¨Ó°t ¦X¥Ø«e SQLªº»yªk, ¸ê®Æ«¬ºA, ¥H¤ÎÀ³¥Îµ{¦¡¤¶±¡C¦p¦¹¤@¨Ó, ¦]¬°±zªºµ{¦¡¬O¦b°õ¦æ ®É§@³o¨Ç¨Æ, ¦Ó«D¦b½sͮɧ@³o¨Ç¨Æ, ©Ò¥H±z«Ü¥i¯à¤£»Ýn¦]¬°¸ê®Æ®wª©¥»ªº§ïÅܹï±z ªºµ{¦¡§@¥ô¦ó×§ï¡C¦ý¬O³o¨Ã¤£«Oµý¨C¦¸¸ê®Æ®wªºª©¥»§ïÅܮɱz³£¥i¥H¤£×§ïµ{¦¡, ¦ý ¬O±z¤£»Ýn«¼gµ{¦¡ªº¾÷·|«o¬O«D±`¤j¡C¦Û§Ú½Õ¾Aµ{¦¡³]p²ß©Ê¹ï©ó¼¶¼g²§½è¸ê®Æ®w»P ÅX°Êµ{¦¡ªºÀ³¥Îµ{¦¡, ¬O«D±`¦³¥Îªº¡CCrystal Report¥H¤Î·L³nªºMicrosoft Access³£ ¬OÀ³¥Î¦Û§Ú½Õ¾AÅ޿誺«Ü¦n¨Ò¤l¡C¥¦Ì³£ÄÝ©ó«È¤áºÝµ{¦¡, ¥i¥H³sµ²¨ì¦UºØ¤£¦Pªº SQL ¸ê®Æ®w¦øªA¾¹¡C
ODBC ¬O¤@ºØ¥i¥H³z¹L¨ç¦¡¨Ó¦Û§ÚÀˬd©Ò¤ä´©ªº¥\¯à (SQLGetInfo) , ¸ê®Æ«¬ºA (SQLGetTypeInfo) , À³¥Îµ{¦¡¤¶± (SQLGetFunctions) ¥H¤Î¨ä¥¦¦³Ãö¸ê®Æ®w¸ê°Tªº©I ¥s¤¶±¡C JDBC ¬O¥ÑÀ³¥Îµ{¦¡¤¶±¥H¤Î Classes ©Ò²Õ¦¨, ¥¦¤¹³\µ{¦¡¶}µo¤Hû¨Ï¥Îª« ¥óªº¤è¦¡¨Ó¦s¨ú SQL ¸ê®Æ®w¡C¤£½×±z¬O¨Ï¥Î ODBC ©Î¬O JDBC ¤¶±¥h¸ê®Æ®w¦s¨ú¸ê®Æ, ¶}µoªÌ³£¬O³z¹L SQL «ü¥O°w¹ï¬d¸ßµ²ªG¨Ó¹B§@¡C·í±zµo²{ JDBC ¨Ï¥Î¤@¨Ç¨Ò¦p³sµ² (java.sql.connection) ©Î±Ôz (java.sql.statement) ªºª«¥ó®É, ±z¤£¥²Ä±±oÅå³Y¡C ODBC ¨Ã¤£´£¨Ñª«¥ó¥H¤Î¼h¯Å (Classes), ¦ý¬O¥¦¨Ï¥Î±±¨î¤¸ (handles) ¨Ó«OÅ@¹ï³sµ² »P±Ôz¥H¤Î¨ä¥L¬ÛÃö¸ê°Tªº±±¨î¡C
JDBC ªº¼h¯Å¯à°÷´£¨Ñ¦³Ãö¸ê®Æ®w¤º³¡«Øºc¥H¤Î¬d¸ßµ²ªGªº¸Ô²Ó¸ê°T¡C JDBC ¤¤ªº metadata ¼h¯ÅÅ((java.sql.DatabaseMetaData) ±N©Ò¦³³o¨Ç¸Ô²Óªº¸ê°T¥]¸Ë¦b¼h¯Å¤º, ´N¬Û¹ï©ó©I¥sODBC¨ç¦¡¦pSQLGetTypeinfo¥H¤ÎSQLGetInfo«á©Ò¶Ç¦^ªºÈ¡C²¨¥¤§, ´N¬O §Q¥Î³oÓ¼h¯Å©Ò´£¨Ñªº¸ê°T¨Ó§PÂ_¦UÓ¸ê®Æ®w¤§¶¡ªº®t²§¡CJDBC metadata methods ¥i ¥H¶Ç¦^¾ã¼Æ,¦r¦ê, ¥¬ªLÈ¥H¤Î¨ä¥L¸ê®ÆºA¡CJDBC methods´N¹³ ODBC¨ç¦¡¤@¼Ë, ¥i¥H±N metadata¥H¬d¸ßµ²ªGªº«¬¦¡¶Ç¦^¨Ó¡CODBC»PJDBCªºµ{¦¡¸g±`¨Ï¥ÎÃþ¦üªºµ{¦¡³]p¼Ò¦¡¨Ó ³B²z¸ê®Æªº¬d¸ß¥H¤Î¸ê®Æ®w¤º³¡«Øºc¸Ô²Ó¸ê®Æªº¬d¸ß¡C
¸ê®Æ®w«Øºc¸ê°T(Metadata)
µ{¦¡¶}µo¤Hû¦b¼¶¼g»P¦h«¸ê®Æ®w³sµ²ªºÀ³¥Îµ{¦¡®É, ¤d¸U¤£n©¿µø¤@¥ó¨Æ¹ê¡Ð¸ê ®Æ«¬ºA¨Ã¤£¬O¤@¦¨¤£Åܪº¡C³o¬O¤@Ó¤£Åܪº¯u²z, ±z¥i¥H¦b¦UºØ±¡ªp¤U±o¨ì¬Û¦Pªºµ²½× ¡C¤£ºÞ¬O¦b¤£¦Pªº²£«~¤§¶¡§@¤ñ¸û, ¬Æ¦Ü¦b¬Û¦P²£«~¤£¦Pª©¥»¤§¶¡§@¤ñ¸û³£·|µo²{³oºØ ±¡§Î¡C¨Ì¾Ú³oӨƹê, ¥i¥H«Ü²M·¡ªºª¾¹D, ¦pªG§Ú̪ºµ{¦¡¦b¼¶¼g®É±N¤@¨Ç¸ê®Æ«¬ºA¼g ¦º¦bµ{¦¡¤¤, ¨º»ò±zªºµ{¦¡±N¦b«Üµuªº®É¶¡¤ºÅܦ¨¹L®É¤£¯à¨Ï¥Î¡C±zÀ³¸ÓÁ×§K±N¸ê®Æ«¬ ºA¥HÀRºAªº¤è¦¡¼g¦º¥H¤Î½sͦbµ{¦¡¤¤, ±zÀ³¸Ó¦Ò¼{¨Ï¥ÎODBC©ÎJDBC©Ò´£¨Ñªº¦bµ{¦¡°õ ¦æ®É¨M©w¸ê®ÆºAªº¥\¯à¨Ó¼¶¼gµ{¦¡¡CJDBC Database MetaData¼h¯Å©Ò´£¨Ñ¦³Ãö¸ê®Æ«¬ºA ªº¤è¦¡»P ODBC SQL GetTypeInfo¨ç¦¡´£¨Ñªº¤è¦¡«D±`Ãþ¦ü¡C ¥L̳£·|±N¦³Ãö¸ê®Æ«¬ºA ªº¸ê°T©ñ¦bÄæ¦ì¤¤¥H result set ªº«¬¦¡¶Ç¦^¡C¨ä¤¤³Ì«nªº¤@ÓÄæ¦ì¬O¸ê®Æ«¬ºA¦WºÙ (TYPE_NAME), ¦]¬°³oÓ¦WºÙ´N¬O±z¥²¶·¨Ï¥Î¦b SQL ±Ôz¤¤ªº¥¿½T¦WºÙ¡CODBC »P JDBC ¤ä´©ªº¸ê®Æ«¬ºA¥]¬A: character, binary, date, decimal, double, float, integer, numeric, real, time, timestamp, long varchar µ¥¡C·í±zªºµ{¦¡³s±µ¨ìÅX°Êµ{¦¡«á, ¬d¸ßµ²ªG(Result set)·|§i¶D±z¸ê®Æ®w¤ä´©¨º¨Ç¸ê®Æ«¬ºA¡C¦b¶Ç¦^ªº¬d¸ßµ²ªG¤¤ÁÙ¥]¬A ¸ê®Æ«¬ºAªº³Ì¤j /³Ì¤p¦³®Ä¦ì¼Æ, ³Ì¤jºë½T«×¥H¤Î¦³®Ä¦ì¼Æ¬O§_¾A¥Î©ó¬Y¤@¸ê®Æ«¬ºA¡C ¬d¸ßµ²ªG¤]·|«ü¥Ü¬YºØ¸ê®Æ«¬ºA¬O§_±µ¨üNULL«¬ºA, ¬O§_¦r¥À¤j¤p¼g¥Nªí¤£¦P·N¸q, ¬O §_ÄÝ©óMoney«¬ºA, ¥H¤Î³oºØ¸ê®Æ«¬ºAn¦p¦ó¥Î¦bSQL WHERE±Ôz¤¤¡C¥t¥~ÁÙ¥]¬A¬Y¤@«¬ ºA¬O§_·|¦Û°Ê»¼¼W, ¬O§_¨ã³Æ¥¿t²Å¸¹, §í©Î³oºØ¸ê®Æ«¬ºA®Ú¥»¤£¤ä´©²Å¸¹¡C
§Y¨Ï±z¤w¸g¤F¸Ñ¨ìÀ³¥Îµ{¦¡¤¶±¦bµ{¦¡°õ¦æ®É´£¨Ñ¸ê®Æ«¬ºA¬ÛÃöªº°T®§, ±z¥i¯àÁÙ ·|ÃhºÃ³o»ò§@¦³¤°»ò¦n³B, ¦³¥²n³o¼Ë§@¶Ü? ¬°¤FÅýheadingsÀɮק󦳼u©Ê¦Ó¥BÁ×§K ªºµ{¦¡¹L®É¤£¾A¥Î, ¸ê®Æ®w²£«~®É±`§ïÅÜ·sª©¥», ¦b·sªºª©¥»¤¤³q±`·|¼W¥[§óÂ×´Iªº¸ê ®Æ«¬ºA¡C¦pªG±zµ{¦¡¤¤ªº¡¨±`¼Æ¡¨«¬ºA¬O¦bµ{¦¡½sͮɍM©wªº, ±z±N·|µo²{·í±z©Ò¨Ï¥Î ªº¸ê®Æ¤S¼W¥[·sªº«¬ºA¦b·sªºª©¥»¤¤®É, ±zªºµ{¦¡«Ü¥i¯à»Ýn«·s½sĶ»P³sµ²¡C
¥t¥~, ¦pªG±zªºÀ³¥Îµ{¦¡¥²¶·n³sµ²¨ì¤ä´©¦UºØ¤£¦P¸ê®Æ«¬ºAªº²§½è©Ê¸ê®Æ®w, ±z ¤]¥i¯à·|½í¨ìÃþ¦üªºª¬ªp¡CÁÙ¦³¤@ºØ¥i¯àµo¥Íªº±¡ªp¬O, ±z»Ýn¼¶¼g¤@Óµ{¦¡¥¦·|¨Ì¾Ú ¨Ï¥ÎªÌªº©w¸q¨ì¤£¦Pªº¸ê®Æ®w¥h²£¥Íªí®æ (Table)¡Cn¥h«Ø¥ß SQL CREATE TABLE «ü¥O ¤§«e, ±zªºµ{¦¡¥²¶·¥ýª¾¹Dªí®æ¤¤¨C¤@Äæ¦ìªº¸ê®Æ«¬ºA¦WºÙ¡C³o¨Ç¦WºÙ¥²¶·¬O±zªºµ{¦¡ ©Ò³s±µ¨ìªº¸ê®Æ®w©Ò¤ä´©ªº«¬ºA¤§¤@¡C¤@Ө嫬ªº§Þ¥©´N¬O¦b¿Ã¹õ¤WÅã¥Ü¤@Ó listbox, ¥Ñ¨Ï¥ÎªÌ¦Û¤v¿ï¾ÜÄæ¦ì©Ò©w¸qªº¸ê®Æ«¬ºA¦WºÙ¡C ¬°¤F«OÃÒ listbox ¤¤©Ò¦Cªº«¬ºA¤£¬O ¹L´Áªº, ±z¥²¶·¦bµ{¦¡°õ¦æ®É°ÊºAªº¥h²£¥Í listbox¤¤ªº¦UºØ«¬ºA, ¦Ó¤£n±N³o¨Ç«¬ºA ª½±µ¦bµ{¦¡¤¤©w¸q¡C¬°¤F¯à°÷°ÊºAªº²£¥Í listbox ¤¤ªº¸ê®Æ«¬ºA, ±z·|µo²{¤F¸Ñ ODBC SQLGetTypeInfo¨ç¦¡©Î JDBC getTypeInfo method ±N¹ï±z¦³«Ü¤jªºÀ°§U¡C
JDBC¸ê®Æ«¬ºA¦³Ãöªº½d¨Òµ{¦¡
Listing 2¬O¤@Ó®i¥Ü¦p¦ó¨Ï¥ÎJDBC DatabaseMetaData¼h¯Å¤¤getTypeInfo method ªº½d¨Òµ{¦¡ (TYPEINFO.JAVA)¡C¦]¬°¥¦¬O¤@ÓJavaÀ³¥Îµ{¦¡, ©Ò¥H¥¦¥]§t¤F¤@Ómain¼h ¯Å, ¬Û¹ï©ó¦bÂsÄý¾¹(Browser)¤¤°õ¦æ applet, ±z¥²¶·¨Ï¥ÎJava Virtual Machine¨Ó°õ ¦æTYPEINFO¡C¥Ø«e§Ú¥Î¨Ó±Ò°ÊJava VM°õ¦æTYPEINFOªº«ü¥O¦p¤U:
java -classpath E:\java\jdbc\classes;E:\lib;E:\lib\java\lib\classes.zip; GetTypes
TYPEINFO §Q¥ÎJDBC-ODBC¾ô±µ¾¹¥h³s±µ ODBC ªº¸ê®Æ·½, µM«á²£¥Í¤@Ó Instance, ¸Ì±¥]§tµÛ»P¸ê®Æ®w«Øºc¦³Ãöªº¦UºØ¸ê°T, ±µµÛ´N¦b¤@Ó°j°é¤¤§ì¨ú¦³ÃöÅX°Êµ{¦¡§Q¥Î jdbc:odbc:SSPer URL©Ò³s±µªº¸ê®Æ®w©Ò¤ä´©ªº¦UºØ¸ê®Æ«¬ºAªº¸ê°T¡C·í±z°õ¦æTYPEINFO®É, ¥¦·|§i¶D±z¸ê®Æ®w¤ä´©ªº©Ò¦³¸ê®Æ«¬ºA»P¦WºÙ¡CTYPEINFO ³s±µ¨ì©w¸q¦nªº¤@Ó¸ê®Æ·½, ¥¦¬O¤@Ó¦bºô¸ô¤Wªº·L³nªº SQL Server ¸ê®Æ®w, ¦pªG±z°õ¦æTYPEINFO¨Ã¥B³s±µ¨ì¤@Ó SQL Server ¸ê®Æ®w, ±z±N·|¬Ý¨ì¤ñ³s¨ìdBASE¸ê®Æ®w§ó¦hªº¦³Ãö¸ê®Æ«¬ºAªº¸ê°T¡C¦pªG ±z°õ¦æTYPEINFO¨Ã¥B³s±µ¨ì SQL Server ¸ê®Æ®w, ±z©Ò±o¨ì¦³Ãöªº¸ê®Æ«¬ºA¥]¬A¦³bit, image, timestamp, datetime¥H¤Îmoneyµ¥¸ê®Æ«¬ºA¡C
¤@Ó¤£§¹¬üªº¶Â²°¤l
¤@ӳ̲z·Qªº±¡§Î´N¬O¡Ð¶Â²°¤l§Þ³Nªº¹B§@´N¹³¬O¹q¾¹¥Î«~ªº´¡®y¡C±z¥un±Nµ{¦¡ ´¡¤J¤@Ó´¡®y, ¥¦´N¥i¥H°õ¦æ¦Ó¤£»Ýn¥ô¦óÃB¥~ªº´¼¼z, ¦pªG±z»Ýn¼¶¼g¤@Ó§¹¥þ³z³q ªºSQLµ{¦¡, ±z·|µo²{ ODBC¥H¤ÎJDBC¬O¤@ӫܦ³¥Îªº§Þ³N¡C¥¦Ì¨Ã¤£¦Ê¤À¤§¦Êªº«OÃÒ¯à ¹F¨ì¶Â²°¤lªº²z·Q, ¦Ó¥B¥¦Ì¬O¤£·|²£¥Í¬Û¹ï©óJavaÀ³¥Îµ{¦¡¤¶±©MJava VM ªº¶Â²°¤l ®ÄÀ³¡C¦ý¬O, µL½×¦p¦ó, ±z·|µo²{ODBC¥H¤ÎJDBC©Ò¥]§tªº¨ç¦¡©M methods¦b±zn¼¶¼g¤@ Ө㰪«×²¾´Ó©Êªº¸ê®Æ®wÀ³¥Îµ{¦¡®É¬O«D±`¦³¥Îªº¡C
§@ªÌ¤¶²Ð: Ken North¬O¦ì³nÅé¶}µo¤Hû, ¥L¼¶¼g¡BºtÁ¿¥H¤Î¥D«ù¦UºØ¬ã°Q·|¡C¥L¬ODr. Dobb¡¦s Sourcebook¥H¤ÎZDInternetªº±MÄæ§@®a¡C¥Ø«e¥¿¦b¬°Prentice-Hall PTR¤½¥q¼¶¼gDatabase Magic with ActiveX©MDatabase Magic With Java¡CKen¥ý¥Í¬OWindows Multi-DBMS Programming(John Wiley and Sons)³o¥»®Ñªº§@ªÌ, ³o¥»®Ñ¦³¤¤¤å½Ķ¥», ¥¦ªº¸¹½X¬OISBN 7-5053-3608-8¸¹¡C