http://www.wiz.center/204
http://www.wiz.center/205
http://www.wiz.center/206
http://www.wiz.center/207
의 동영상 강의를 시청하고 작성한 글입니다.
새로 시작하는 경우라면 위 링크의 동영상 강의를
들어보세요
1. JDBC - mysql
JAVA API로 SQL문을 실행하여 데이터를 관리하기 위한 목적으로 제작됨
DB 연결을 위한 별도 작업 없이 해당 라이브러리를 추가함으로서
JAVA에서 쿼리문을 실행 가능하게끔 함.
강의에서는 Oracel JDBC를 설명하나 여기서는 좀 가볍고 테스트 쉬운
Mysql로 작업을 진행하도록 함.
JDBC jar 드라이버는 아래 링크를 참고
http://ggoreb.tistory.com/121
http://hyeonstorage.tistory.com/112
2. 설정 방법
1) mysql-connector-java-x.x.xx.jar (버전마다 상이함) 다운로드
다운로드는 상단 JDBC 소계 링크에서 확인하여 구한다.
3) jsp 파일에서 db 연결 설정
4) 사용
resultSet 객체가 제공하는 함수를 이용해서 select 문에서
받아낸 인자를 뽑아낼 수 있다.
해당 클래스 관련 정보는 아래를 참고
http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html
여긴 한글 설명
http://noritersand.tistory.com/96
5) 예제
------------------------------------
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%!
Connection connection;
Statement statement;
ResultSet resultSet;
// String driver = "oracle.jdbc.driver.OracleDriver";
// String url = "jdbc:oracle:thin:@localhost:1521:xe";
// String uid = "root";
// String upw = "tiger";
// String query = "select * from member";
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3336/jspex";
String uid = "root";
String upw = "";
String query = "select * from jspex.member";
//table이 없는 경우 아래 쿼리로 table 생성 및 자료를 입력한다.
// create table member (
// id varchar(20) primary key,
// pw varchar(20),
// name varchar(20),
// phone varchar(20));
//insert into member(id, pw,name,phone) values('abc','123','김수필','010-2222-3333');
// *insert를 4번 정도 입력하세요 다른 정보로
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>start</h1>
<%
out.println(driver);
out.println(url);
out.println(uid);
out.println(upw);
try{
Class.forName(driver); //oracle.jdbc.driver.OracleDriver
connection = DriverManager.getConnection(url, uid, upw); //jdbc:oracle:thin:@localhost:1521:xe
statement = connection.createStatement();
resultSet = statement.executeQuery(query); //select * from member
while(resultSet.next()){
String id = resultSet.getString("id");
String pw = resultSet.getString("pw");
String name = resultSet.getString("name");
String phone = resultSet.getString("phone");
out.println("id : " + id + ", pass : " + pw + ", name : " + name + ", phone : " + phone + "<br />");
}
} catch(Exception e) {
e.printStackTrace();
} finally {
try{
if(resultSet != null) resultSet.close();
if(statement != null) statement.close();
if(connection != null) connection.close();
} catch(Exception e){}
}
%>
</body>
</html>
-----------------------------------
결과 :
3) jsp에서 소스 변경하기
상단 소스 부분에서 변경하고자 한다면
(1) import Statement 를 변경
<%@page import="java.sql.Statement"%>
를
<%@page import="java.sql.PreparedStatement"%>
로 변경
(2) statement 객체생성시 클래스 변경
statement -> PrepareStatement
(3) statement 객체에 connection 함수 변경
기존
// statement = connection.createStatement();
를
statement = connection.prepareStatement(query);
로 변경
3) 결과는 동일하게 출력된다. (그러면 성공)
그러나 강제로 소스로 insert 를 다중으로 진행해야 하는 경우라면
select 로 확인 후 insert를 하거나 update를 타야되는 경우라면
트랜젝션이 2개 이상 쿼리로 구성되는 경우
뿐만 아니라 사용자가 많으면 많을수록 웹서버에서
db정보를 관리하는게 컴파일된 jsp servlet 까지 찾아서
db연결하는것보다 낳다고 본다
결론 : 우리 회사가 어느 부분으로 구현되어 있던지
합당한 이유는 있으니 사용할 수 있도록 준비.
resultSet 객체가 제공하는 함수를 이용해서 select 문에서
받아낸 인자를 뽑아낼 수 있다.
해당 클래스 관련 정보는 아래를 참고
http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html
여긴 한글 설명
http://noritersand.tistory.com/96
5) 예제
------------------------------------
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%!
Connection connection;
Statement statement;
ResultSet resultSet;
// String driver = "oracle.jdbc.driver.OracleDriver";
// String url = "jdbc:oracle:thin:@localhost:1521:xe";
// String uid = "root";
// String upw = "tiger";
// String query = "select * from member";
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3336/jspex";
String uid = "root";
String upw = "";
String query = "select * from jspex.member";
//table이 없는 경우 아래 쿼리로 table 생성 및 자료를 입력한다.
// create table member (
// id varchar(20) primary key,
// pw varchar(20),
// name varchar(20),
// phone varchar(20));
//insert into member(id, pw,name,phone) values('abc','123','김수필','010-2222-3333');
// *insert를 4번 정도 입력하세요 다른 정보로
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>start</h1>
<%
out.println(driver);
out.println(url);
out.println(uid);
out.println(upw);
try{
Class.forName(driver); //oracle.jdbc.driver.OracleDriver
connection = DriverManager.getConnection(url, uid, upw); //jdbc:oracle:thin:@localhost:1521:xe
statement = connection.createStatement();
resultSet = statement.executeQuery(query); //select * from member
while(resultSet.next()){
String id = resultSet.getString("id");
String pw = resultSet.getString("pw");
String name = resultSet.getString("name");
String phone = resultSet.getString("phone");
out.println("id : " + id + ", pass : " + pw + ", name : " + name + ", phone : " + phone + "<br />");
}
} catch(Exception e) {
e.printStackTrace();
} finally {
try{
if(resultSet != null) resultSet.close();
if(statement != null) statement.close();
if(connection != null) connection.close();
} catch(Exception e){}
}
%>
</body>
</html>
-----------------------------------
결과 :
3. 컨넥션 풀이란?
1항목 JDBC를 사용할 경우 1개의 트랜젝션에
여러 쿼리를 써야 할 경우 한번의 쿼리 실행시마다 db와 연결을
요청하고 해제하는 작업이 필요하다
연결에 대한 증명 정보를 서버에 저장하면 트랜젝션 시작~끝내
1번의 연결을 유지할 수 있는 이점이 있어서 이걸 쓴다.
그외에 따로 모듈을 빼서 연결하거나 하는 등의 방식도 있지만
여기서는 컨넥션풀만 다룬다.
4. 설정 방법
1) library 추가
먼저 eclipse 에 tomcat-dbcp가 있는지 확인한다. 없는 경우
설치된 tomcat/lib 폴더밑에 해당 jar 파일을 복사해서 lib밑에
넣어주면 된다.
본인 같은 경우 tomcat을 eclipse 상에 연동했기 때문에
해당 폴더 밑 lib 의 jar 파일들이 다 로드 되어 있는 상태임
만약에 위와 같이 library가 없는 또는 누락된 경우 tomcat/lib
폴더에서 해당 tomcat-dbcp.jar 파일을 찾아서
lib폴더 밑에 붙여준다.
2) server- context.xml 의 Resource 부분 수정
3) jsp에서 소스 변경하기
상단 소스 부분에서 변경하고자 한다면
(1) import Statement 를 변경
<%@page import="java.sql.Statement"%>
를
<%@page import="java.sql.PreparedStatement"%>
로 변경
(2) statement 객체생성시 클래스 변경
statement -> PrepareStatement
(3) statement 객체에 connection 함수 변경
기존
// statement = connection.createStatement();
를
statement = connection.prepareStatement(query);
로 변경
3) 결과는 동일하게 출력된다. (그러면 성공)
그러나 강제로 소스로 insert 를 다중으로 진행해야 하는 경우라면
select 로 확인 후 insert를 하거나 update를 타야되는 경우라면
트랜젝션이 2개 이상 쿼리로 구성되는 경우
뿐만 아니라 사용자가 많으면 많을수록 웹서버에서
db정보를 관리하는게 컴파일된 jsp servlet 까지 찾아서
db연결하는것보다 낳다고 본다
결론 : 우리 회사가 어느 부분으로 구현되어 있던지
합당한 이유는 있으니 사용할 수 있도록 준비.
댓글 없음:
댓글 쓰기