·Î±×ÀÎ | ȸ¿ø°¡ÀÔ (´º½º·¹ÅͽÅû) | SITEMAP
   
  °³¹ß   Ç÷§Æû   ½Ã½ºÅÛ   ¸Å´ÏÁö¸ÕÆ®   Àüü±â»ç  
ÀÚ¹Ù
´å³Ý
C/C++
DB
¸ðµ¨¸µ
À¥°³¹ß
±âŸ
À¯´Ð½º/¸®´ª½º
À©µµ¿ì
±âŸ
¼­¹ö
³×Æ®¿öÅ©
º¸¾È
±âŸ
BM
PM
±âŸ
 
±â»çÀúÀå
0
 
¸¶ÀÌ ½ºÅ©·¦
¼­ºí·¿ + JDBC ¿¬µ¿½Ã ÄÚµù °í·Á»çÇ× ¨é

ÀÌ¿ø¿µ ( javaservice )   2002/04/18
[Áöµð³ÝÄÚ¸®¾Æ]ÇϳªÀÇ ConnectionÀ» init()¿¡ ¹Ì¸® ¿¬°áÇØ µÎ°í »ç¿ëÇÏ´Â °æ¿ì

public class TestServlet extends HttpServlet {
  private final static String drv = "oracle.jdbc.driver.OracleDriver";
  private final static String url = "jdbc:orache:thin@210.220.251.96:1521:ORA8i";
  private final static String user = "scott";
  private final static String password = "tiger";

  private ServletContext context;
  private Connection conn = null; <--- !!!

  public void init(ServletConfig config) throws ServletException {
    super.init(config);
    context = config.getServletContext();
    try {
      Class.forName(drv);
      conn = DriverManager.getConnection(url,user,password);
    }
    catch (ClassNotFoundException e) {
      throw new ServletException("Unable to load JDBC driver:"+ e.toString());
    }
    catch (SQLException e) {
      throw new ServletException("Unable to connect to database:"+ e.toString());
    }
  }
  public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException, SQLException
  {
    Statement stmt = null;
    ResultSet rs = null;
    String id = req.getParameter("id");
    stmt = conn.createStatement();
    rs = stmt.executeQuery("select ..... where id = '" + id + "'");
    while(rs.next()) {
      ......
    }
    rs.close();
    stmt.close();
    .....
  }
  public void destroy() {
    if ( conn != null ) try {conn.close();}catch(Exception e){}
  }
}

À§¿¡¼­ À߸øµÈ °ÍÀº ¹«¾ùÀϱî? ¼­ºí·¿´ç Çϳª¾¿ java.sql.Connection À» init()¿¡¼­ ¹Ì¸® ¸Î¾î µÎ°í »ç¿ëÇÏ´Â ±¸Á¶ÀÌ´Ù.

¾óÇÍ »ý°¢ÇÏ¸é ¾Æ¹«·± ¹®Á¦°¡ ¾ø´Â °Í °°´Ù. doGet() ³»¿¡¼­ º°µµÀÇ Statement¿Í ResultSet À» »ç¿ëÇϰí ÀÖÀ¸´Ï, °¢ Thread´Â ÀڽŸ¸ÀÇ Reference¸¦ °¡Áö°í »ç¿ëÇÏ¸é µÉ °Íó·³ º¸ÀδÙ.

ÀÌ ±¸Á¶¿£ Å©°Ô ¼¼°¡Áö ¹®Á¦°¡ ÀÖ´Ù. Çϳª´Â DB ¿¬°á ÀÚ¿øÀÇ ³¶ºñ¸¦ °¡Á®¿À¸ç, µÎ ¹øÂ°´Â ¼ö¸¹Àº µ¿½Ã »ç¿ëÀÚ¿¡ ´ëÇÑ Ã³¸® ÇѰ踦 °¡Á®¿À°í, ¸¶Áö¸·À¸·Î´Â insert, update, delete¿Í °°ÀÌ Çϳª ÀÌ»óÀÇ SQL¹®ÀåÀ» ¼öÇàÇϸ鼭 ´ÜÀÏÀÇ Transaction 󸮸¦ º¸Àå¹ÞÀ» ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù.

