ÀÀ¿ëÇÁ·Î±×·¥ °³¹ß ¾È³»¼­

Java¿¡ SQL¹® Æ÷ÇÔ

SQLJÀÇ Á¤Àû SQL¹®Àº SQLJÀý¿¡ ³ªÅ¸³³´Ï´Ù. SQLJÀýÀº Java ÇÁ·Î±×·¥ÀÇ SQL¹®¿¡¼­ µ¥ÀÌÅͺ£À̽º¿Í Åë½ÅÇÏ´Â µ¥ »ç¿ëÇÏ´Â ¸ÞÄ«´ÏÁòÀÔ´Ï´Ù.

SQLJ º¯È¯ ÇÁ·Î±×·¥¿¡¼­´Â ´ÙÀ½°ú °°Àº ±¸Á¶ ¶§¹®¿¡ SQLJÀý°ú SQL¹®À» ÀνÄÇÕ´Ï´Ù.

°¡Àå °£´ÜÇÑ SQLJÀýÀº ½ÇÇà °¡´É ÀýÀ̸ç #sql ÅäÅ«°ú °ýÈ£ ¾ÈÀÇ SQL¹® ¼øÀ¸·Î ±¸¼ºµË´Ï´Ù. ¿¹¸¦ µé¾î, Java ¸í·É¹®ÀÌ ÀϹÝÀûÀ¸·Î ³ªÅ¸³ª´Â À§Ä¡¿¡ ´ÙÀ½ SQLJÀýÀÌ ³ªÅ¸³¯ ¼ö ÀÖ½À´Ï´Ù. ¸í·É¹®ÀÇ ¸ñÀûÀº TAB Å×À̺íÀÇ ¸ðµç ÇàÀ» »èÁ¦ÇÏ´Â °ÍÀÔ´Ï´Ù.

   #sql { DELETE FROM TAB };

SQLJ ½ÇÇà °¡´É Àý¿¡¼­ °ýÈ£ ¾È¿¡ ³ªÅ¸³ª´Â ÅäÅ«Àº È£½ºÆ® º¯¼ö¸¦ Á¦¿ÜÇÑ SQL ÅäÅ«ÀÔ´Ï´Ù. º¯È¯ ÇÁ·Î±×·¥¿¡¼­ ½Äº°ÇÒ ¼ö ÀÖµµ·Ï ¸ðµç È£½ºÆ® º¯¼ö´Â ÄÝ·Ð ¹®ÀÚ·Î ±¸ºÐµË´Ï´Ù. SQL ÅäÅ«Àº SQLJ ½ÇÇà °¡´É ÀýÀÇ °ýÈ£ ¹Û¿¡¼­ ³ªÅ¸³ªÁö´Â ¾Ê½À´Ï´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ Java ¸Þ¼Òµå´Â SQL Å×ÀÌºí¿¡ ±× Àμö¸¦ »ðÀÔÇÕ´Ï´Ù. ¸Þ¼Òµå º»¹®Àº È£½ºÆ® º¯¼ö x, y ¹× z¸¦ Æ÷ÇÔÇÏ´Â SQLJ ½ÇÇà °¡´É Àý·Î ±¸¼ºµË´Ï´Ù.

   void m (int x, String y, float z) throws SQLException
   {
       #sql { INSERT INTO TAB1 VALUES (:x, :y, :z) };
   }

ÀϹÝÀûÀ¸·Î SQL ÅäÅ«Àº ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÏÁö ¾ÊÀ¸¸ç(ÀÌÁß ÀοëºÎÈ£·Î ºÐ¸®µÇ´Â ½Äº°ÀÚ Á¦¿Ü) ´ë¹®ÀÚ, ¼Ò¹®ÀÚ ¶Ç´Â ´ë¼Ò¹®ÀÚ È¥ÇÕÀ¸·Î ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª Java ÅäÅ«Àº ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÕ´Ï´Ù. ¿¹¿¡¼­´Â ¸íÈ®¼ºÀ» À§ÇØ ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÏÁö ¾Ê´Â SQLÀº ´ë¹®ÀÚ·Î, Java ÅäÅ«À¸·Î ¼Ò¹®ÀÚ³ª ´ë¼Ò¹®ÀÚ È¥ÇÕÀ¸·Î Ç¥½ÃÇß½À´Ï´Ù. ÀÌ Àå Àüü¿¡¼­ ¼Ò¹®ÀÚ nullÀº Java "³Î(null)" °ªÀ» Ç¥½ÃÇÏ´Â µ¥ »ç¿ëÇÏ¸ç ´ë¹®ÀÚ NULLÀº SQL ³Î(null) °ªÀ» Ç¥½ÃÇÏ´Â µ¥ »ç¿ëÇÕ´Ï´Ù.

