일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- #라이브러리 #개발자 #REACT #Bootstrap #REST API
- #국비 #국비학원 #IT #개발자 #프로그래머 #신입 #코딩 #안드로이드 #자바 #JAVA #오라클 #Oracle #SQL #MYSQL #HTML #CSS #JAVASCRIPT #자바스크립트 #서블릿 #SERVLET #JSP #자바스프링 #데이터베이스 #프레임워크
- #라이브러리 #개발자 #REACT #Bootstrap #Visual Studio
- JSP #표현언어 #page #include #taglib
- #홍콩쌀국수 #탐차이
- #홍콩 #홍콩여행 #홍콩한달살기 #홍콩사이언스파크 #홍콩산책 #홍콩야경 #홍콩턱돌이
- #라이브러리 #개발자 #REACT #Bootstrap
- #홍콩 #홍콩한달살기 #홍콩버스 #버스어플 #홍콩음식 #홍콩여행 #kmb #lwb#홍
- 블로그 태그 #국비 #국비학원 #IT #개발자 #프로그래머 #신입 #코딩 #안드로이드 #자바 #JAVA #오라클 #Oracle #SQL #MYSQL #HTML #CSS #JAVASCRIPT #자바스크립트 #서블릿 #SERVLET #JSP #자바스프링 #데이터베이스 #
- #홍콩2층버스
- #홍콩 #홍콩여애 #홍콩한달살기 #베트남식당 #viet'schoice #외식 #카레 #양지머리카레 #양지머리 #고기쌀국수 #육수존맛 #레몬차 #밀크티 #shatin #홍콩쇼핑 #asus노트북 #어댑터 #홍콩돼지코
- 백엔드개념 #WAS
- #라이브러리 #개발자 #REACT #Bootstrap #REST API #웹 디자인 #디자인 툴
- Servlet #JSP #GET #POST #클라이언트
- #홍콩 #홍콩여행 #홍콩한달살기 #옥토퍼스카드
- forward #include #param
- #라이브러리
- JSP #액션태그 #
- #홍콩여행 #홍콩국가 #홍콩지도 #홍콩날씨
- #홍콩 #홍콩여행 #홍콩한달살기 #홍콩집밥 #홍콩생활 #홍콩베이징구스 #홍콩산책 #홍콩조깅 #홍콩우편함
- 서블릿 #Servlet #Request #Response #개발자
- Today
- Total
기분좋음
국비 57 일차 본문
데이터베이스와 JSP 연결시키기
오라클에 테스트
-계정 생성
create user 계정명 identified by 비밀번호;
alter user usertest01 quota 100m on users;
alter user usertest01 default tablespace users;
grant connect,resource,dba to 계정명;
- 테이블 생성
create table member(
name varchar2(10) primary key,
userid varchar2(10),
userpwd varchar2(10),
email varchar2(20),
phone char(13),
admin number(1) default 0 --0:사용자, 1:관리자
);
-데이터 삽입
insert into member
values ('고길동','ko','1234','ko@naver.com','010-1234-5678',0);
insert into member
values ('박길동','park','1234','park@naver.com','010-1234-5678',0);
insert into member
values ('이길동','lee','1234','lee@naver.com','010-1234-5678',1);
JDBC(Java Database Connectivity)
자바 프로그램에서 데이터 베이스에 접근할 수 있도록 API를 제공하는 클래스의 집합
-자료를 쿼리하거나 업데이트 하는 방법 제공-
JDBC 연결하기 위한 드라이버 파일(ojdbc6.jar) 다운로드하기 (버전에 맞게)
https://fruitdev.tistory.com/89
[Oracle] JDBC 드라이버 다운로드
오라클 JDBC 드라이버를 버전별로 몇개 간추려 보았다. 일반적으로 오라클 JDBC 드라이버는 하위 호환성을 가지고 있어 JDK 버전에 맞는 최신 오라클 드라이버를 이용하면 된다. 나 같은경우 오라
fruitdev.tistory.com
다운로드 한 후, WEB-INF의 lib에 복사해 넣어준다.
JDBC에 연결을 위해 사용하는 클래스들은 java.sql.패키지에 포함되어 있다.
import java.sql.* (DriverManager, Connection, Statement, PreparedStatement, ResultSet 등등)
Connection-데이터베이스 연결에 사용 인터페이스
Statement - 질의, 갱신관련 인터페이스
ResultSet - 결과물 받아오는 인터페이스
JDBC를 이용해 데이터베이스에 연결(4단계 거쳐서 진행)
1. JDBC 드라이버 로드 DriverManager
2. 데이터베이스 연결 → Connection
3. 쿼리문 실행 사용되는 클래스, 인터페이스 Statement
4. 데이터베이스와 연결 종료 ResultSet
데이터 가져오는 예제
<%@ 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=UTF-8"
pageEncoding="UTF-8"%>
<%! //선언부는 첫 방문자에 의해서 단 한번 수행된다.
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String uid = "hr";
String pass ="5004";
String sql = "select * from member";%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table width="800px" border="1">
<tr>
<th>이름</th>
<th>아이디</th>
<th>암호</th>
<th>이메일</th>
<th>전화번호</th>
<th>권한(1:관리자, 2:일반 회원)</th>
</tr>
<%
try { Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, uid, pass);
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while (rs.next()){
out.println("<tr>");
out.println("<td>" + rs.getString("name") +"</td>");
out.println("<td>" + rs.getString("userid") +"</td>");
out.println("<td>" + rs.getString("userpwd") +"</td>");
out.println("<td>" + rs.getString("email") +"</td>");
out.println("<td>" + rs.getString("phone") +"</td>");
out.println("<td>" + rs.getInt("admin") +"</td>");
out.println("<tr>");
}
} catch(Exception e){
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
} catch(Exception e){
e.printStackTrace();
}
}
%>
</table>
</body>
</html>
Class.forName() -JDBC 드라이버를 로딩
Class.forName("oracle.jdbc.driver.OracleDriver")
DriverManager객체에서 getConnection()메소드를 통해 오라클 데이터베이스에 연결객체를 생성한다.
Connection conn=DriverManager.getConnection(url, uid, pass);
매개값 url, uid, pass는 선언부에서 선언해준다.
• url : 데이터 베이스 주소 • uid : 데이터베이스에 접속할 아이디 • upw : 접속할 아이디의 비밀번호
(오라클 sql 계정 아이디 비번)
URL주소 형식 -형식에 맞게 작성
jdbc:oracle:thin:[hostname]:[port]:dbname
ex) "jdbc:oracle:thin:@localhost:1521:XE"
Connection 커넥션 객체생성
Connection conn = DriverManager.getConnection('url' , '계정명', '비밀번호' );
Statement 객체생성
연결 완료시 표준 쿼리문을 수행하기 위한 객체(Statement)를 생성한다.
Statement stmt = conn.createStatement();
쿼리 작성시 쿼리실행할 메소드를 호출해야 한다.
메소드 | 설명 |
executeQuery() | select문과 같이 결과값이 여러개의 데이터로 구해지는 경우 사용 |
executeUpdate() | insert, update, delete 문 등 내부적으로 테이블의 내용 변경만 되고, 결과값이 없는 경우에 사용 |
ResultSet 객체 생성
select 쿼리 실행 시 결과를 받아줄 객체
String sql = "select * from member"; --테이블 명
ResultSet rs = stmt.executeQuery(sql); -- 결과 받을 객체 생성
ResultSet객체는 여러 레코드를 저장하지만, 한번에 하나의 레코드만 처리 가능하다.
메소드 | 설명 |
next() | 현재 행에서 다음 행으로 이동 |
previous() | 현재 행에서 이전 행으로 이동 |
first() | 현재 행에서 첫번째 행으로 이동 |
last() | 현재 행에서 마지막 행으로 이동 |
성공적으로 실행시 true반환, 실패시 false 반환
레코드들을 순서대로 검색하기 위해 while문과 next()메소드 사용
while(rs.next()){ }
칼럼 데이터를 꺼낼 떄는 get타입("컬럼명")메소드를 사용
ex) String name = rs.getString("name");
컬럼명이 아닌 테이블의 명시된 컬럼의 인덱스 값으로도 가져올 수 있다.
String name = rs.getString(1);
String userid = rs.getString(2);
String pwd = rs.getString(3);
모든 칼럼의 데이터를 꺼낼 때(칼럼 이름만 일치시 순서는 상관 없다)
JDBC를 통한 데이터조작- 데이터 삽입( insert문을 사용)
쿼리를 전송하기 위해서는 Statement객체의 executeUpdate메소드를 사용
stmt.executeUpdate(sql);
저장하는값이 유동적이기 때문에 변수로 작성 → sql문 작성이 복잡하므로 preparedStatement인터페이스 활용
String sql = “insert into member values (‘”+name+”’,‘”+userid +”’,’”+userpwd+”’,’”+email +”’,’”+phone+”’,”+admin+”)”; stmt.executeUpdate(sql); --복잡
preparedState객체를 생성 (statement대신)
PreparedStatement psmt = conn.preparedStatement(sql);
preparedStatement에서 사용하는 쿼리문
String sql = "insert into member values(?, ?, ?, ?, ?, ?)"; --칼럼을 ? (바인드변수)로 작성 가능
? - 나중에 값을 넣어서 쿼리를 완성
psmt.setString(인덱스, 문자열);
psmt.setInt(인덱스, 숫자);
바인드 변수를 채운 후, 쿼리 실행하는 메소드 호출
psmt.executeUpdate();
커넥션 풀 (DBCP : Database Connection Pool)
커넥션 :
데이터베이스에 쿼리를 실행하기 위해 연결된 상태
커넥션 풀 :
-웹 페이지에 접속자가 많아지면 커넥션도 동일한 만큼 만들기 때문에 생기는 서버의 과부하를 막아주는 기법
- dbcp매니저가 미리 연결 수량을 확보하고 요청이 들어오면 확보된 커넥션을 제공하고 처리 완료되면 연결을 회수해서 재활용
커넥션 풀 생성을 위해 우선 프로젝트 서버에 컨텍스트 패스가 등록되어야 한다.
톰캣 사이트에 들어가서
왼쪽부터 순차적으로 들어간 후, 코드를 복사해준다.
복사 한후,
server.xml을 열고 마지막으로 내린 후,
복사해 온 DBCP 코드를 Context 안에 붙여넣어 준다. → 붙여넣기 한 후, 자신의 정보에 맞게 수정
DBCP의 설정 요소
속성 | 설명 |
initialSize | 최초에 커넥션 풀을 채울 커넥션 개수 |
maxTotal | 동시 사용 가능한 최대 커넥션 개수 |
maxIdle | 커넥션 풀에 반납 시에 최대로 유지될 수 있는 커넥션 개수 |
minIdle | 최소로 유지될 커넥션 개수 |
maxWaitMillis | pool 고갈시 최대 대기시간( default = -1일 경우 무한정) |
DAO 객체(Data Access Object)
• DAO 객체는 데이터베이스에 접근하기 위해 사용되는 객체
• 데이터베이스에 데이터를 조회, 추가, 수정, 삭제등의 역할
VO 객체(Value Object) -자바빈
값 그자체를 나타내는 객체 (필드 값이 같다면 두객체를 같은 객체로 본다)
특정 값 자체를 표현하기 때문에 생성자를 사용 (불변성)
getter/setter외의 로직 있어도 무방함
DTO 객체(Data Transfer Object)
순수하게 데이터를 담아 계층 간으로 전달하는 객체
메서드는 getter/setter만 사용
• 데이터베이스에 정보를 전달하거나 전달 받기 위해서 사용하는 객체
• 데이터베이스에 저장된 하나의 레코드 정보를 통째로 전달 하기 위해서는 레코드의 컬럼 정보와 동일한 구조로 만든 다.