1) ´ë·®ÀÇ µ¿½Ã »ç¿ëÀÚ Ã³¸® ºÒ°¡
À§ÀÇ ±¸Á¶´Â ¼­ºí·¿´ç Çϳª¾¿ java.sql.ConnectionÀ» Á¡À¯Çϰí ÀÖ´Ù. ½Ç ÇÁ·ÎÁ§Æ®¿¡¼­ º¸Åë ¼­ºí·¿ÀÌ ¸î°³³ª µÉ¿ä? ÃÖ¼Ò 100°³¿¡¼­ 400°³°¡ ³Ñ¾î °¥ ¶§µµ ÀÖ´Ù. ±×·¸´Ù¸é java.sql.Connection¿¡ ÇÒ´çµÅ¾ß ÇÒ DB¿¬°á¼öµµ ¼­ºí·¿ °¹¼ö ¸¹Å­ ÇÊ¿äÇÏ°Ô µÈ´Ù.

DB ¿¬°á ÀÚ¿øÀº DB¿¡¼­ ¼³Á¤Çϱ⠳ª¸§ÀÌÁö¸¸ Åë»ó maximumÀ» ¼ÂÆÃÇÑ´Ù. ÇÏÁö¸¸ ¿äûÀÌ ¾øÀ» °æ¿ì¿¡µµ 400¿©°³ÀÇ DB°¡ ¿¬°áµÅ ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀº ÀÚ¿øÀÇ ³¶ºñ´Ù.

2) ´ë·®ÀÇ µ¿½Ã »ç¿ëÀÚ Ã³¸® ºÒ°¡
¶ÇÇÑ °°Àº ¼­ºí·¿¿¡ ´ëÇØ µ¿½Ã¿¡ 100 ÀÌ»óÀÇ ¿äûÀÌ µé¾î¿Â´Ù°í °¡Á¤Çغ¸ÀÚ. ÀÌ °æ¿ì µ¿ÀÌÇÑ java.sql.Connection¿¡ ´ëÇØ °¢°¢ÀÇ ¿äûÀÌ conn.createStatement()¸¦ È£ÃâÇÏ°Ô µÈ´Ù.

¹®Á¦´Â ÇϳªÀÇ Connection¿¡ ´ëÇØ µ¿½Ã¿¡ OpenÇÒ ¼ö ÀÖ´Â Statement ¼ö(ÀÌ ¿ª½Ã DB ¿¡¼­ ¼ÂÆÃÇϱ⠳ª¸§ÀÌÁö¸¸)ÀÇ maximum¿¡ Á¦ÇÑÀÌ ÀÖ´Ù. ¿À¶óŬÀÇ °æ¿ì Default´Â 50ÀÌ´Ù. ¸¸¾à ÀÌ ¼öÄ¡ ÀÌ»óÀ» µ¿½Ã¿¡ OpenÇÏ·Á°í Çϸé "maximum open cursor exceed !" ¶ó´Â SQLExceptoinÀÌ ¹ß»ýÇÏ°Ô µÈ´Ù.

¿¹¸¦ µé¾î ´ÙÀ½°ú °°Àº ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄÑ º¸ÀÚ.

public class DbTest {
   public static void main(String[] args) throws Exception {
     Class.forName("jdbc driver...");
     Connection conn = DriverManager.getConnection("url...","id","password");
     int i=0;
     while(true) {
       Statement stmt = conn.createStatement();
       System.out.println( (++i) + "- stmt created");
     }
   }
}

°ú¿¬ ¸î°³±îÁö conn.createStement()°¡ ¼öÇàµÉ °ÍÀΰ¡? ÀÌ´Â DB¿¡¼­ ¼³Á¤Çϱ⠳ª¸§ÀÌ´Ù. Áß¿äÇÑ °ÍÀº ÇѰ谡 ÀÖ´Ù´Â °ÍÀÌ´Ù. ¶ÇÇÑ conn.createStatement()À» ÅëÇØ ¸¸µé¾îÁø stmt´Â java.sql.ConnectionÀÇ ÀÚ¿øÀ̱⠶§¹®¿¡ À§Ã³·³ stmtÀÇ reference°¡ ¾ø¾îÁ®µµ GC(Garbage Collection)°¡ µÇÁø ¾Ê´Â´Ù.