SQLJ¿¡¼­ÀÇ ¹Ýº¹±â µ¿ÀÛ ¼±¾ð

Å×ÀÌºí¿¡¼­ µ¥ÀÌÅ͸¦ °Ë»öÇÏ´Â SQL¹®°ú ´Þ¸® À§Ä¡ ÁöÁ¤µÈ UPDATE ¹× DELETE ÀÛ¾÷À» ¼öÇàÇÏ´Â ÀÀ¿ëÇÁ·Î±×·¥ ¶Ç´Â º¸À¯ °¡´É¼º ¶Ç´Â ¸®ÅÏ °¡´É¼º ¼Ó¼ºÀÇ ¹Ýº¹±â¸¦ »ç¿ëÇÏ´Â °ÍÀº µÎ Java ¼Ò½º ÆÄÀÏÀÌ ÇÊ¿äÇÕ´Ï´Ù. ¹Ýº¹±â¸¦ ÇϳªÀÇ ¼Ò½º ÆÄÀÏ¿¡¼­ °ø¿ëÀ¸·Î ¼±¾ðÇϰí, with¿Í implementsÀýÀ» ÀûÀýÈ÷ Ãß°¡ÇϽʽÿÀ.

º¸À¯ °¡´É¼º ¶Ç´Â ¸®ÅÏ °¡´É¼º ¼Ó¼ºÀÇ °ªÀ» ¼³Á¤ÇÏ·Á¸é, ÇØ´ç ¼Ó¼º¿¡ ´ëÇØ withÀýÀ» »ç¿ëÇÏ¿© ¹Ýº¹±â¸¦ ¼±¾ðÇØ¾ß ÇÕ´Ï´Ù. ´ÙÀ½ ¿¹´Â º¸À¯ °¡´É¼º ¼Ó¼ºÀ» WithHoldCurs ¹Ýº¹±â¿¡ ´ëÇØ ÂüÀ¸·Î ¼³Á¤ÇÕ´Ï´Ù.

   #sql public iterator WithHoldCurs with (holdability=true) (String EmpNo);

À§Ä¡ ÁöÁ¤µÈ °»½ÅÀ» ¼öÇàÇÏ´Â ¹Ýº¹±â´Â sqlj.runtime.ForUpdate ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â implementsÀýÀÌ ÇÊ¿äÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, file1.sqlj¿¡¼­ ´ÙÀ½°ú °°ÀÌ DelByName ¹Ýº¹±â¸¦ ¼±¾ðÇÑ´Ù°í °¡Á¤ÇϽʽÿÀ.

   #sql public iterator DelByName implements sqlj.runtime.ForUpdate(String EmpNo);

±×·± ´ÙÀ½¿¡´Â ´Ù¸¥ ¼Ò½º ÆÄÀÏ¿¡¼­ º¯È¯µÇ¾úÀ¸¸ç ÄÄÆÄÀÏµÈ ¹Ýº¹±â¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹Ýº¹±â¸¦ »ç¿ëÇÏ·Á¸é ´ÙÀ½À» ½ÇÇàÇϽʽÿÀ.

  1. »ý¼ºµÈ ¹Ýº¹±â Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¼±¾ðÇϽʽÿÀ.
  2. À§Ä¡ ÁöÁ¤µÈ UPDATE ¶Ç´Â DELETEÀÇ SELECT¹®À» ¹Ýº¹±â ÀνºÅϽº¿¡ ÇÒ´çÇϽʽÿÀ.
  3. ¹Ýº¹±â¸¦ »ç¿ëÇÏ¿© À§Ä¡ ÁöÁ¤µÈ UPDATE ¶Ç´Â DELETE¹®À» ½ÇÇàÇϽʽÿÀ.

