<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Programmer Jiny</title>
		<link>http://letter20.tistory.com/</link>
		<description>프로그래밍은 레고다!!</description>
		<language>ko</language>
		<pubDate>Thu, 01 Dec 2011 18:26:44 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<managingEditor>쮠이</managingEditor>
		<image>
		<title>Programmer Jiny</title>
		<url><![CDATA[http://cfile24.uf.tistory.com/image/195B203C4ED7326F08FC56]]></url>
		<link>http://letter20.tistory.com/</link>
		<description>프로그래밍은 레고다!!</description>
		</image>
		<item>
			<title>JDBC 에서 트랜잭션을 실행할시  기본 구문</title>
			<link>http://letter20.tistory.com/entry/JDBC-%EC%97%90%EC%84%9C-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%84-%EA%B8%B0%EB%B3%B8-%EA%B5%AC%EB%AC%B8</link>
			<description>&lt;br /&gt;
&lt;br /&gt;
&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=590 bgColor=#ffffff&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #5fb636 1px solid; BORDER-LEFT: #5fb636 1px solid; BORDER-TOP: #5fb636 1px solid; BORDER-RIGHT: #5fb636 1px solid&quot; width=&quot;100%&quot;&gt;&amp;nbsp;&lt;PRE class=de1&gt;&lt;SPAN class=kw3&gt;&lt;STRONG&gt;&lt;FONT color=#006600&gt;   boolean&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt; autoCommitDefault = conn.&lt;SPAN class=me1&gt;&lt;FONT color=#006633&gt;getAutoCommit&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT color=#009900&gt;&lt;SPAN class=br0&gt;(&lt;/SPAN&gt;&lt;SPAN class=br0&gt;)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN class=sy0&gt;&lt;FONT color=#339933&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;
&lt;SPAN class=kw2&gt;&lt;STRONG&gt;   try&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;
      conn.&lt;SPAN class=me1&gt;&lt;FONT color=#006633&gt;setAutoCommit&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=kw4&gt;&lt;STRONG&gt;&lt;FONT color=#006600&gt;false&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=sy0&gt;&lt;FONT color=#339933&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;
    &lt;/PRE&gt;&lt;PRE class=de1&gt;     &lt;FONT color=#5fb636&gt; //실행하고자 하는 insert, update, delete 실행&lt;/FONT&gt;    &lt;/PRE&gt;&lt;PRE class=de1&gt;      conn.&lt;SPAN class=me1&gt;&lt;FONT color=#006633&gt;commit&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT color=#009900&gt;&lt;SPAN class=br0&gt;(&lt;/SPAN&gt;&lt;SPAN class=br0&gt;)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN class=sy0&gt;&lt;FONT color=#339933&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;
&lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;   }&lt;/FONT&gt;&lt;/SPAN&gt; &lt;SPAN class=kw2&gt;&lt;STRONG&gt;catch&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=kw21&gt;&lt;STRONG&gt;&lt;FONT color=#003399&gt;Throwable&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt; e&lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;)&lt;/FONT&gt;&lt;/SPAN&gt; &lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;
      &lt;SPAN class=kw2&gt;&lt;STRONG&gt;try&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;{&lt;/FONT&gt;&lt;/SPAN&gt; conn.&lt;SPAN class=me1&gt;&lt;FONT color=#006633&gt;rollback&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT color=#009900&gt;&lt;SPAN class=br0&gt;(&lt;/SPAN&gt;&lt;SPAN class=br0&gt;)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN class=sy0&gt;&lt;FONT color=#339933&gt;;&lt;/FONT&gt;&lt;/SPAN&gt; &lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;}&lt;/FONT&gt;&lt;/SPAN&gt; &lt;SPAN class=kw2&gt;&lt;STRONG&gt;catch&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=kw21&gt;&lt;STRONG&gt;&lt;FONT color=#003399&gt;Throwable&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt; ignore&lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;)&lt;/FONT&gt;&lt;/SPAN&gt; &lt;FONT color=#009900&gt;&lt;SPAN class=br0&gt;{&lt;/SPAN&gt;&lt;SPAN class=br0&gt;}&lt;/SPAN&gt;&lt;/FONT&gt;
      &lt;SPAN class=kw2&gt;&lt;STRONG&gt;throw&lt;/STRONG&gt;&lt;/SPAN&gt; e&lt;SPAN class=sy0&gt;&lt;FONT color=#339933&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;
&lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;   }&lt;/FONT&gt;&lt;/SPAN&gt; &lt;SPAN class=kw2&gt;&lt;STRONG&gt;finally&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;
      &lt;SPAN class=kw2&gt;&lt;STRONG&gt;try&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;{&lt;/FONT&gt;&lt;/SPAN&gt; conn.&lt;SPAN class=me1&gt;&lt;FONT color=#006633&gt;setAutoCommit&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;autoCommitDefault&lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=sy0&gt;&lt;FONT color=#339933&gt;;&lt;/FONT&gt;&lt;/SPAN&gt; &lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;}&lt;/FONT&gt;&lt;/SPAN&gt; &lt;SPAN class=kw2&gt;&lt;STRONG&gt;catch&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=kw21&gt;&lt;STRONG&gt;&lt;FONT color=#003399&gt;Throwable&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt; ignore&lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;)&lt;/FONT&gt;&lt;/SPAN&gt; &lt;FONT color=#009900&gt;&lt;SPAN class=br0&gt;{&lt;/SPAN&gt;&lt;SPAN class=br0&gt;}&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;SPAN class=br0&gt;&lt;FONT color=#009900&gt;   }&lt;/FONT&gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;

&lt;DIV style=&quot;TEXT-ALIGN: left&quot; dir=ltr class=mw-geshi&gt;
&lt;DIV class=&quot;java5 source-java5&quot;&gt;대개 퍼시스턴스 계층은 하이버네이트나 ibatis 같은 프레임웤을 쓰기는 하나 JDBC 로 쿼리를 실행할시 위와 같은 코드로 정형화 하는게 좋다고 아래 사이트에 나와있다능;;&lt;br /&gt;
참고로.. 영어다;;&lt;br /&gt;
&lt;br /&gt;원문 :&amp;nbsp; &lt;A href=&quot;http://en.wikipedia.org/wiki/Java_Database_Connectivity&quot;&gt;http://en.wikipedia.org/wiki/Java_Database_Connectivity&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
			<category>JAVA</category>
			<author>쮠이</author>
			<guid>http://letter20.tistory.com/22</guid>
			<comments>http://letter20.tistory.com/entry/JDBC-%EC%97%90%EC%84%9C-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%84-%EA%B8%B0%EB%B3%B8-%EA%B5%AC%EB%AC%B8#entry22comment</comments>
			<pubDate>Tue, 23 Aug 2011 15:54:56 +0900</pubDate>
		</item>
		<item>
			<title>오라클에서 START WITH ~ CONNECT BY PRIOR 쓰기</title>
			<link>http://letter20.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4%EC%97%90%EC%84%9C-START-WITH-CONNECT-BY-PRIOR-%EC%93%B0%EA%B8%B0</link>
			<description>&lt;br /&gt;
◈ START WITH &lt;br /&gt;
&lt;br /&gt;- 계층 질의의 루트(부모행)로 사용될 행을 지정 합니다.. &lt;br /&gt;
- 서브쿼리를 사용할 수도 있습니다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
◈ CONNECT BY &lt;br /&gt;
&lt;br /&gt;- 이 절을 이용하여 계층 질의에서 상위계층(부모행)과 하위계층(자식행)의 관계를 규정 합니다. &lt;br /&gt;
- 보통 PRIOR 연산자를 많이 사용 합니다.. &lt;br /&gt;
- 서브쿼리를 사용할 수 없습니다.. &lt;br /&gt;
- PRIOR &lt;br /&gt;
PRIOR 이 붙는 column 이 가져온 row 의 column을 의미한다. 즉 상위에 존재할 데이타가 되&lt;br /&gt;
&lt;br /&gt;게 된다. 어느쪽에 붙느냐 잘 따져 본다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
◈ CONNECT BY의 실행순서는 다음과 같습니다.&lt;br /&gt;
&lt;br /&gt;- 첫째 START WITH절 &lt;br /&gt;
- 둘째 CONNECT BY 절&lt;br /&gt;
- 세째 WHERE 절 순서로 풀리게 되어있습니다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;◈ SYNTEX&lt;br /&gt;
&lt;br /&gt;SELECT &lt;br /&gt;
FROM &lt;br /&gt;
START WITH&lt;br /&gt;
CONNECT BY PRIOR&lt;br /&gt;
AND &lt;br /&gt;
ORDER SIBLINGS BY&lt;br /&gt;
&lt;br /&gt;or &lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;SELECT &lt;br /&gt;
FROM &lt;br /&gt;
WHERE&lt;br /&gt;
START WITH&lt;br /&gt;
CONNECT BY PRIOR&lt;br /&gt;
ORDER SIBLINGS BY&lt;br /&gt;
&lt;br /&gt;◈ 이용 &lt;br /&gt;
1) 쇼핑목 카테고리 관계 - 대분류, 중분류, 소분류 등을 트리 구조로 &lt;br /&gt;
2) 게시판 에서 일반글 과 답글과의 관계 등을 트리 구조로 &lt;br /&gt;
&lt;br /&gt;◈ 데이터가 많아질 경우....&lt;br /&gt;
&lt;br /&gt;- 첫째로 풀리는 START WITH job=&#039;PRESIDENT&#039; job 컬럼에 index가 생성되어 있지 않는다면 &lt;br /&gt;
속도를 보장할 수 없습니다.&lt;br /&gt;
&lt;br /&gt;- 그리고 둘째로 풀리는 CONNECT BY PRIOR empno = mgr 역시 PRIOR 쪽의 컬럼값이 상수가 &lt;br /&gt;
되기 때문에 MGR컬럼에 index를 생성하여야 CONNECT BY의 속도를 보장할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;- 계층구조를 CONNECT BY, START WITH로 풀면 부분범위 처리가 불가능하고 Desc으로 &lt;br /&gt;
표현하기가 어렵 습니다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
--------------- 설명 &lt;br /&gt;
-- 아래 예제 1 &lt;br /&gt;
1) job 이 president 인 row 을 가져온다. &lt;br /&gt;
2) 가져온 row 에서 prior 이 붙은 comumn 의 데이타를 가져온다. 여긴선 empno 다.&lt;br /&gt;
3) PRIOR empno = mgr empno 을 mgr 로 사용하는 row 을 가져온다. 기존의 row 상위, 비교해서 가져온 row 하위에 있게 된다. &lt;br /&gt;
4) 이제 두번째로 가져온 row 에서 PRIOR empno = mgr 을 실행시킨다. &lt;br /&gt;
5) 이런 과정이 연속으로 반복되면서 최종적으로 가져온 data 는 트리 구조를 이루게 된다.(계층구조)&lt;br /&gt;
6) LEVEL 은 depth 을 의미한다. &lt;br /&gt;
&lt;br /&gt;7) empno = PRIOR mgr 한다면 가져온 row 의 mgr을 기준으로 비교하여 data을 가져오게 된다. &lt;br /&gt;
예제 2 참조 &lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
---- 예제 1 &lt;br /&gt;
SELECT LEVEL,empno,ename, mgr, job -- LEVEL 은 depth 을 의미한다. &lt;br /&gt;
FROM emp&lt;br /&gt;
START WITH job = &#039;PRESIDENT&#039; -- 직업이 PRESIDENT를 기준으로&lt;br /&gt;
CONNECT BY PRIOR empno = mgr -- 사원(empno)과 관리자(mgr)의 관계를 계층 &lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;-- level 을 공백으로 찍어 본다. &lt;br /&gt;
&lt;br /&gt;SELECT LPAD(&#039; &#039;, 4*(LEVEL-1)) || ename ename,LEVEL, empno, mgr, job &lt;br /&gt;
FROM emp&lt;br /&gt;
START WITH job = &#039;PRESIDENT&#039; -- 직업이 PRESIDENT를 기준으로&lt;br /&gt;
CONNECT BY PRIOR empno = mgr -- 사원(empno)과 관리자(mgr)의 관계를 계층&lt;br /&gt;
&lt;br /&gt;-- 결과치 &lt;br /&gt;
ENAME LEVEL EMPNO MGR JOB&lt;br /&gt;
KING 1 7839 PRESIDENT&lt;br /&gt;
JONES 2 7566 7839 MANAGER&lt;br /&gt;
SCOTT 3 7788 7566 ANALYST&lt;br /&gt;
ADAMS 4 7876 7788 CLERK&lt;br /&gt;
FORD 3 7902 7566 ANALYST&lt;br /&gt;
SMITH 4 7369 7902 CLERK&lt;br /&gt;
JJS 3 9000 7566 ANALIST&lt;br /&gt;
BLAKE 2 7698 7839 MANAGER&lt;br /&gt;
ALLEN 3 7499 7698 SALESMAN&lt;br /&gt;
WARD 3 7521 7698 SALESMAN&lt;br /&gt;
MARTIN 3 7654 7698 SALESMAN&lt;br /&gt;
TURNER 3 7844 7698 SALESMAN&lt;br /&gt;
JAMES 3 7900 7698 CLERK&lt;br /&gt;
CLARK 2 7782 7839 MANAGER&lt;br /&gt;
MILLER 3 7934 7782 CLERK&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
----예제 2 - PRIOR 위치 변경 &lt;br /&gt;
SELECT LPAD(&#039; &#039;, 4*(LEVEL-1)) || ename ename,LEVEL, empno, mgr, job -- level 을 공백으로 찍어 본다. &lt;br /&gt;
FROM emp&lt;br /&gt;
START WITH job = &#039;CLERK&#039; -- 직업이 CLERK를 기준으로&lt;br /&gt;
CONNECT BY empno = PRIOR mgr -- 사원(empno)과 관리자(mgr)의 관계를 계층 &lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
-- 결과치 &lt;br /&gt;
&lt;br /&gt;ENAME LEVEL EMPNO MGR JOB&lt;br /&gt;
SMITH 1 7369 7902 CLERK&lt;br /&gt;
FORD 2 7902 7566 ANALYST&lt;br /&gt;
JONES 3 7566 7839 MANAGER&lt;br /&gt;
KING 4 7839 PRESIDENT&lt;br /&gt;
ADAMS 1 7876 7788 CLERK&lt;br /&gt;
SCOTT 2 7788 7566 ANALYST&lt;br /&gt;
JONES 3 7566 7839 MANAGER&lt;br /&gt;
KING 4 7839 PRESIDENT&lt;br /&gt;
JAMES 1 7900 7698 CLERK&lt;br /&gt;
BLAKE 2 7698 7839 MANAGER&lt;br /&gt;
KING 3 7839 PRESIDENT&lt;br /&gt;
MILLER 1 7934 7782 CLERK&lt;br /&gt;
CLARK 2 7782 7839 MANAGER&lt;br /&gt;
KING 3 7839 PRESIDENT&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
---- 예제 3: 조건 절 사용&lt;br /&gt;
-- 1) WHERE 절 사용 &lt;br /&gt;
SELECT LPAD(&#039; &#039;, 4*(LEVEL-1)) || ename ename,LEVEL, empno, mgr, job -- level 을 공백으로 찍어 본다. &lt;br /&gt;
FROM emp&lt;br /&gt;
WHERE ename LIKE &#039;%K%&#039;&lt;br /&gt;
START WITH job = &#039;PRESIDENT&#039; -- 직업이 PRESIDENT를 기준으로&lt;br /&gt;
CONNECT BY PRIOR empno = mgr -- 사원(empno)과 관리자(mgr)의 관계를 계층&lt;br /&gt;
&lt;br /&gt;-- 2) CONNECT BY PRIOR 아래에 AND 사용&lt;br /&gt;
SELECT LPAD(&#039; &#039;, 4*(LEVEL-1)) || ename ename,LEVEL, empno, mgr, job -- level 을 공백으로 찍어 본다. &lt;br /&gt;
FROM emp&lt;br /&gt;
START WITH job = &#039;PRESIDENT&#039; -- 직업이 PRESIDENT를 기준으로&lt;br /&gt;
CONNECT BY PRIOR empno = mgr -- 사원(empno)과 관리자(mgr)의 관계를 계층&lt;br /&gt;
AND ename LIKE &#039;%K%&#039;&lt;br /&gt;
&lt;br /&gt;-- 3) LEVEL 조건 사용 &lt;br /&gt;
SELECT LPAD(&#039; &#039;, 4*(LEVEL-1)) || ename ename, empno, mgr, job &lt;br /&gt;
FROM emp&lt;br /&gt;
START WITH job=&#039;PRESIDENT&#039;&lt;br /&gt;
CONNECT BY PRIOR empno =mgr &lt;br /&gt;
AND LEVEL &amp;lt;= 2 &lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;---- 예제4 : 각 label별로 급여의 합과 인원수를 구하는 예제&lt;br /&gt;
&lt;br /&gt;SELECT LEVEL, SUM(sal) salTotal,COUNT(empno) empnCnt&lt;br /&gt;
FROM emp&lt;br /&gt;
START WITH job=&#039;PRESIDENT&#039; &lt;br /&gt;
CONNECT BY PRIOR empno=mgr &lt;br /&gt;
GROUP BY LEVEL &lt;br /&gt;
ORDER BY LEVEL&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
-- 결과치 &lt;br /&gt;
&lt;br /&gt;LEVEL salTotal empnCnt&lt;br /&gt;
---------- ---------- ----------&lt;br /&gt;
1 5000 1&lt;br /&gt;
2 8275 3&lt;br /&gt;
3 13850 8&lt;br /&gt;
4 1900 2&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;원본글 : &lt;A href=&quot;http://stillrabbit.blogspot.com/2008/01/oracle-start-with-connect-by-prior.html&quot;&gt;http://stillrabbit.blogspot.com/2008/01/oracle-start-with-connect-by-prior.html&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;</description>
			<category>ORACLE</category>
			<author>쮠이</author>
			<guid>http://letter20.tistory.com/21</guid>
			<comments>http://letter20.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4%EC%97%90%EC%84%9C-START-WITH-CONNECT-BY-PRIOR-%EC%93%B0%EA%B8%B0#entry21comment</comments>
			<pubDate>Thu, 18 Aug 2011 11:33:03 +0900</pubDate>
		</item>
		<item>
			<title>오라클 락 제거</title>
			<link>http://letter20.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%9D%BD-%EC%A0%9C%EA%B1%B0</link>
			<description>&lt;P&gt;테이블에 업데이트 시 오랜 시간이 걸린다면,&amp;nbsp; 테이블 락이 걸려있을 가능성이 크다&lt;br /&gt;
락을 제거해주어야만, 원활한 운영이 가능하므로 록을 종료해보자!!!&lt;br /&gt;
&lt;br /&gt;1. 락이 걸린 목록을 확인&lt;br /&gt;
&lt;br /&gt;
&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=590 bgColor=#d6f3f9&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #49b5d5 1px solid; BORDER-LEFT: #49b5d5 1px solid; BORDER-TOP: #49b5d5 1px solid; BORDER-RIGHT: #49b5d5 1px solid&quot; width=&quot;100%&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;STRONG&gt;&lt;FONT color=#3058d2&gt;select&amp;nbsp;&lt;/FONT&gt;&lt;/STRONG&gt; a.sid, a.serial#,a.username,a.process, b.object_name,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; decode(c.lmode,2,&#039;RS&#039;,3,&#039;RX&#039;,4,&#039;S&#039;,5,&#039;SRX&#039;,8,&#039;X&#039;,&#039;NO&#039;) &quot;TABLE LOCK&quot;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;decode (a.command,2,&#039;INSERT&#039;,3,&#039;SELECT&#039;,6,&#039;UPDATE&#039;,7,&#039;DELETE&#039;,12,&#039;DROP&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TABLE&#039;,26,&#039;LOCK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TABLE&#039;,&#039;UNknown&#039;)&quot;SQL&quot;,&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; decode (a.lockwait, NULL,&#039;NO wait&#039;,&#039;Wait&#039;) &quot;STATUS&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;FONT color=#3058d2&gt;&lt;STRONG&gt; &lt;FONT size=+0&gt;from&lt;/FONT&gt;&amp;nbsp; &lt;/STRONG&gt;&lt;/FONT&gt;v$session a,dba_objects b, v$lock c&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;STRONG&gt;&lt;FONT color=#3058d2&gt;where &lt;/FONT&gt;&lt;/STRONG&gt;a.sid=c.sid and b.object_id=c.id1&amp;nbsp;and c.type = &#039;TM&#039;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
&lt;br /&gt;2. 락 종료&lt;br /&gt;
&lt;br /&gt;
&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=590 bgColor=#d6f3f9&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #49b5d5 1px solid; BORDER-LEFT: #49b5d5 1px solid; BORDER-TOP: #49b5d5 1px solid; BORDER-RIGHT: #49b5d5 1px solid&quot; width=&quot;100%&quot;&gt;&lt;STRONG&gt;&lt;FONT color=#3058d2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ALTER&amp;nbsp;SYSTEM&amp;nbsp;KILL&amp;nbsp;SESSION&lt;/FONT&gt;&lt;/STRONG&gt; &#039;sid&amp;nbsp; 번호, serial 번호&#039; &lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - ex )&amp;nbsp;&lt;STRONG&gt;&lt;FONT color=#3058d2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ALTER&amp;nbsp;SYSTEM&amp;nbsp;KILL&amp;nbsp;SESSION&lt;/FONT&gt;&lt;/STRONG&gt; &#039;145,37&#039; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;&lt;br /&gt;
&lt;br /&gt;잘~ 종료된다 ㅋ</description>
			<category>ORACLE</category>
			<author>쮠이</author>
			<guid>http://letter20.tistory.com/20</guid>
			<comments>http://letter20.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%9D%BD-%EC%A0%9C%EA%B1%B0#entry20comment</comments>
			<pubDate>Fri, 14 Jan 2011 11:26:07 +0900</pubDate>
		</item>
		<item>
			<title>대용량 테스트를 위한 PL/SQL 더미 데이터 입력</title>
			<link>http://letter20.tistory.com/entry/%EB%8C%80%EC%9A%A9%EB%9F%89-%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EC%9C%84%ED%95%9C-PLSQL-%EB%8D%94%EB%AF%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9E%85%EB%A0%A5</link>
			<description>&lt;br /&gt;
우선... 난 오라클을 모린다...&lt;br /&gt;
뭐.. ANSI 기준이려니.. 아니면 잘하는 TSQL 정도로 생각하면 될거려니 했는데...&lt;br /&gt;
20만건 테스팅을 위해 데이터를 입력해야 하는데 프로그램으로 20만건 돌릴려니.. 잘 안돌아간다.. 제길슨..&lt;br /&gt;
그리하여 별에 별짓 다해보다가 찾은것은!!!&lt;br /&gt;
&lt;br /&gt;PL/SQL !!!! ( 두둥.... 효과음..)&lt;br /&gt;
&lt;br /&gt;쉽게 넣었다.. 바보라고 놀려도 좋다.. 다음을 보시라 ㅋㅋ&lt;br /&gt;
&lt;br /&gt;1. T_TEST 테이블 정의&lt;br /&gt;

&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=590 bgColor=#d6f3f9&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;100%&quot;&gt;&amp;nbsp;CREATE TABLE T_TEST ( &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; NID&amp;nbsp;&amp;nbsp; &amp;nbsp;NUMBER NULL,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; NVALUE&amp;nbsp;NUMBER(15,5) NULL &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
&lt;br /&gt;2. TEST_SEQ 정의&lt;br /&gt;

&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=590 bgColor=#d6f3f9&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;100%&quot;&gt;&amp;nbsp; CREATE SEQUENCE TEST_SEQ INCREMENT BY 1 START WITH 1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
&lt;br /&gt;3. PL/SQL로&amp;nbsp; 20 만건 데이터 입력&lt;br /&gt;

&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=590 bgColor=#d6f3f9&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;100%&quot;&gt;&amp;nbsp;DECLARE &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; I NUMBER;&lt;br /&gt;
BEGIN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; FOR I IN 1..200000 LOOP&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INSERT INTO T_TEST ( NID, NVALUE ) VALUES ( TEST_SEQ.NEXTVAL, 1000000000 );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; END LOOP;&lt;br /&gt;
END;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
이렇게 해서 넣었다..;;&lt;br /&gt;
초기초라고 놀려도 크게 상관엄뜸!! (흥!)..&lt;br /&gt;
&lt;br /&gt;[EOF]&lt;br /&gt;</description>
			<category>ORACLE</category>
			<author>쮠이</author>
			<guid>http://letter20.tistory.com/19</guid>
			<comments>http://letter20.tistory.com/entry/%EB%8C%80%EC%9A%A9%EB%9F%89-%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EC%9C%84%ED%95%9C-PLSQL-%EB%8D%94%EB%AF%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9E%85%EB%A0%A5#entry19comment</comments>
			<pubDate>Thu, 13 Jan 2011 10:55:55 +0900</pubDate>
		</item>
		<item>
			<title>오라클에서 동적 아이피 사용시 리스너 파일 수정하기</title>
			<link>http://letter20.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4%EC%97%90%EC%84%9C-%EB%8F%99%EC%A0%81-%EC%95%84%EC%9D%B4%ED%94%BC-%EC%82%AC%EC%9A%A9%EC%8B%9C-%EB%A6%AC%EC%8A%A4%EB%84%88-%ED%8C%8C%EC%9D%BC-%EC%88%98%EC%A0%95%ED%95%98%EA%B8%B0</link>
			<description>&lt;br /&gt;
1. &amp;nbsp;%오라클 설치폴더% / product/10.2.0/db_1/NETWORK/ADMIN/listener.ora 파일 오픈&lt;br /&gt;
&lt;br /&gt;
&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=590 bgColor=#e0f0e9&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;100%&quot;&gt;
&lt;P&gt;&lt;br /&gt;
&amp;nbsp;# listener.ora Network Configuration File: C:\oracle\product\10.2.0\db_2\network\admin\listener.ora&lt;br /&gt;
# Generated by Oracle configuration tools.&lt;/P&gt;
&lt;P&gt;SID_LIST_LISTENER =&lt;br /&gt;
&amp;nbsp; (SID_LIST =&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (SID_DESC =&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SID_NAME = PLSExtProc)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (ORACLE_HOME = C:\oracle\product\10.2.0\db_2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (PROGRAM = extproc)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;
&amp;nbsp; )&lt;/P&gt;
&lt;P&gt;LISTENER =&lt;br /&gt;
&amp;nbsp; (DESCRIPTION_LIST =&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (DESCRIPTION =&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (ADDRESS = (PROTOCOL = TCP)(&lt;FONT color=#e31600&gt;HOST = 192.168.0.3&lt;/FONT&gt;)(&lt;FONT color=#e31600&gt;PORT = 1521&lt;/FONT&gt;))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;
&amp;nbsp; )&lt;br /&gt;
&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
- 윗쪽 소스에서&amp;nbsp; HOST 주소와 PORT 번호를 확인한다&lt;br /&gt;
&lt;br /&gt;2.&amp;nbsp;&amp;nbsp;%오라클 설치폴더% / product/10.2.0/db_1/NETWORK/ADMIN/tnsname.ora 파일 오픈&lt;br /&gt;
&lt;br /&gt;
&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=590 bgColor=#e0f0e9&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;100%&quot;&gt;
&lt;P&gt;&amp;nbsp;# tnsnames.ora Network Configuration File: C:\oracle\product\10.2.0\db_2\network\admin\tnsnames.ora&lt;br /&gt;
# Generated by Oracle configuration tools.&lt;/P&gt;
&lt;P&gt;ORCL =&lt;br /&gt;
&amp;nbsp; (DESCRIPTION =&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (ADDRESS = (PROTOCOL = TCP)(&lt;FONT color=#e31600&gt;HOST = 192.168.0.3&lt;/FONT&gt;)(&lt;FONT color=#e31600&gt;PORT = 1521&lt;/FONT&gt;))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (CONNECT_DATA =&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SERVER = DEDICATED)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SERVICE_NAME = orcl)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;
&amp;nbsp; )&lt;/P&gt;
&lt;P&gt;EXTPROC_CONNECTION_DATA =&lt;br /&gt;
&amp;nbsp; (DESCRIPTION =&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (ADDRESS_LIST =&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (CONNECT_DATA =&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SID = PLSExtProc)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (PRESENTATION = RO)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;
&amp;nbsp; )&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
&lt;br /&gt;3. 리스너를 시작한다&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp; lsnrctl&amp;nbsp; start&amp;nbsp; ( 시작시 )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;-&amp;nbsp; lsnrctl&amp;nbsp; stop&amp;nbsp; ( 종료시 )&lt;br /&gt;
&lt;br /&gt;윈도우 커멘드 창에서 아래 명령어로 시작/종료를 할수있다&lt;br /&gt;</description>
			<category>ORACLE</category>
			<author>쮠이</author>
			<guid>http://letter20.tistory.com/18</guid>
			<comments>http://letter20.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4%EC%97%90%EC%84%9C-%EB%8F%99%EC%A0%81-%EC%95%84%EC%9D%B4%ED%94%BC-%EC%82%AC%EC%9A%A9%EC%8B%9C-%EB%A6%AC%EC%8A%A4%EB%84%88-%ED%8C%8C%EC%9D%BC-%EC%88%98%EC%A0%95%ED%95%98%EA%B8%B0#entry18comment</comments>
			<pubDate>Wed, 27 Oct 2010 00:05:54 +0900</pubDate>
		</item>
		<item>
			<title>오라클에서 CSV 파일을 Table에 Insert 하기</title>
			<link>http://letter20.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4%EC%97%90%EC%84%9C-CSV-%ED%8C%8C%EC%9D%BC%EC%9D%84-Table%EC%97%90-Insert-%ED%95%98%EA%B8%B0</link>
			<description>&lt;br /&gt;
1. 우선 CSV 파일을 생성한다 &lt;br /&gt;
&amp;nbsp;&amp;nbsp; 엑셀파일일 경우 새로저장을 누르고 쉼표 ( , ) 로 나뉘는 CSV 파일로 저장한다&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
2. 확장명이 ctl 인 파일을 생성한다&lt;br /&gt;
&lt;br /&gt;
&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=590 bgColor=#e0f0e9&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;100%&quot;&gt;&amp;nbsp;LOAD DATA&lt;br /&gt;
&amp;nbsp;INFILE [ csv 파일의 위치 ]&lt;br /&gt;
&amp;nbsp;APPEND&lt;br /&gt;
&amp;nbsp;INTO TABLE [ 테이블명 ]&lt;br /&gt;
&amp;nbsp;FIELDS TEMINATED BY &#039;,&#039;&lt;br /&gt;
&amp;nbsp;( 테이블의 컬럼들을 &#039; &#039;, 로 전부 입력한다 )&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;ex ) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; LOAD DATA&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; INFILE&amp;nbsp;&lt;FONT color=#e31600&gt;&#039;C:\test.csv&#039;&lt;/FONT&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; APPEND&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO TABLE&amp;nbsp;&lt;FONT color=#e31600&gt;T_ZIPCODE&lt;br /&gt;
&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FIELDS TEMINATED BY &lt;FONT color=#e31600&gt;&#039;,&#039;&lt;br /&gt;
&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#e31600&gt;( zipcode, do, city, gugun, dong, bunji )&lt;br /&gt;
&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * 테이블에 맞게끔 수정하시면 됩니다&lt;br /&gt;
&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
&lt;br /&gt;3. cmd 에서 실행한다&lt;br /&gt;
&lt;br /&gt;
&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=590 bgColor=#e0f0e9&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;100%&quot;&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;sqlldr [사용자계정] / [비밀번호] control=[ctl 파일위치] Log=[로그를 만들 파일위치]&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;ex :&lt;FONT color=#e31600&gt; &lt;/FONT&gt;&lt;FONT color=#e31600&gt;sqlldr SYSMAN/ADMIN control=C:\test.ctl LOG=C:\log.log&lt;br /&gt;
&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;</description>
			<category>ORACLE</category>
			<author>쮠이</author>
			<guid>http://letter20.tistory.com/17</guid>
			<comments>http://letter20.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4%EC%97%90%EC%84%9C-CSV-%ED%8C%8C%EC%9D%BC%EC%9D%84-Table%EC%97%90-Insert-%ED%95%98%EA%B8%B0#entry17comment</comments>
			<pubDate>Tue, 26 Oct 2010 23:38:03 +0900</pubDate>
		</item>
		<item>
			<title>오라클 사용자 생성 / 삭제</title>
			<link>http://letter20.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%83%9D%EC%84%B1-%EC%82%AD%EC%A0%9C</link>
			<description>&lt;br /&gt;
- 오라클 SQL Plus 를 실행 후에 관리자 모드로 들어가서 사용자 생성을 한다&lt;br /&gt;
&lt;br /&gt;1. 사용자 생성&lt;br /&gt;
&lt;br /&gt;
&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=590 bgColor=#e0f0e9&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;100%&quot;&gt;&lt;br /&gt;
&amp;nbsp;CREATE USER [계정명 ] IDENTIFIED by [ 암호 ] DEFAULT TABLESPACE [ DB 명 ]&lt;br /&gt;
&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
&lt;br /&gt;2. 사용자 Connect 권한 부여&lt;br /&gt;
&lt;br /&gt;
&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=590 bgColor=#e0f0e9&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;100%&quot;&gt;&amp;nbsp;&lt;br /&gt;
GRANT CONNECT, RESOURCE TO [ 계정명 ]&lt;br /&gt;
&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
&lt;br /&gt;3.&amp;nbsp; 사용자 삭제&lt;br /&gt;
&lt;br /&gt;
&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=590 bgColor=#e0f0e9&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;100%&quot;&gt;&amp;nbsp;&lt;br /&gt;
DROP USER [ 계정명 ]&amp;nbsp; ( CASCADE )&lt;br /&gt;
&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;* 계정과 관련된 모든 DB 스키마가 사전으로부터 삭제, 모든 스키마 객체들 또한 물리적으로 삭제&lt;br /&gt;</description>
			<category>ORACLE</category>
			<author>쮠이</author>
			<guid>http://letter20.tistory.com/16</guid>
			<comments>http://letter20.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%83%9D%EC%84%B1-%EC%82%AD%EC%A0%9C#entry16comment</comments>
			<pubDate>Tue, 26 Oct 2010 23:21:14 +0900</pubDate>
		</item>
		<item>
			<title>개발자의 실수를 줄여주는 java.sql.Connection 만들기</title>
			<link>http://letter20.tistory.com/entry/%EA%B0%9C%EB%B0%9C%EC%9E%90%EC%9D%98-%EC%8B%A4%EC%88%98%EB%A5%BC-%EC%A4%84%EC%97%AC%EC%A3%BC%EB%8A%94-javasqlConnection-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
			<description>&lt;H1&gt;&lt;A onclick=&quot;window.open(this.href);return false;&quot; href=&quot;http://cafe.naver.com/q69/7302&quot; jQuery1272853110276=&quot;7&quot;&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-SIZE: 8pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;http://cafe.naver.com/q69/7302&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;SPAN style=&quot;FONT-SIZE: 8pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;br /&gt;
&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;주소 : &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A class=con_link href=&quot;http://javateam.korea.ac.kr/javacan/content/contentRead.jsp?contentNo=78&amp;amp;block=1&quot; target=_blank&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;tp://javateam.korea.ac.kr/javacan/content/contentRead.jsp?contentNo=78&amp;amp;block=1&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;/H1&gt;
&lt;DIV class=readBody&gt;
&lt;DIV class=contentBody&gt;
&lt;DIV class=&quot;document_6936_0 xe_content&quot; jQuery1272853110276=&quot;107&quot;&gt;&lt;BR jQuery1272853110276=&quot;9&quot;&gt;
&lt;P jQuery1272853110276=&quot;10&quot;&gt;&lt;SPAN class=contentSubject jQuery1272853110276=&quot;59&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;흔히 close()를 하지 않아서 발생하는 자원 누수 현상을 줄여주는 Connection 클래스를 만들어본다.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;BR jQuery1272853110276=&quot;11&quot;&gt;
&lt;P jQuery1272853110276=&quot;12&quot;&gt;&lt;BR jQuery1272853110276=&quot;62&quot;&gt;&lt;B jQuery1272853110276=&quot;63&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;요약&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt; &lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;웹 어플리케이션을 개발할 때 가장 많이 사용되는 것 중의 한 가지를 꼽으라면 java.sql 패키지에 있는 ResultSet, Statement, Connection 등을 들 수 있다. 이들은 사용하고 나면 close() 메소드를 호출하여 사용이 끝난 자원을 시스템에 반환하는 것이 기본인데, 간혹 실수로 코드를 잘못 작성하여 close()를 빼 먹는 경우가 있다. 이 글에서는 이러한 실수를 줄여줄 수 있는 MVConnection 클래스를 작성해보도록 하겠다. &lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;프로바이더: &lt;/SPAN&gt;&lt;B&gt;&lt;A class=con_link href=&quot;mailto:%20madvirus@madvirus.net&quot; target=_blank jQuery1272853110276=&quot;66&quot;&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;최범균&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P jQuery1272853110276=&quot;14&quot;&gt;&lt;U jQuery1272853110276=&quot;67&quot;&gt;&lt;FONT color=#0000ff jQuery1272853110276=&quot;69&quot;&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR jQuery1272853110276=&quot;15&quot;&gt;
&lt;P jQuery1272853110276=&quot;16&quot;&gt;&lt;STRONG jQuery1272853110276=&quot;70&quot;&gt;&lt;SPAN class=contentSubSubject jQuery1272853110276=&quot;71&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;JDBC API 사용시 흔히 하는 개발자의 실수&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;BR jQuery1272853110276=&quot;17&quot;&gt;
&lt;P jQuery1272853110276=&quot;18&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;JDBC API를 사용하여 데이터베이스 프로그래밍을 할 때 가장 많이 사용되는 코드는 아마도 다음과 같은 형태일 것이다.&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE class=code jQuery1272853110276=&quot;19&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    Connection conn = null;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    Statement stmt = null;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    ResultSet rs = null;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;
    try {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        conn = DBPool.getConnection(); //&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        stmt = conn.createStatement();&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        rs = stmt.executeQuery(..);&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        ...&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    } catch(SQLException ex) {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        // 예외 처리&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    } finally {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        if (rs != null) try { rs.close(); } catch(SQLException ex) {}&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        if (stmt != null) try { stmt.close(); } catch(SQLException ex) {}&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        if (conn != null) try { conn.close(); } catch(SQLException ex) {}&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    }&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;BR jQuery1272853110276=&quot;20&quot;&gt;
&lt;P jQuery1272853110276=&quot;21&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;그런데 위와 같은 프로그래밍을 할 때 흔히 하는 실수가 close()를 제대로 해 주지 않는 것이다. 특히, 하나의 메소드에서 5-10개의 (PreparedStatement를 포함한)Statement와 ResultSet을 사용하는 경우에는 개발자의 실수로 같은 Statement를 두번 close() 하고 한두개의 Statement나 ResultSet은 닫지 않는 실수를 하곤 한다. 이처럼 close() 메소드를 알맞게 호출해주지 않을 경우에는 다음과 같은 문제가 발생한다.&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL jQuery1272853110276=&quot;23&quot;&gt;&lt;BR jQuery1272853110276=&quot;75&quot;&gt;
&lt;LI jQuery1272853110276=&quot;76&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;Statement를 닫지 않을 경우, 생성된 Statement의 개수가 증가하여 더 이상 Statement를 생성할 수 없게 된다. &lt;/SPAN&gt;&lt;br /&gt;

&lt;LI jQuery1272853110276=&quot;77&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;close() 하지 않으므로 불필요한 자원(네트워크 및 메모리)을 낭비하게 된다. &lt;/SPAN&gt;&lt;br /&gt;

&lt;LI jQuery1272853110276=&quot;78&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;커넥션 풀을 사용하지 않는 상황에서 Connection을 닫지 않으면 결국엔 DBMS에 연결된 새로운 Connection을 생성할 수 없게 된다. &lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;BR jQuery1272853110276=&quot;24&quot;&gt;
&lt;P jQuery1272853110276=&quot;25&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;위의 문제중 첫번째와 두번째 문제는 시간이 지나면 가비지 콜렉터에 의해서 해결될 수도 있지만, 만약 커넥션 풀을 사용하고 있다면 그나마 가비지 콜렉션도 되지 않는다. 따라서 커넥션 풀을 사용하는 경우 Statement와 ResultSet은 반드시 닫아주어야만 한다. 하지만, 제아무리 실력이 뛰어난 개발자라 할지라도 각각 수십에서 수백줄로 구성된 수십여개의 .java 파일을 모두 완벽하게 코딩할 수는 없으며, 따라서 한두군데는 close()를 안 하기 마련이다. 운이 좋으면 빨리 찾을 수 있겠지만, 그렇지 않다면 close() 안한 부분을 찾는 데 몇십분, 몇시간, 심한 경우 1-2일 정도가 걸리기도 한다.&lt;/SPAN&gt;&lt;/P&gt;&lt;BR jQuery1272853110276=&quot;26&quot;&gt;
&lt;P jQuery1272853110276=&quot;27&quot;&gt;&lt;SPAN class=contentSubSubject jQuery1272853110276=&quot;83&quot;&gt;&lt;STRONG jQuery1272853110276=&quot;84&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;Statement를 자동으로 닫아주는 MVConnection 클래스 구현&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR jQuery1272853110276=&quot;28&quot;&gt;
&lt;P jQuery1272853110276=&quot;29&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;실제로 필자도 앞에서 언근했던 문제들 때문에 고생하는 사람들을 종종 봐 왔었으며, 그때마다 그 버그를 고치기 위해서 소스 코드를 일일이 찾아보는 노가다를 하는 개발자들을 보기도 했다. 그래서 만든 클래스가 있는데, 그 클래스의 이름을 MVConnection이라고 붙였다. 이름이야 여러분의 입맛에 맛게 수정하면 되는 것이므로, 여기서는 원리만 간단하게 설명하도록 하겠다.&lt;/SPAN&gt;&lt;/P&gt;&lt;BR jQuery1272853110276=&quot;30&quot;&gt;
&lt;P jQuery1272853110276=&quot;31&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;먼저, MVConnection을 구현하기 전에 우리가 알고 있어야 하는 기본 사항이 있다. JDBC API를 유심히 읽어본 사람이라면 다음과 같은 내용을 본 적이 있을 것이다.&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL jQuery1272853110276=&quot;33&quot;&gt;&lt;BR jQuery1272853110276=&quot;88&quot;&gt;
&lt;LI jQuery1272853110276=&quot;89&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;Statement를 close() 하면 Statement의 현재(즉, 가장 최근에 생성한) ResultSet도 close() 된다. &lt;/SPAN&gt;&lt;br /&gt;

&lt;LI jQuery1272853110276=&quot;90&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;ResultSet은 그 ResultSet을 생성한 Statement가 닫히거나, 또는 executeQuery 메소드를 실행하는 경우 close() 된다. &lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;BR jQuery1272853110276=&quot;34&quot;&gt;
&lt;P jQuery1272853110276=&quot;35&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;MVConnection은 바로 이 두가지 특성을 사용한다. 위의 두 가지 특징을 정리하면 결국 Statement만 알맞게 닫아주면 그와 관련된 ResultSet은 자동으로 닫힌다는 것을 알 수 있다. 따라서 ConnectionWrapper 클래스는 Connection이 생성한 Statement들만 잘 보관해두었다가 각 Statement를 닫아주기만 하면 되는 것이다. PreparedStatement나 CallableStatement는 Statement를 상속하고 있으므로 따로 처리할 필요 없이 Statement 타입으로 모두 처리할 수 있으므로, PreparedStatement와 CallableStatement를 위한 별도의 코드는 필요하지 않다.&lt;/SPAN&gt;&lt;/P&gt;&lt;BR jQuery1272853110276=&quot;36&quot;&gt;
&lt;P jQuery1272853110276=&quot;37&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;다음은 MVConnection 클래스의 핵심 코드이다.&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE class=code jQuery1272853110276=&quot;38&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    public class MVConnection &lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;implements Connection&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt; {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;
       private Connection conn; // 실제 커넥션&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        private java.util.List &lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;statementList&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;; // statement를 저장&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;
&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        public MVConnection(Connection conn) {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            this.conn = conn;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            statementList = new java.util.ArrayList();&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;       }&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;
&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        public void &lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;closeAll()&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt; {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            for (int i = 0 ; i &amp;lt; statementList.size() ; i++) {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;                Statement stmt = (Statement)statementList.get(i);&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;                try {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;                    &lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;stmt.close()&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;                } catch(SQLException ex) {}&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            }&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        }&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;
        public void close() throws SQLException {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            &lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;this.closeAll();&lt;/SPAN&gt;&lt;/B&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            conn.close();&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        }&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;
&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        public Statement createStatement() throws SQLException {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            Statement stmt = conn.createStatement();&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            statementList.add(stmt);&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            return stmt;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        }&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;
&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        public CallableStatement prepareCall(String sql) throws SQLException &lt;br /&gt;
        {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            CallableStatement cstmt = conn.prepareCall(sql);&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            statementList.add(cstmt);&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            return cstmt;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        }&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;
&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        public PreparedStatement prepareStatement(String sql) throws SQLException {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            PreparedStatement pstmt = conn.prepareStatement(sql);&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            statementList.add(pstmt);&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            return pstmt;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        }&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        ...&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    }&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;

&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P jQuery1272853110276=&quot;40&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;위 코드를 보면 Statement를 저장하기 위한 List와 그 List에 저장된 Statement 객체를 모두 닫아주는 closeAll() 이라는 메소드가 정의되어 있다. 바로 이 List와 closeAll() 메소드가 이 MVConnection 클래스의 핵심이다. Statement를 생성해주는 메소드(createStatement, prepareCall, prepareStatement)를 보면 생성된 Statement를 statemetList에 추가해주는 것을 알 수 있다. 이렇게 저장된 Statement는 실제로 Connection을 닫을 때, 즉 Connection의 close() 메소드를 호출할 때 닫힌다. (코드를 보면 close() 메소드에서 closeAll() 메소드를 먼저 호출하고 있다.) 따라서, close() 메소드만 호출하면 그와 관련된 모든 Statement와 ResultSet은 자동으로 닫히게 된다.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P jQuery1272853110276=&quot;42&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;위 코드에서 다른 메소드들은 모두 다음과 같이 간단하게 구현된다.&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE class=code jQuery1272853110276=&quot;43&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    public boolean getAutoCommit() throws SQLException {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        return conn.getAutoCommit();&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    }&lt;/SPAN&gt;&lt;BR jQuery1272853110276=&quot;44&quot;&gt;&lt;/PRE&gt;
&lt;P jQuery1272853110276=&quot;45&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;MVConnection은 java.sql.Connection을 implements 하기 때문에, 그 자체가 Connection으로 사용될 수 있다. 따라서 MVConnection을 사용한다고 해서 특별히 코드가 많이 변경되지는 않으며 다음과 같이 전체적으로 코드가 단순하게 바뀐다.&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE class=code jQuery1272853110276=&quot;46&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    Connection conn = null;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    Statement stmt = null;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    ResultSet rs = null;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;
    try {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        // MV Connection 생성&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        conn = &lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;new MVConnection(DBPool.getConnection())&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;       stmt = conn.createStatement();&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;       rs = stmt.executeQuery(..);&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;       ...&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    } catch(SQLException ex) {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;      // 예외 처리&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    } finally {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;     // conn 만 close() 해준다.&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;     if (conn != null) try { &lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;conn.close()&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;; } catch(SQLException ex) {}&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;   }&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;BR jQuery1272853110276=&quot;47&quot;&gt;
&lt;P jQuery1272853110276=&quot;48&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;때에 따라서는 Connection을 close() 하지 않고 커넥션 풀에 되돌려 놔야 할 때가 있다. 그런 경우에는 다음과 같은 형태의 코드를 사용하면 된다.&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE class=code jQuery1272853110276=&quot;49&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    Connection conn = null;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    Statement stmt = null;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    ResultSet rs = null;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;
    try {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        // MV Connection 생성&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        conn = &lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;new MVConnection(DBPool.getConnection())&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;       stmt = conn.createStatement();&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;       rs = stmt.executeQuery(..);&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;       ...&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    } catch(SQLException ex) {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;      // 예외 처리&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    } finally {&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        if (conn != null) try { &lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            ((MVConnection)conn).&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;closeAll()&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;;&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;            DBPool.returnConnection(conn);&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;        } catch(SQLException ex) {}&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;    }&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;

&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P jQuery1272853110276=&quot;51&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;즉, Connection을 닫지 않는 경우에는 위와 같이 커넥션 풀에 반환하기 전에 closeAll() 메소드 하나만을 호출해주면 된다. 그러면 Connection과 관련된 모든 Statement, ResultSet 등이 닫히게 된다.&lt;/SPAN&gt;&lt;/P&gt;&lt;BR jQuery1272853110276=&quot;52&quot;&gt;
&lt;P jQuery1272853110276=&quot;53&quot;&gt;&lt;FONT size=4 jQuery1272853110276=&quot;100&quot;&gt;&lt;B jQuery1272853110276=&quot;101&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;결론&lt;/SPAN&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P jQuery1272853110276=&quot;55&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;필자의 경우는 이 글에서 작성한 MVConnection을 실제 프로젝트에 응용하여 코드 작성의 편리함 뿐만 아니라 실수로 인해서 발생하는 시스템의 버그 문제를 어느 정도 해결할 수 있었다. 특히, Statement를 생성하거나 ResultSet을 생성할 때 발생하는 커서부족 문제를 획기적으로 줄일 수 있었다. 여러분도 이 클래스를 응용하여 보다 나은 방법으로 코딩의 실수 및 자원의 낭비를 줄일 수 있는 클래스를 작성해보기 바란다.&lt;/SPAN&gt;&lt;br /&gt;
&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
			<category>JAVA</category>
			<author>쮠이</author>
			<guid>http://letter20.tistory.com/12</guid>
			<comments>http://letter20.tistory.com/entry/%EA%B0%9C%EB%B0%9C%EC%9E%90%EC%9D%98-%EC%8B%A4%EC%88%98%EB%A5%BC-%EC%A4%84%EC%97%AC%EC%A3%BC%EB%8A%94-javasqlConnection-%EB%A7%8C%EB%93%A4%EA%B8%B0#entry12comment</comments>
			<pubDate>Mon, 03 May 2010 11:39:13 +0900</pubDate>
		</item>
		<item>
			<title>자바 개발자를 위한 개발 공감 세미나 참가 신청 !!</title>
			<link>http://letter20.tistory.com/entry/%EC%9E%90%EB%B0%94-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-%EA%B0%9C%EB%B0%9C-%EA%B3%B5%EA%B0%90-%EC%84%B8%EB%AF%B8%EB%82%98-%EC%B0%B8%EA%B0%80-%EC%8B%A0%EC%B2%AD</link>
			<description>&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/141BC80E4B626B5568A1FA&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;679&quot; width=&quot;521&quot;/&gt;&lt;/div&gt;&lt;br /&gt;
ㅎㅎ 2. 20 토요일 오후 1시&amp;nbsp; 참가 신청을 했다&lt;br /&gt;
그날 오후에 약속이 있어서 서울 올라갈 일이 있었는데 때마침 좋은 세미나가 있어서&lt;br /&gt;
기술현황이나 사람들 이야기를 들어볼 수 있는 기회를 가진것 같다 &lt;br /&gt;
&lt;br /&gt;더군다나..아이폰.. ㅎㅎ..&lt;br /&gt;
아이폰 개발을 해보리라 준비하는 단계에서 좋은 얘기를 들어볼 수 있을것 같다.&lt;br /&gt;
기대된다!!~!! 그날이여 어여 오시게나;;&amp;nbsp; 설끝나고;; 후딱 오겠군 ㅋ&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;</description>
			<category>일상 이야기</category>
			<category>자바 세미나</category>
			<author>비회원</author>
			<guid>http://letter20.tistory.com/11</guid>
			<comments>http://letter20.tistory.com/entry/%EC%9E%90%EB%B0%94-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-%EA%B0%9C%EB%B0%9C-%EA%B3%B5%EA%B0%90-%EC%84%B8%EB%AF%B8%EB%82%98-%EC%B0%B8%EA%B0%80-%EC%8B%A0%EC%B2%AD#entry11comment</comments>
			<pubDate>Fri, 29 Jan 2010 11:07:40 +0900</pubDate>
		</item>
		<item>
			<title>Struts2 개발시 Illegal Access 예외발생시 대처</title>
			<link>http://letter20.tistory.com/entry/Struts2-%EA%B0%9C%EB%B0%9C%EC%8B%9C-Illegal-Access-%EC%98%88%EC%99%B8%EB%B0%9C%EC%83%9D%EC%8B%9C-%EB%8C%80%EC%B2%98</link>
			<description>&lt;br /&gt;

&lt;P&gt;&lt;STRONG&gt;예외명&lt;br /&gt;
&lt;br /&gt;Illegal access: this web application instance has &lt;SPAN class=copyAngel_bungsama_LinkUp original=&quot;http://bungsama.textcube.com/45&quot; entryid=&quot;45&quot;&gt;&lt;SPAN style=&quot;DISPLAY: none&quot; class=copyAngel_bungsama_LinkUp_local&gt;been&lt;/SPAN&gt;&lt;/SPAN&gt; stopped already&amp;nbsp;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=c&gt;&lt;STRONG&gt;&lt;SPAN class=copyAngel_bungsama_Callback entryid=&quot;45&quot; host=&quot;http%3A%2F%2Fbungsama.textcube.com&quot;&gt;&lt;SPAN class=copyAngel_bungsama_Callback entryid=&quot;45&quot; host=&quot;http%3A%2F%2Fbungsama.textcube.com&quot;&gt;이클립스에 등록된 Servers의 Tomcat Server.XML 환경설정 파일을 열어서&lt;br /&gt;
&lt;br /&gt;...&lt;br /&gt;
&amp;lt;Context docBase=&quot;프로젝트명&quot;&amp;nbsp;&lt;br /&gt;
&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN class=copyAngel_bungsama_Callback entryid=&quot;45&quot; host=&quot;http%3A%2F%2Fbungsama.textcube.com&quot;&gt;&lt;SPAN class=copyAngel_bungsama_Callback entryid=&quot;45&quot; host=&quot;http%3A%2F%2Fbungsama.textcube.com&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;path=&quot;/프로젝트명&quot;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reloadable=&quot;true&quot;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;source=&quot;org.eclipse.jst.jee.server:프로젝트명&quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;이 부분에서 검색하면 세번째 설정으로 reloadable 을 &quot;false&quot; 로 바꾼후 톰켓 재시작&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
PS : Struts2 좋긴한데.. 설정이라던지 환경잡는게 너무 많아;;; 게다가 Spring + Ibatis&amp;nbsp; 까지하면 ㄷㄷㄷ&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 수정하기 편하라고 개발일정 늦어지면;; 어케 ㅠㅜ&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;</description>
			<category>JAVA</category>
			<author>비회원</author>
			<guid>http://letter20.tistory.com/10</guid>
			<comments>http://letter20.tistory.com/entry/Struts2-%EA%B0%9C%EB%B0%9C%EC%8B%9C-Illegal-Access-%EC%98%88%EC%99%B8%EB%B0%9C%EC%83%9D%EC%8B%9C-%EB%8C%80%EC%B2%98#entry10comment</comments>
			<pubDate>Thu, 24 Dec 2009 10:18:17 +0900</pubDate>
		</item>
	</channel>
</rss>

