# DB 연동
- 기존방식은 호출될때 db연결함 그래서 느려짐
- 하지만이제 Connection객체를 미리 10개를 생성해둠 pool( 메모리에 )
- 이것이 db 풀링 기법!!!
# db풀링기법( 커넥션풀 ) 하는법
톰캣이 켜지자말자 10~20개미리만들어놓음
1.톰캣홈피에가서 jdbc부분에서 잘찾아볼것 oracle부분을
2.server.xml에 36번쯤에있는 <GlobalNamingResources>안에 붙혀넣기
<Resource name="jdbc/myoracle"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:xe"
username="scott"
password="tiger"
maxActive="20"
maxIdle="10"
maxWait="-1" />
127.0.0.1 이 localhost 임!
3. context.xml에서 맨밑에 종료안에넣기
<ResourceLink global="jdbc/myoracle" name="jdbc/myoracle" type="javax.sql.DataSource"/>
4. 기존의DBConnect를 다음과같이 만듬
ConnUtil.java
=============================
package com.joo.common.util;
import java.sql.SQLException;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class ConnUtil{
public static Connection getConnection() throws SQLException, NamingException,
ClassNotFoundException{
// comp/env는 리소스가 저장되어있는? jndi 디폴트 경로라는데... 걍쓸것
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/myoracle");
// 혹은 간단히 이렇게 해도됨
// Context initCtx = new InitalContext();
// DataSource ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/myoracle");
Connection conn = ds.getConnection();
return conn;
}
}
5. a.jsp 에서 다음과같이 실행하면 접속정보출력
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="com.joo.common.util.*" %>
<%@ page import="java.sql.*" %>
<%
Connection conn=ConnUtil.getConnection();
%>
<%=conn%>
6. a.jsp 에서 다음과같이 실행하면 DB연동 테스트완료(이방식말고 conn.prepareStatement 방식도 있음! )
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding= "EUC-KR"%>
<%@ page import="com.joo.common.util.*" %>
<%@ page import="java.sql.*" %>
<%
Connection conn=ConnUtil.getConnection(); // DB접속정보 객체 가져옴
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery( "select empno from emp");
while(rs.next()){
out.println(rs.getInt( "empno")+"<br>" );
}
%>
prepareStatement방식( 이방식이 효율적임 )
( 위처럼 jsp가 아닌 java에서(백엔드라서?) 코딩 )
import test10.ConnUtil;
import java.util.*;
import java.sql.*;
public class BoardDAO{
...
public Board selectBoard(int board_seq){
Connection conn = null;
PreparedStatement pstmt = null;
try{
StringBuffer selectQuery = new StringBuffer();
selectQuery.append("select * from newBoard");
selectQuery.append("where board_seq = ?");
conn = ConnUtil.getConnection();
pstmt = conn.prepareStatement(selectQuery.toString());
pstmt.setInt( 1, board_seq );
ResultSet rs = pstmt.executeQuery();
Board board = null;
if( rs.next() ){
board = new Board();
board.setBoard_seq( rs.getInt("board_seq") );
board.setRef_seq( rs.getInt("ref_seq") );
}
}catch( Exception e ){
tyrow new RuntimeException( e.getMessage() );
}finally{
try{
pstmt.close();
conn.close();
pstmt = null;
conn = null;
}catch( Exception e ){
}
}
}
}
* 만약 이클립스에서 서버 삭제후 재 추가시 server name이 빈칸으로 나올때 다음과같이 이클립스 설정정보를 삭제해야한다.
1. Close Eclipse
2. 워크스페이스/.metadata/.plugins/org.eclipse.core.runtime/.settings 에 다음 두파일을 삭제해야함!
=> org.eclipse.wst.server.core.prefs
org.eclipse.jst.server.tomcat.core.prefs
3. Restart Eclipse
'JSP' 카테고리의 다른 글
JSP 경로 / 파일관련 (0) | 2019.03.09 |
---|---|
include지시자 / 쿠키 (0) | 2019.03.09 |
현재 접속자수 표시 (0) | 2019.03.09 |
로그인 화면이동( 화면이동방법 3가지 ) (0) | 2019.03.09 |
총 방문자수 찍기 (0) | 2019.03.09 |