file2.sqlj¿¡¼­ À§Ä¡ ÁöÁ¤µÈ DELETE¿¡ ´ëÇØ DelByNameÀ» »ç¿ëÇÏ·Á¸é, À§Ä¡ ÁöÁ¤µÈ ¹Ýº¹±â¸¦ »ç¿ëÇÏ¿© Çà »èÁ¦¿¡¼­¿Í °°Àº ¸í·É¹®À» ½ÇÇàÇϽʽÿÀ.

   {
      DelByName deliter; // Declare object of DelByName class
      String enum;
(1)   #sql deliter = { SELECT EMPNO FROM EMP WHERE WORKDEPT='D11'};
      while (deliter.next())
      {
(2)      enum = deliter.EmpNo(); // Get value from result table
(3)      #sql { DELETE WHERE CURRENT OF :deliter };
         // Delete row where cursor is positioned
      }
   }

ÁÖ:

  1. (1)ÀÌ SQLJÀýÀº SELECT¹®À» ½ÇÇàÇϰí, SELECT¹®¿¡ ´ëÇÑ °á°ú Å×À̺íÀÌ ÀÖ´Â ¹Ýº¹±â ¿ÀºêÁ§Æ®¸¦ ±¸¼ºÇϰí deliter º¯¼ö¿¡ ¹Ýº¹±â ¿ÀºêÁ§Æ®¸¦ ÇÒ´çÇÕ´Ï´Ù.

  2. (2)ÀÌ ¸í·É¹®Àº »èÁ¦ÇÒ Çà ´ÙÀ½¿¡ ¹Ýº¹±â¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

  3. (3)ÀÌ SQLJÀýÀº À§Ä¡ ÁöÁ¤µÈ DELETEÀ» ¼öÇàÇÕ´Ï´Ù.

SQLJ ¿¹: App.sqlj

