ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 객체 메소드 종류

    PreparedStatement 객체 ↔ Statement 객체 차이

    • 메소드 명은 같다
    • 차이점 : 물음표
    • 둘 중 어느 것을 선택할지는 자유. 요즘에는 PreparedStatement 객체를 주로 사용
    • PreparedStatement
      • sql문에 '?'를 사용하고 이후에 java 코드로 채워주면 된다

    쿼리문 실행 결과 값 가져오기

    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계정 추가

    01. scott_계정_생성.docx

    scott.sql

    • 사진
    • 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

    댓글

Designed by Tistory.