3) Transaction Áߺ¹Çö»ó ¹ß»ý

¿¹¸¦ µé¾î ´ÙÀ½°ú °°Àº ¼­ºñ½º°¡ ÀÖ´Ù°í °¡Á¤Çغ¸ÀÚ.

public void doGet(HttpServletRequest req, HttpServletResponse res)
   throws ServletException, IOException, SQLException
{
   Statement stmt = null;
   String id = req.getParameter("id");
   try {
     conn.setAutoCommit(false);
     stmt = conn.createStatement();
     stmt.executeUpdate("update into XXXX..... where id = " + id + "'");
     stmt.executeUpdate("delete from XXXX..... where id = " + id + "'");
     stmt.executeUpdate(".... where id = " + id + "'");
     stmt.executeUpdate(".... where id = " + id + "'");
     conn.commit();
   }
   catch(Exception e){
     try{conn.rollback();}catch(Exception e){}
   }
   finally {
     if ( stmt != null ) try{stmt.close();}catch(Exception e){}
     conn.setAutoCommit(true);
   }
   .....
}

¾Æ¹«·± ¹®Á¦°¡ ¾øÀ» µíµµ ÇÏ´Ù. ÇÏÁö¸¸ À§ÀÇ ¼­ºñ½º¸¦ µ¿½Ã¿¡ ¿äûÇÏ¸é °°Àº java.sql.ConnectionÀ» °®°í ÀÛ¾÷À» Çϰí ÀÖÀ¸´Ï TransactionÀÌ ÁßøµÈ´Ù. ¿Ö³ÄÇϸé conn.commit(), conn.rollback()°ú °°ÀÌ connÀ̶ó´Â Connection¿¡ ´ëÇØ TransactionÀÌ °ü¸®µÇ±â ¶§¹®.

¿äû A°¡ ÃÑ 4°³ÀÇ SQL¹®Àå Áß 3°³¸¦ Á¤»óÀûÀ¸·Î ¼öÇàÇÏ°í ¸¶Áö¸· 4¹øÂ°ÀÇ SQL¹®ÀåÀ» ¼öÇàÇÏ·Á ÇÑ´Ù. À̶§ ¿äû B°¡ µÚµû¶ó µé¾î¿Í¼­ 2°³ÀÇ SQL ¹®ÀåÀ» ¿­½ÉÈ÷ ¼öÇàÇß´Ù. ±Ùµ¥ ¿äû A¿¡ ÀÇÇÑ ¸¶Áö¸· SQL ¹®Àå ¼öÇàÁß¿¡ SQLExceptionÀÌ ¹ß»ýÇß´Ù. ±×·¸´ã ¿äû A´Â catch(Exception e) Àý·Î ºÐ±â°¡ ÀϾ°í conn.rollback()À» ¼öÇàÇØ ÀÌ¹Ì ¼öÇàÇÑ 3°³ÀÇ SQL ¼öÇàµéÀ» ¸ðµÎ rollback½ÃŲ´Ù.

¹®Á¦´Â ¿äû B ¿¡ ÀÇÇØ ¼öÇàµÈ 2°³ÀÇ SQL¹®Àå±îÁö rollback()µÅ ¹ö¸°´Ù. ¿Ö³ÄÇÏ¸é µ¿ÀÏÇÑ conn °´Ã¼À̱⠶§¹®ÀÌ´Ù. °á±¹ ¿äû B´Â ¿µ¹®µµ ¸ð¸£°í ¸¶Áö¸· 2°³ÀÇ SQL¹®À常 ¼öÇàÇÏ°Ô µÈ´Ù.