´ÙÀ½ ¿¹Á¦ SQLJ ÀÀ¿ëÇÁ·Î±×·¥ App.sqlj ¿¡¼­´Â Á¤Àû SQLÀ» »ç¿ëÇÏ¿© DB2 »ùÇà µ¥ÀÌÅͺ£À̽ºÀÇ EMPLOYEE Å×ÀÌºí¿¡¼­ µ¥ÀÌÅ͸¦ °Ë»öÇÏ°í °»½ÅÇÕ´Ï´Ù.

  1. ¹Ýº¹±â ¼±¾ð. ÀÌ Àý¿¡¼­´Â µÎ °¡Áö À¯ÇüÀÇ ¹Ýº¹±â¸¦ ¼±¾ðÇÕ´Ï´Ù.

    App_Cursor1
    Ä÷³ µ¥ÀÌÅÍ À¯Çü°ú À̸§À» ¼±¾ðÇϰí, Ä÷³ À̸§¿¡ µû¶ó Ä÷³ÀÇ °ªÀ» ¸®ÅÏÇÕ´Ï´Ù(Ä÷³¿¡ ´ëÇÑ ¸í¸íµÈ ¹ÙÀεù).

    App_Cursor2
    Ä÷³ µ¥ÀÌÅÍ À¯ÇüÀ» ¼±¾ðÇϰí Ä÷³ À§Ä¡¿¡ µû¶ó Ä÷³ÀÇ °ªÀ» ¸®ÅÏÇÕ´Ï´Ù(Ä÷³¿¡ ´ëÇÑ ÁöÁ¤µÈ ¹ÙÀεù).
  2. ¹Ýº¹±â ÃʱâÈ­. ¹Ýº¹±â ¿ÀºêÁ§Æ® cursor1Àº Á¶È¸ÀÇ °á°ú¸¦ »ç¿ëÇÏ¿© ÃʱâÈ­µË´Ï´Ù. Á¶È¸´Â cursor1¿¡ °á°ú¸¦ ÀúÀåÇÕ´Ï´Ù.
  3. ´ÙÀ½ ÇàÀ¸·Î ¹Ýº¹±â ÁøÇà. °Ë»öÇÒ ÇàÀÌ ´õ ¾øÀ» °æ¿ì cursor1.next() ¸Þ¼Òµå´Â false ºÎ¿ï°ªÀ» ¸®ÅÏÇÕ´Ï´Ù.
  4. µ¥ÀÌÅÍ À̵¿. ¸í¸íµÈ ¾×¼¼¼­ ¸Þ¼Òµå empno()´Â ÇöÀç Çà¿¡¼­ empno¶ó´Â Ä÷³ÀÇ °ªÀ» ¸®ÅÏÇÕ´Ï´Ù. ¸í¸íµÈ ¾×¼¼¼­ ¸Þ¼Òµå firstnme()Àº ÇöÀç Çà¿¡¼­ firstnme¶ó´Â Ä÷³ÀÇ °ªÀ» ¸®ÅÏÇÕ´Ï´Ù.
  5. È£½ºÆ® º¯¼ö·ÎÀÇ SELECT µ¥ÀÌÅÍ. SELECT¹®Àº count1 È£½ºÆ® º¯¼ö·Î Å×À̺íÀÇ Çà ¼ö¸¦ Àü´ÞÇÕ´Ï´Ù.
  6. ¹Ýº¹±â ÃʱâÈ­. ¹Ýº¹±â ¿ÀºêÁ§Æ® cursor2Àº Á¶È¸ÀÇ °á°ú¸¦ »ç¿ëÇÏ¿© ÃʱâÈ­µË´Ï´Ù. Á¶È¸´Â cursor2¿¡ °á°ú¸¦ ÀúÀåÇÕ´Ï´Ù.
  7. µ¥ÀÌÅÍ °Ë»ö. FETCH¹®Àº °á°ú Å×À̺íÀÇ ByPos Ä¿¼­¿¡ ¼±¾ðµÈ ù¹øÂ° Ä÷³ÀÇ ÇöÀç °ªÀ» str2 È£½ºÆ® º¯¼ö·Î ¸®ÅÏÇÕ´Ï´Ù.
  8. FETCH..INTO¹®ÀÇ ¼º°ø Á¡°Ë. ¹Ýº¹±â°¡ Çà¿¡ ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì Áï, ÇàÀ» °¡Á®¿À·Á´Â ¸¶Áö¸· ½Ãµµ°¡ ½ÇÆÐÇÑ °æ¿ì endFetch() ¸Þ¼Òµå´Â true ºÎ¿ï°ªÀ» ¸®ÅÏÇÕ´Ï´Ù. ÇàÀ» °¡Á®¿À·Á´Â ¸¶Áö¸· ½Ãµµ°¡ ¼º°øÇÑ °æ¿ì endFetch() ¸Þ¼Òµå´Â false¸¦ ¸®ÅÏÇÕ´Ï´Ù. next() ¸Þ¼Òµå¸¦ È£ÃâÇϸé DB2¿¡¼­ ÇàÀ» °¡Á®¿À·Á ÇÕ´Ï´Ù. FETCH...INTO¹®Àº next() ¸Þ¼Òµå¸¦ ³»ÀçÀûÀ¸·Î È£ÃâÇÕ´Ï´Ù.
  9. ¹Ýº¹±â ´Ý±â. close() ¸Þ¼Òµå´Â ¹Ýº¹±â¿¡¼­ À¯ÁöÇÏ´Â ÀÚ¿øÀ» ÇØÁ¦ÇÕ´Ï´Ù. ¹Ýº¹±â¸¦ ¸í½ÃÀûÀ¸·Î ´Ý¾Æ ½Ã½ºÅÛ ÀÚ¿øÀÌ Àû½Ã¿¡ ¸±¸®½ºµÇµµ·Ï ÇØ¾ß ÇÕ´Ï´Ù.

JDBC ¿¹: App.sqlj
import java.sql.*;
import sqlj.runtime.*;
import sqlj.runtime.ref.*;
 
#sql iterator App_Cursor1 (String empno, String firstnme) ; (1)
#sql iterator App_Cursor2 (String) ;
 
class App 
{
 
  /**********************
   **  Register Driver **
   **********************/
 
 static
 {
   try
   {
     Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();
   }
   catch (Exception e)
   {
     e.printStackTrace();
   }
 }
 
  /********************
   **      Main      **
   ********************/
  
