-
[JSP, DB]_20일차_05.24프로그래밍/JSP 2021. 5. 24. 22:55
CH16. JDBC로 데이터베이스와 JSP 연동
JDBC
- 자바 표준 인터페이스
- 자바 API or 자바 라이브러리 자바/JSP 프로그램 내에서 DB 와 관련된 작업을 처리할 수 있도록 도와준다
- JDBC API를 사용하면 DBMS의 종류에 상관없이 DB 작업을 처리할 수 있다
JDBC를 사용한 JSP ↔ DB의 연동 단계
2.1 JDBC 드라이버 로딩하기
Class.forName(String xxx) 메소드
: JDBC 드라이버 로딩 → 자동으로 객체 생성, DriverManager 클래스에 등록된다- ex)
Class.forName("oracle.jdbc.driver.OracleDriverA");
2.2 Connection 객체 생성하기
- db에 데이터 전송하기 위함, oracle , mySQL 방법이 다 다르다
static Connection getConnection(String xxx.....) 메소드
: JDBC 드라이버 검색, 검색된 드라이버를 이용하여 Connection 객체를 생성한 후 이를 반환
ex) String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe"; String user = "scott"; String password = "tiger"; Class.forName("oracle.jdbc.driver.OracleDriverA"); conn = DriverManager.getConnection(url, user, password);
2.3 데이터베이스 연결 닫기
- db 연결이 더 이상 필요하지 않으면 close() 메소드 사용 → 생성한 Connection 객체를 해제
- 일반적으로 db 리소스를 사용하지 않기 위해 사용을 끝내자마자 리소스를 해제하는 것이 좋다
- DB의 문을 닫는다는 개념
- 정리
```java <%@ page contentType="text/html; charset=utf-8"%> <%@ page import="java.sql.*"%> <html> <head> <title>Database SQL</title> </head> <body> <% Connection conn = null; try { String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe"; String user = "scott"; String password = "tiger"; Class.forName("oracle.jdbc.driver.OracleDriverA"); // JDBC 드라이버 로딩하기 conn = DriverManager.getConnection(url, user, password); // Connection 객체 생성하기 out.println("데이터베이스 연결이 성공되었습니다."); } catch (SQLException ex) { out.println("데이터베이스 연결이 실패되었습니다.<br>"); out.println("SQLException: " + ex.getMessage()); } finally { if (conn != null) conn.close(); // db 연결 닫기 } %> </body> </html> ```
대용량 DB 관리를 위한 방법
- 폴링 방법
- DTO
데이터베이스 쿼리 실행
쿼리 실행 객체 (데이터 접근)
- Statement
- 하나의 쿼리를 사용하고 나면 더는 사용할 수 없다
- PreparedStatement
- CallableStatement
use database JSPBook; drop table member; CREATE TABLE IF NOT EXISTS member( id VARCHAR(20) NOT NULL, passwd VARCHAR(20), name VARCHAR(30), PRIMARY KEY (id) ); select * from member;
Statement 객체 메소드 종류
- excuteQuery(String sql) / ResultSet (반환 타입)(ArrayList)
- 정적인 SELECT 쿼리문을 통해 데이터를 검색하는 데 사용
- executeUpdate(String sql) / int (반환 타입)
- 삽입, 수정 삭제에 사용 (INSERT, UPDATE, DELETE)
- 반환 값 : Insert, Update, Delete가 된 행 수
- 반환 값 0 : 업데이트 실패 (라는 뜻)
PreparedStatement 객체 ↔ Statement 객체 차이
- 메소드 명은 같다
- 차이점 : 물음표
- 둘 중 어느 것을 선택할지는 자유. 요즘에는 PreparedStatement 객체를 주로 사용
- PreparedStatement
- sql문에
'?'
를 사용하고 이후에 java 코드로 채워주면 된다
- sql문에
쿼리문 실행 결과 값 가져오기
ResultSet 객체
- SELECT문을 사용하여 얻어온 레코드 값을 테이블 형태로 가진 객체
ResultSet 객체의 메소드 종류
- getXxx() 메소드
- 자동 생성됨
- next() 메소드 ★★★★★
- 반환 타입 : boolean
- 다음에 행이 있으면 참, 행이 없으면 거짓 반환 → while 사용 가능
ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { out.println(rs.getString(2) + ", " + rs.getString(3) + "<br/>"); }
가장 일반적으로 사용 (표준)
// null로 선언 및 초기화 하는 것 ResultSet rs = null; Statement stmt = null; // rs.next() 메소드를 사용하는 것 try { String sql = "select * from member"; stmt = conn.createStatement(); rs = stmt.executeQuery(sql); while (rs.next()) { String id = rs.getString("id2"); String pw = rs.getString("passwd"); String name = rs.getString("name");
★ 꼭 파일을 빌드해서 성공했더라도 직접 db를 확인해보자
Oracle db 사용
oracle db 포트 번호 : 1521
적용 순서
- ojbdc.jar 파일 eclipse의 server 프로젝트 - lib 폴더 내에 추가
- oracle_db - eclipse 연동하기 위한 파일
- odjbc6.jar 파일 (oracle 폴더에 있음!)
- scott계정 추가
- 사진
- url 확인 방법
오류 메세지
- class.forName() 오류 메세지: internal error (localhost 페이지를 찾을 수 없음)
예제
show user; create table member( id varchar2(20) not null , passwd varchar2(30) , name varchar2(30) , primary key(id) );
ResultSet rs = null; PreparedStatement pstmt = null; int num =20; try { String sql = "select * from dept where deptno >= ?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, num); rs = pstmt.executeQuery(); while (rs.next()) { String deptno = rs.getString("deptno"); // 해당 열에 있는 데이터를 가져온다 String dname = rs.getString("dname"); // 해당 열에 있는 데이터를 가져온다 String loc = rs.getString("loc"); // 해당 열에 있는 데이터를 가져온다 %>
Auto commit
- eclipse 에서 dbms를 연결하여 sql을 작성하면 자동으로 auto commit이 된다.
CH17. JSTL (JSP 표준 태그 라이브러리)
키워드
- JSTL (태그) (사용자 정의 태그의 표준!!)
- 스크립트 요소(<% %>)로 인한 코드의 복잡함을 해결하기 위한 표준 태그
- MVC 패턴
스파게티 코드
- Html 코드와 java 코드가 뒤섞인 소스 형태
- 단점 : 코드의 가독성 ↓
- 해결 : JSTL
JSTL이 제공하는 태그
- ★ Core 태그 : for, if문을 태그로 처리할 수 있다
- <c:if> : 조건문 처리
- <c:forEach> : 반복문 처리
- Formatting 태그
- Sql 태그
- Functions 태그
prefix 속성 :
- sql 구문 예제
- jstl - sql 태그 예제
etc
파이썬 - DB 연동 : 간단하지만, 대용량 처리에 어려움
자바 - DB 연동 : 대용량 처리에 대해 이미 증명되었음
현찰을 취급하지 않는 스타벅스, 역차별에 대해서
mySQL ↔ OracleDB 과의 소스코드 차이
- url, id, password, 연결문자(Class.forName("xxx")) 4 개만 바꾸어 주면 된다!
이 프로젝트의 목적
- 지식 습득[교과 내용], 프로젝트 경험, 동료와의 협업
- 나와 친하지 않은 사람과 협업하는 경험을 얻기 위함
- 협업을 잘하는 사람이 성공한다
프로젝트 시 분쟁의 주요 원인
- 말 끊기 → 상대방의 말을 끝까지 듣자
if문 내 if문 10개 이상 사용해야 한다면, 다른 방법을 찾아보아라 (비효율, 가독성↓)
[JAVA] 추상클래스 VS 인터페이스 왜 사용할까? 차이점, 예제로 확인 :: 마이자몽
회원가입 소스 위치
- C:\Users\오명균\OneDrive - 안동대학교\바탕 화면\혁신성장_인공지능 과정\Database\02_교안\02_JAVA_JSP\01. 강의교안\17장 JSP 표준 태그 라이브러리_회원가입\수강생_실습
팀원들과 파일을 공유할 때 - src폴더, web-contents 폴더 복사, 붙여넣기 하면 된다
jdbc 프로그램 에서 sql문 작성하고 java에서 확인하는 방법 - commit 명령어
'프로그래밍 > JSP' 카테고리의 다른 글
[JSP, DB]_21일차_05.25 (0) 2021.05.26 [JSP]_19일차_05.21 (0) 2021.05.21 [SQL, JSP]_15일차_05.17 (0) 2021.05.18