Á¤¸®Çϸé, Connection, Statement, ResultSet ´Â doGet() , doPost() ³»¿¡¼­ ¼±¾ðµÇ°í »ç¿ëµÅ¾ß ÇÑ´Ù. @

public void doGet(HttpServletRequest req, HttpServletResponse res)
   throws ServletException, IOException, SQLException
{
   Connection conn = null; <----- À̰÷À¸·Î ¿Í¾ßÁÒ..
   Statement stmt = null; <-------
   ResultSet rs = null; <---------
   .....
}

¼­ºí·¿ + JDBC ¿¬µ¿½Ã ÄÚµù °í·Á»çÇ× ¨ç
¼­ºí·¿ + JDBC ¿¬µ¿½Ã ÄÚµù °í·Á»çÇ× ¨è
µ¶ÀÚÀÇ°ß ³²±â±â (·Î±×ÀÎ ÈÄ µ¶ÀÚ ÀǰßÀ» ³²±â½Ç ¼ö ÀÖ½À´Ï´Ù.)
¾ÆÀ̵ð ºñ¹Ð¹øÈ£
 
 
[ORM ¨é] iBATIS SQL...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ç] °¡½¿ÀÇ ²Þ...
[ORM ¨è] JPA Ȱ¿ëÇϱâ
[ORM ¨ç] ÇÏÀ̹ö³×ÀÌÆ® Ȱ¿ëÀü...
[±â°í]±ÝÀ¶ ¼­ºñ½º ½ÃÀåÀ» À§ÇÑ ...
[DDD ¨ë] BDD(Behavi...
[±â°í]¿Ã¸²ÇÈ ½ÃÁ𠺸¾È À§Çù¿¡ ...
[Weekend TV]Àü¼¼°è ¸ÅÁø Áø±â·Ï 'ºñµð¿À°ÔÀÓ ¶óÀ̺ê¼î' [00:02:42]
»õ³ÊÁ¦ÀÌ(¹Ì±¹)=·ùÁØ¿µ ±âÀÚ, À¯È¸Çö PD
'±¤¼¶À¯ 3D ¿µ»ó', ³úÀÇÇп¡ »õ ÁöÆò ¿­´Ù [00:02:31]
Áöµð³ÝÄÚ¸®¾Æ ¿µ»óÁ¦ÀÛÆÀ
¡°À¥ Ç¥ÁØÀº ¹«½¼!¡±¡¦IE8¿¡ ´ë...
Á¶Áßµ¿, ´ÙÀ½¿¡ ´º½º°ø±Þ Áß´Ü¡¦"...
³×À̹ö´Â ¿Ö '10´ë ÇØÄ¿'¿¡ ´ç...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ç] °¡½¿ÀÇ ²Þ...
°øÀÎÀÎÁõüÁ¦, ¿ì¸®¿¡°Ô ÀÓ¹ÚÇÑ ¹Ì...
´ÙÀ½ vs Á¶Áßµ¿, Á¤¸éÃæµ¹·Î Ä¡...
Áö¾Öµå, ¿Á¿Ü±¤°í¿Í Ç×°ø»çÁø °áÇÕ...
[Àλç]Áö½Ä°æÁ¦ºÎ
ÆÄ¼ö´åÄÄ "DRMÀÌ º¸¾È»ê¾÷ À̲ö...
³×À̹ö ¼­ºñ½º ÀÚ¹®À§¿øÈ¸, º»°ÝÀû...
Çѱ¹¾ÆÀ̽ǷÐ, ¾¾µð³×Æ®¿÷½º¿¡ ´ë±Ô...
 
 
The Korean edition of 'ZDNet' is published under license from CNET Networks, Inc., San Francisco, CA, USA. Editorial items appearing in 'ZDNet Korea' that were originally published in the US Edition of 'ZDNet', 'CNET', and 'CNET News.com' are the copyright properties of CNET Networks, Inc. or its suppliers.
Copyright ¨Ï 2008 CNET Networks, Inc. All Rights Reserved. 'ZDNet', 'CNET' and 'CNET News.com' are trademarks of CNET Networks, Inc.