 public static void main(String argv[])
 {
   try
   {
     App_Cursor1 cursor1;
     App_Cursor2 cursor2;
 
     String str1 = null;
     String str2 = null;
     long   count1;
 
     // URL is jdbc:db2:dbname
     String url = "jdbc:db2:sample";
 
     DefaultContext ctx = DefaultContext.getDefaultContext();
     if (ctx == null)
     {
       try
       {
         // connect with default id/password
         Connection con = DriverManager.getConnection(url);
         con.setAutoCommit(false);
         ctx = new DefaultContext(con);
       }
       catch (SQLException e)
       {
         System.out.println("Error: could not get a default context");
         System.err.println(e) ;
         System.exit(1);
       }
       DefaultContext.setDefaultContext(ctx);
     }
 
     // retrieve data from the database
     System.out.println("Retrieve some data from the database.");
     #sql cursor1 = {SELECT empno, firstnme FROM employee}; (2)
 
     // display the result set
     // cursor1.next() returns false when there are no more rows
     System.out.println("Received results:");
     while (cursor1.next()) (3)
     {
       str1 = cursor1.empno(); (4)
       str2 = cursor1.firstnme();
 
       System.out.print (" empno= " + str1);
       System.out.print (" firstname= " + str2);
       System.out.print ("");
     }
     cursor1.close(); (9)
 
     // retrieve number of employee from the database
     #sql { SELECT count(*) into :count1 FROM employee }; (5)
     if (1 == count1)
       System.out.println ("There is 1 row in employee table");
     else
       System.out.println ("There are " + count1
                            + " rows in employee table");
 
     // update the database
     System.out.println("Update the database. ");
     #sql { UPDATE employee SET firstnme = 'SHILI' WHERE empno = '000010' };
 
     // retrieve the updated data from the database
     System.out.println("Retrieve the updated data from the database.");
     str1 = "000010";
     #sql cursor2 = {SELECT firstnme FROM employee WHERE empno = :str1}; (6)
    
     // display the result set
     // cursor2.next() returns false when there are no more rows
     System.out.println("Received results:");
     while (true)
     {
       #sql { FETCH :cursor2 INTO :str2 }; (7)
       if (cursor2.endFetch()) break; (8)
 
       System.out.print (" empno= " + str1);
       System.out.print (" firstname= " + str2);
       System.out.print ("");
     }
     cursor2.close(); (9)
 
     // rollback the update
     System.out.println("Rollback the update.");
     #sql { ROLLBACK work };
     System.out.println("Rollback done.");
   }
   catch( Exception e )
   {
     e.printStackTrace();
   }
 }
}

Java È£½ºÆ® º¯¼ö

Embedded SQL¹®ÀÇ Àμö´Â È£½ºÆ® º¯¼ö, SQL¹®¿¡ ³ªÅ¸³­ È£½ºÆ® ¾ð¾îÀÇ º¯¼ö¸¦ ÅëÇØ Àü´ÞµË´Ï´Ù. È£½ºÆ® º¯¼ö¿¡´Â ÃÖ´ë ¼¼ °¡Áö ºÎºÐÀÌ ÀÖ½À´Ï´Ù.

Java ½Äº°ÀÚÀÇ Æò°¡´Â Java ÇÁ·Î±×·¥¿¡ ºÎ°¡ ÀÛ¿ëÀ» ¹ÌÄ¡Áö ¾ÊÀ¸¹Ç·Î, SQLJ Ŭ·¡½º¸¦ ´ëüÇϱâ À§ÇØ »ý¼ºµÈ Java Äڵ忡 ¿©·¯¹ø ³ªÅ¸³¯ ¼ö ÀÖ½À´Ï´Ù.

´ÙÀ½ Á¶È¸¿¡´Â :x È£½ºÆ® º¯¼ö°¡ ÀÖÀ¸¸ç ÀÌ È£½ºÆ® º¯¼ö´Â Á¶È¸¸¦ Æ÷ÇÔÇÑ ¹üÀ§¿¡ °¡½ÃÀûÀÎ Java º¯¼ö, ÇÊµå ¶Ç´Â ¸Å°³º¯¼ö xÀÔ´Ï´Ù.

   SELECT  COL1,  COL2  FROM  TABLE1  WHERE  :x  > COL3

