CREATE TABLE member(
id varchar2(10) not null,
pass varchar2(10) not null,
name varchar2(30) not null,
regidate date default sysdate not null,
primary key(id)
);
CREATE TABLE board(
num number not null,
title VARCHAR2(200) not null,
content varchar2(2000) not null,
id varchar2(10) not null,
postdate date default sysdate not null,
visitcount number(6),
primary key(num)
);
alter table board
add constraint board_mem_fk FOREIGN key(id)
REFERENCES member(id);
create sequence seq_board_num
increment by 1
start with 1
minvalue 1
nomaxvalue
nocycle
nocache;
insert into member(id, pass, name) values ('musthave', '1234', '머스트해브');
insert into board(num, title, content, id, postdate, visitcount)
values(seq_board_num.nextval, '제목은1입니다', '내용은1입니다', 'musthave', sysdate, 0);
select *
from member;
select *
from board;
commit;
objdbc.jar
이 있는지 확인6 jar list 있는 거 삭제 후
7.가져온 것을 추가
8 후 설정 해주고 user name과 password는 오라클 접속 할 것에 대한 것들 설정
9.확인
JDBConnect
클래스를 생성package common;
import java.sql.Connection; //인터페이스
import java.sql.DriverManager;
import java.sql.PreparedStatement; //인터페이스
import java.sql.ResultSet; //인터페이스
import java.sql.Statement; //인터페이스
// 1) 기본적인 DB 연결 관리 클래스
public class JDBConnection {
// 1. JDBC 드라이브 로드
// 2. DB연결
// 3, 연결을 통해 쿼리문을 전송
// 4. 결과값을 확인(INSERT, UPDATE, DELETE - 성공, 실패 SELECT - ResultSet)
// 5. 리소스 종료
public Connection con; // 데이터베이스와 연결을 담당
public Statement stmt; //인파라미터가 없는 정적 쿼리문 실행 시 사용
public PreparedStatement pstmt; // 인파라미터가 있는 동적 쿼리문 실행 시 사용
public ResultSet rs; // select 쿼리문 결과 저장 시 사용
public JDBConnection() { // 생성자는 JDB 드라이버를 이용해 오라클 DB 연결하는 두 가지 일 수행
try {
// 1, 오라클 드라이브 로드 - 인터페이스이기 때문에 바로 쓸 수 없기에
// 지정한 실제 클래스를 가져다 쓰겠다.
Class.forName("oracle.jdbc.OracleDriver");
System.out.println("드라이버 로드 ok!");
// 2. DB연결, URL은 “오라클 프로토콜@IP주소:포트번호:sid” 형식으로 구성
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String id="multi";
String pwd="1234";
7
con = DriverManager.getConnection(url, id, pwd);
System.out.println("DB 연결 성공(기본생성자)");
}
catch (Exception e) {
System.out.println("오라클 드라이버가 없습니다.");
e.printStackTrace();
}
}
public JDBConnection(String driver, String url, String id, String pwd) {
try {
// 1, 오라클 드라이브 로드 - 인터페이스이기 때문에 바로 쓸 수 없기에
// 지정한 실제 클래스를 가져다 쓰겠다.
Class.forName(driver);
System.out.println("드라이버 로드 ok!");
// 2. DB연결
con = DriverManager.getConnection(url, id, pwd);
System.out.println("DB 연결 성공(기본생성자2)");
}
catch (Exception e) {
e.printStackTrace();
}
}
public void close() { //DB관련 작업을 모두 마쳤다면 자원을 절약 해 연결 해제
try {
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(pstmt != null) pstmt.close();
System.out.println("JDBC 자원 해제");
}
catch(Exception e) {
e.printStackTrace();
}
}
}
<%@ page import="common.JDBConnection" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JDBC 테스트 1</title>
</head>
<body>
<h2>JDBC 테스트 1 - 기본연동</h2>
<%
JDBConnection jdbc1 = new JDBConnection();
jdbc1.close();
// 스프링에서는 스프링 컨테이너로 가지고 감
String driver = application.getInitParameter("OracleDriver");
String url = application.getInitParameter("OracleURL");
String id = application.getInitParameter("OracleId");
String pwd = application.getInitParameter("OraclePwd");
JDBConnection jdbc2 = new JDBConnection(driver, url, id, pwd);
%>
</body>
</html>
<context-param>
<param-name>OracleDriver</param-name>
<param-value>oracle.jdbc.OracleDriver</param-value>
</context-param>
<context-param>
<param-name>OracleURL</param-name>
<param-value>jdbc:oracle:thin:@localhost:1521:orcl</param-value>
</context-param>
<context-param>
<param-name>OracleId</param-name>
<param-value>multi</param-value>
</context-param>
<context-param>
<param-name>OraclePwd</param-name>
<param-value>1234</param-value>
</context-param>
package common;
import java.sql.Connection; //인터페이스
import java.sql.DriverManager;
import java.sql.PreparedStatement; //인터페이스
import java.sql.ResultSet; //인터페이스
import java.sql.Statement;
import javax.servlet.ServletContext; //인터페이스
// 1) 기본적인 DB 연결 관리 클래스
public class JDBConnection {
// 1. JDBC 드라이브 로드
// 2. DB연결
// 3, 연결을 통해 쿼리문을 전송
// 4. 결과값을 확인(INSERT, UPDATE, DELETE - 성공, 실패 SELECT - ResultSet)
// 5. 리소스 종료
public Connection con; // 데이터베이스와 연결을 담당
public Statement stmt; //인파라미터가 없는 정적 쿼리문 실행 시 사용
public PreparedStatement pstmt; // 인파라미터가 있는 동적 쿼리문 실행 시 사용
public ResultSet rs; // select 쿼리문 결과 저장 시 사용
public JDBConnection() { // 생성자는 JDB 드라이버를 이용해 오라클 DB 연결하는 두 가지 일 수행
try {
// 1, 오라클 드라이브 로드 - 인터페이스이기 때문에 바로 쓸 수 없기에
// 지정한 실제 클래스를 가져다 쓰겠다.
Class.forName("oracle.jdbc.OracleDriver");
System.out.println("드라이버 로드1 ok!");
// 2. DB연결, URL은 “오라클 프로토콜@IP주소:포트번호:sid” 형식으로 구성
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String id="multi";
String pwd="1234";
con = DriverManager.getConnection(url, id, pwd);
System.out.println("DB 연결 성공(기본생성자)");
}
catch (Exception e) {
System.out.println("오라클 드라이버가 없습니다.");
e.printStackTrace();
}
}
public JDBConnection(String driver, String url, String id, String pwd) {
try {
// 1, 오라클 드라이브 로드 - 인터페이스이기 때문에 바로 쓸 수 없기에
// 지정한 실제 클래스를 가져다 쓰겠다.
Class.forName(driver);
System.out.println("드라이버 로드2 ok!");
// 2. DB연결
con = DriverManager.getConnection(url, id, pwd);
System.out.println("DB 연결 성공(기본생성자2)");
}
catch (Exception e) {
e.printStackTrace();
}
}
public JDBConnection(ServletContext application) {
try {
// JDBC 로드 => 중요한 정보라 감춤(원래는 ConnectionTest) 서버 안쪽으로 감춤
String driver = application.getInitParameter("OracleDriver");
getClass().forName(driver);
System.out.println("드라이브 연결 3 OK!");
//DB연결 => 중요한 정보라 감춤(원래는 ConnectionTest) 서버 안쪽으로 감춤
String url = application.getInitParameter("OracleURL");
String id = application.getInitParameter("OracleId");
String pwd = application.getInitParameter("OraclePwd");
con = DriverManager.getConnection(url, id, pwd);
System.out.println("JDBC 연결 성공 : 생성자 3");
}
catch (Exception e) {
e.printStackTrace();
}
}
public void close() { //DB관련 작업을 모두 마쳤다면 자원을 절약 해 연결 해제
try {
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(pstmt != null) pstmt.close();
System.out.println("JDBC 자원 해제");
}
catch(Exception e) {
e.printStackTrace();
}
}
}
<%@ page import="common.JDBConnection" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JDBC 테스트 1</title>
</head>
<body>
<h2>JDBC 테스트 1 - 기본연동</h2>
<%
JDBConnection jdbc1 = new JDBConnection();
jdbc1.close();
// 스프링에서는 컨테이너로 가지고 감
/* String driver = application.getInitParameter("OracleDriver");
String url = application.getInitParameter("OracleURL");
String id = application.getInitParameter("OracleId");
String pwd = application.getInitParameter("OraclePwd");
JDBConnection jdbc2 = new JDBConnection(driver, url, id, pwd);
jdbc2.close(); */
JDBConnection jdbc3 = new JDBConnection(application);
jdbc3.close();
%>
</body>
</html>
<%@ page import="common.JDBConnection" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JDBC 테스트 1</title>
</head>
<body>
<h2>JDBC 테스트 1 - 기본연동</h2>
<%
JDBConnection jdbc1 = new JDBConnection();
jdbc1.close();
// 스프링에서는 컨테이너로 가지고 감
/* String driver = application.getInitParameter("OracleDriver");
String url = application.getInitParameter("OracleURL");
String id = application.getInitParameter("OracleId");
String pwd = application.getInitParameter("OraclePwd");
JDBConnection jdbc2 = new JDBConnection(driver, url, id, pwd);
jdbc2.close(); */
JDBConnection jdbc3 = new JDBConnection(application);
jdbc3.close();
%>
</body>
</html>
커넥션풀
이란?JNDI(Java Naming and Directory Interface)
: 자바 소프트웨어에서나 객체나 데이터를 전체 몰라도 이름만으로 찾아 쓸 수 있는 디렉토리 서비스WAS가 시작할 때 server.xml과 context.xml에 설정한 대로 커넥션 풀을 생성한다.
server.xml
(서버 전체에서 사용하는 객): 서버 전체와 관련된 설정 정보를 저장하고 있다.*GlobalNamingResources**
code
<GlobalNamingResources>
<!-- 서버전체에서 사용하는 전역자원을 등록하는 영역이다. 서버에서 구동되는 모든 어플리케이션에서 구동해서 사용가능
Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
<Resource auth="Container"
driverClassName="oracle.jdbc.OracleDriver"
type ="javax.sql.DataSource" 물리적인 데이터 소스와의 연결을 생성해주는 자바 표준 인터페이스
initialSize ="0" 풀의 최초 초기화 과정에서 미리 만들어놓은 연결의 개수(기본값 : 0)
minIdle="5" 최소한으로 유지할 연결 개수(기본값은 0)
maxTotal="20" 동시에 사용할 수 있는 최대 연결 개수(기본값은 0)
maxIdle="20" 풀에 반납할 때 최대로 유지될 수 있는 연결 개수(기본값은 8)
maxWaitMillis="5000" 새로운 요청이 들어 올 때 얼마큰 클라이언트가 대기할지 밀리초 단위로 지정
url = "jdbc:oracle:thin:@localhost:1521:orcl"
name = "dbcp_myoracle"
username="multi"
password="1234" />
</GlobalNamingResources>
context.xml
: 현재 서버에서 서비스하고 있는 어플리케이션 정보를 저장하고 있다.테이너 안에 돌아가는 webstudy 같은 것
코드
<Context>
<ResourceLink global="dbcp_myoracle" name="dbcp_myoracle" type="javax.sql.DataSource"/>
</Context>
JSP 코드에서 JNDI서버(WAS 제공)으로부터 데이터 소스 객체를 얻어온다.
데이터 소스로부터 커넥션 객체를 가져온다.
DB 작업 수행
모든 작업이 끝나면 커넥션 객체를 pool(풀)로 반환
커넥션 풀 동작 검증
common > DBConnPool.java
package common;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class DBConnPool {
public Connection con;
public Statement stmt;
public PreparedStatement pstmt;
public ResultSet rs;
public DBConnPool() {
try {
//컨넥션 풀(DataSource) 얻기
Context initCtx = new InitialContext();
Context ctx =(Context)initCtx.lookup("java:comp/env");
DataSource source =(DataSource) ctx.lookup("dbcp_myoracle");
//커넥션 풀을 이용한 연결(Connection) 얻기
con = source.getConnection();
System.out.println("커넥션 풀을 통한 연결 성공!");
} catch (Exception e) {
System.out.println("커넥션 풀 연결 실패!");
e.printStackTrace();
}
}
public void close() {
try {
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(pstmt != null) pstmt.close();
if(con != null) con.close();
System.out.println("JDBC 자원 해제");
} catch (Exception e) {
e.printStackTrace();
}
}
}
connectionTest.jsp
<%@ page import ="common.JDBConnection" %>
<%@ page import ="common.DBConnPool" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JDBC 테스트</title>
</head>
<body>
<h2>JDBC 테스트 1 2 3 - 기본 연동</h2>
<%
JDBConnection jdbc1 = new JDBConnection();
jdbc1.close();
String driver = application.getInitParameter("OracleDriver");
String url = application.getInitParameter("OracleURL");
String id = application.getInitParameter("OracleId");
String pwd = application.getInitParameter("OraclePwd");
JDBConnection jdbc2 = new JDBConnection(driver,url,id,pwd);
jdbc2.close();
JDBConnection jdbc3 = new JDBConnection(application);
jdbc3.close();
%>
<h2>커넥션 풀 테스트 </h2>
<%
DBConnPool pool = new DBConnPool();
pool.close();
%>
</body>
</html>
update
<%@ page import="common.JDBConnection" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.Statement" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 추가 테스트 - member 테이블</title>
</head>
<body>
<h2>회원 추가 테스트(executeUpdate() 사용)</h2>
<%
//DB 연결
JDBConnection jdbc = new JDBConnection();
//테스트용 데이터 준비
String id ="test1";
String pass="1111";
String name ="회원입력 테스트1";
//동적 쿼리문 작성
String sql = "INSERT INTO member VALUES(?, ?, ?, sysdate)";
PreparedStatement pstmt = jdbc.con.prepareStatement(sql);
// 하나하나 매칭후 넣어서 컴파일
pstmt.setString(1, id);
pstmt.setString(2, pass);
pstmt.setString(3, name);
//쿼리 실행
int inResult = pstmt.executeUpdate();
out.println(inResult +"행이 입력되었습니다.");
//연결 닫기
jdbc.close();
%>
</body>
</html>
<%@ page import="common.JDBConnection" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.Statement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원의 정보를 조회하는 정적 쿼리문 테스트 - SELECT(executeQuery())</title>
</head>
<body>
<h2>회원의 정보를 조회하는 정적 쿼리문 테스트 - SELECT(executeQuery())</h2>
<%
//DB 연결
JDBConnection jdbc = new JDBConnection();
//정적 쿼리문 작성
String sql = "select * from member";
Statement stmt = jdbc.con.createStatement();
//쿼리 실행
ResultSet rs = stmt.executeQuery(sql);
//결과값 확인
while(rs.next()){
String id = rs.getString("id");
String pw = rs.getString("pass");
String name = rs.getString("name");
java.sql.Date regidate = rs.getDate("regidate");
out.println("=====================");
out.println(String.format("%s %s %s %s",id,pw,name,regidate)+ "<br/>");
}
//연결 닫기
jdbc.close();
%>
</body>
</html>
userInsert.jsp
common > JDBConnection.java
사용자에게 id, pass, name, regidate 입력태그
오라클 데이터 베이스에 입력 쿼리 실행
회원가입이 완료되었습니다. or 회원가입 실패
링크 : userList.jsp
b. userList.jsp
common > JDBConnection.kava
조회 쿼리 실행
결과에 대한 출력
지치지 말자... 요즘 체력적으로도 정신적으로도 조금 지친다 ㅠ 주말에는 이르바이트하니까 내 시간이 아예없는 느낌 아르바이트에 사람도 들어서 배로 힘들고 정보처리 기사 준비하는데도 걱정되고 마음의 여유를 찾자!!!!
글이 많은 도움이 되었습니다, 감사합니다.