º¹ÇÕ SQL¿¡ ÁöÁ¤µÈ ¸ðµç È£½ºÆ® º¯¼ö´Â ±âº»ÀûÀ¸·Î ÀԷ ȣ½ºÆ® º¯¼öÀÔ´Ï´Ù. È£½ºÆ® º¯¼ö¸¦ Ãâ·Â È£½ºÆ® º¯¼ö·Î Ç¥½ÃÇÏ·Á¸é È£½ºÆ® º¯¼ö ¾Õ¿¡ ¸Å°³º¯¼ö ¸ðµå ½Äº°ÀÚ OUT ¶Ç´Â INOUTÀ» ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½°ú °°½À´Ï´Ù.

   #sql {begin compound atomic static
        select count(*) into :OUT count1 from employee;
        end compound}

SQLJ¿¡ ÀÖ´Â ÀúÀå ÇÁ·Î½Ãµà¾î ¹× ÇÔ¼ö¿¡ ´ëÇÑ È£Ãâ

µ¥ÀÌÅͺ£À̽º¿¡´Â ÀúÀå ÇÁ·Î½Ãµà¾î, »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö ±×¸®°í »ç¿ëÀÚ Á¤ÀÇ ¸Þ¼Òµå°¡ µé¾î ÀÖ½À´Ï´Ù. ÀúÀå ÇÁ·Î½Ãµà¾î, »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö ±×¸®°í »ç¿ëÀÚ Á¤ÀÇ ¸Þ¼Òµå´Â µ¥ÀÌÅͺ£À̽º¿¡¼­ ½ÇÇàµÇ´Â ¸í¸íµÈ ½ºÅ°¸¶ ¿ÀºêÁ§Æ®ÀÔ´Ï´Ù. Java ¸í·É¹®À¸·Î ³ªÅ¸³ª´Â SQLJ ½ÇÇà °¡´É Àý¿¡¼­ ´ÙÀ½°ú °°Àº CALL¹®À» ÅëÇØ ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù.

       #sql { CALL SOME_PROC(:INOUT myarg) };

ÀúÀå ÇÁ·Î½Ãµà¾î¿¡´Â IN, OUT ¶Ç´Â INOUT ¸Å°³º¯¼ö°¡ µé¾î°¥ ¼ö ÀÖ½À´Ï´Ù. À§ÀÇ °æ¿ì¿¡ myarg È£½ºÆ® º¯¼öÀÇ °ªÀº ±× ÀýÀÇ ½ÇÇàÀ¸·Î º¯°æµË´Ï´Ù. SQLJ ½ÇÇà °¡´É Àý¿¡¼­ SQL VALUES ±¸¼ºÀ» ÅëÇØ ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, Á¤¼ö¸¦ ¸®ÅÏÇÏ´Â ÇÔ¼ö F¸¦ °¡Á¤ÇϽʽÿÀ. ´ÙÀ½ ¿¹´Â ±× ÇÔ¼öÀÇ È£ÃâÀ» ³ªÅ¸³½ ´ÙÀ½ Java Áö¿ª º¯¼ö x¿¡ ±× °á°ú¸¦ ÇÒ´çÇÕ´Ï´Ù.

       {
           int x;
           #sql x = { VALUES( F(34) ) };
       }

SQLJ ÇÁ·Î±×·¥ ÄÄÆÄÀÏ ¹× ¼öÇà

MyClass ÇÁ·Î±×·¥ À̸§À¸·Î SQLJ ÇÁ·Î±×·¥À» ¼öÇàÇÏ·Á¸é ´ÙÀ½À» ½ÇÇàÇϽʽÿÀ.

  1. Embedded SQL·Î Java ¼Ò½º Äڵ带 º¯È¯ÇÏ¿© MyClass.java Java ¼Ò½º ÄÚµå¿Í MyClass_SJProfile0.ser, MyClass_SJProfile1.ser, ... ÇÁ·ÎÆÄÀÏÀ» »ý¼ºÇϽʽÿÀ(°¢ ¿¬°á ¹®¸Æ¿¡ ´ëÇØ ÇÑ ÇÁ·ÎÆÄÀϾ¿).
       sqlj MyClass.sqlj
    

    sqlj.properties ÆÄÀÏÀ» ÁöÁ¤ÇÏÁö ¾Ê°í SQLJ º¯È¯ ÇÁ·Î±×·¥À» »ç¿ëÇÏ¸é º¯È¯ ÇÁ·Î±×·¥¿¡¼­ ´ÙÀ½ °ªÀ» »ç¿ëÇÕ´Ï´Ù.

       sqlj.url=jdbc:db2:sample
       sqlj.driver=COM.ibm.db2.jdbc.app.DB2Driver
       sqlj.online=sqlj.semantics.JdbcChecker
       sqlj.offline=sqlj.semantics.OfflineChecker
    

    sqlj.properties ÆÄÀÏÀ» ÁöÁ¤ÇÒ °æ¿ì ´ÙÀ½ ¿É¼ÇÀÌ ¼³Á¤µÇ¾î ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.

       sqlj.url=jdbc:db2:dbname
       sqlj.driver=COM.ibm.db2.jdbc.app.DB2Driver
       sqlj.online=sqlj.semantics.JdbcChecker
       sqlj.offline=sqlj.semantics.OfflineChecker
    

    ¿©±â¼­ dbnameÀº µ¥ÀÌÅͺ£À̽ºÀÇ À̸§ÀÔ´Ï´Ù. ¶ÇÇÑ ¸í·ÉÇà¿¡¼­ ÀÌ·± ¿É¼ÇÀ» ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, MyClass¸¦ º¯È¯ÇÒ¶§ mydata µ¥ÀÌÅͺ£À̽º¸¦ ÁöÁ¤Çϱâ À§ÇØ ´ÙÀ½ ¸í·ÉÀ» ¹ßÇàÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

       sqlj -url=jdbc:db2:mydata MyClass.sqlj
    

    -compile=falseÀý·Î ÄÄÆÄÀÏ ¿É¼ÇÀ» ¸í½ÃÀûÀ¸·Î ¼³Á¤ÇØÁ¦ÇÏÁö ¾Ê´Â ÇÑ SQLJ º¯È¯ ÇÁ·Î±×·¥¿¡¼­ Ŭ·¡½º ÆÄÀÏ·Î ¼Ò½º Äڵ带 ÀÚµ¿À¸·Î º¯È¯ÇÑ´Ù´Â Á¡¿¡ ÁÖÀÇÇϽʽÿÀ.

  2. »ý¼ºµÈ ÇÁ·ÎÆÄÀÏ¿¡¼­ DB2 SQLJ »ç¿ëÀÚ Á¤ÀÇ ÇÁ·Î±×·¥À» ¼³Ä¡ÇÑ ´ÙÀ½ DB2 µ¥ÀÌÅͺ£À̽º dbname¿¡¼­ DB2 ÆÐŰÁö¸¦ ÀÛ¼ºÇϽʽÿÀ.
       db2profc -user=user-name -password=user-password -url=jdbc:db2:dbname
         -prepoptions="bindfile using MyClass0.bnd package using MyClass0"
                MyClass_SJProfile0.ser
       db2profc -user=user-name -password=user-password -url=jdbc:db2:dbname
         -prepoptions="bindfile using MyClass1.bnd package using MyClass1"
                MyClass_SJProfile1.ser
       ...
    
  3. SQLJ ÇÁ·Î±×·¥À» ½ÇÇàÇϽʽÿÀ.
       java MyClass
    

º¯È¯ ÇÁ·Î±×·¥¿¡¼­´Â SQLJÀÌ »ç¿ëÀÚ Á¤ÀÇµÈ µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇÑ SQL ±¸¹®À» »ý¼ºÇÕ´Ï´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°½À´Ï´Ù.

   i = { VALUES (  F(:x) ) };

ÀÌ ±¸¹®Àº SQLJ º¯È¯ ÇÁ·Î±×·¥À¸·Î º¯È¯µÇ¸ç

   ? = VALUES (F (?))

»ý¼ºµÈ ÇÁ·ÎÆÄÀÏ¿¡ ÀúÀåµË´Ï´Ù. DB2 Universal Database µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°áÇϸé DB2¿¡¼­ VALUE¹®À» ´ÙÀ½À¸·Î »ç¿ëÀÚ Á¤ÀÇÇÕ´Ï´Ù.

   VALUES(F(?)) INTO ?

±×·¯³ª OS/390¿ë DB2 Universal Database µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°áÇϸé DB2¿¡¼­ VALUE¹®À» ´ÙÀ½À¸·Î »ç¿ëÀÚ Á¤ÀÇÇÕ´Ï´Ù.

   SELECT F(?) INTO ? FROM SYSIBM.SYSDUMMY1

DB2 Universal Database µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇØ DB2 SQLJ ÇÁ·ÎÆÄÀÏ »ç¿ëÀÚ Á¤ÀÇ ÇÁ·Î±×·¥ db2profc¸¦ ¼öÇàÇÏ¿© ¹ÙÀÎµå ÆÄÀÏÀ» »ý¼ºÇÒ °æ¿ì ¹ÙÀÎµå ÆÄÀÏ¿¡ VALUESÀýÀÌ ÀÖÀ¸¸é ¹ÙÀÎµå ÆÄÀÏÀ» »ç¿ëÇÏ¿© OS/390¿ë DB2 µ¥ÀÌÅͺ£À̽º¿¡ ¹ÙÀεåÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ·± ³»¿ëÀº OS/390¿ë DB2 µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇØ ¹ÙÀÎµå ÆÄÀÏÀ» »ý¼ºÇÏ¿© DB2 Universal Database µ¥ÀÌÅͺ£À̽º¿¡ ¹ÙÀεåÇÏ·Á´Â °æ¿ì¿¡µµ Àû¿ëµË´Ï´Ù.

DB2 SQLJ ÇÁ·Î±×·¥ ºôµå ¹× ¼öÇà¿¡ ´ëÇØ¼­´Â ÀÀ¿ëÇÁ·Î±×·¥ ºôµå ¾È³»¼­¿¡¼­ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

SQLJ º¯È¯±â ¿É¼Ç

SQLJ º¯È¯±â´Â DB2 PRECOMPILE ¸í·É°ú °°Àº »çÀü ó¸® ÄÄÆÄÀÏ ¿É¼ÇÀ» Áö¿øÇÕ´Ï´Ù. ´ÙÀ½Àº ¿¹¿Ü»çÇ×ÀÔ´Ï´Ù.

   CONNECT
   DISCONNECT
   DYNAMICRULES
   NOLINEMACRO
   OPTLEVEL
   OUTPUT
   SQLCA
   SQLFLAG
   SQLRULES
   SYNCPOINT
   TARGET
   WCHARTYPE

SQLJ º¯È¯ ÇÁ·Î±×·¥¿¡¼­ »ý¼ºÇÑ ÇÁ·ÎÆÄÀÏÀÇ ³»¿ëÀ» ÀÏ¹Ý ÅØ½ºÆ®·Î ÀμâÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ profp À¯Æ¿¸®Æ¼¸¦ »ç¿ëÇϽʽÿÀ.

   profp MyClass_SJProfile0.ser
   profp MyClass_SJProfile1.ser
     ...

ÇÁ·ÎÆÄÀÏÀÇ DB2 »ç¿ëÀÚ Á¤ÀÇ ¹öÀüÀÇ ³»¿ëÀ» ÀÏ¹Ý ÅØ½ºÆ®·Î ÀμâÇÏ·Á¸é db2profp À¯Æ¿¸®Æ¼¸¦ ´ÙÀ½°ú °°ÀÌ »ç¿ëÇϽʽÿÀ. ¿©±â¼­ dbnameÀº µ¥ÀÌÅͺ£À̽ºÀÇ À̸§ÀÔ´Ï´Ù.

   db2profp -user=user-name -password=user-password -url=jdbc:db2:dbname
            MyClass_SJProfile0.ser
   db2profp -user=user-name -password=user-password -url=jdbc:db2:dbname
            MyClass_SJProfile1.ser
       ...


[ ÆäÀÌÁöÀÇ ¸Ç À§ | ÀÌÀü ÆäÀÌÁö | ´ÙÀ½ ÆäÀÌÁö | ¸ñÂ÷ | »öÀÎ ]