김갱환
맨땅에 코딩
김갱환
전체 방문자
오늘
어제
  • 분류 전체보기 (239)
    • ⁂ 맨땅에 코딩 (11)
      • : Story (3)
      • : MiniProject 'MyWeb' (1)
      • : Final Project (5)
      • : Josa-Moa 한국어 조사 처리 프로젝트 (1)
    • —————Frontend——————————————.. (0)
    • ⁂ HTML (10)
      • : 기본 익히기 (10)
    • ⁂ CSS (15)
      • : 기본 익히기 (15)
    • ⁂ Java Script (32)
      • : 기본 익히기 (28)
      • : 자바스크립트 라이브러리 (1)
      • : 연습 문제 (3)
    • ⁂ jQuery (11)
      • : 기본 익히기 (11)
    • ⁂ Bootstrap (3)
      • : 기본 익히기 (3)
    • ⁂ TailWind CSS (1)
    • ⁂ AJAX (5)
      • : 기본 익히기 (5)
    • ⁂ Vue.js (3)
      • : 기본 익히기 (3)
    • —————DB : Data Base————————.. (0)
    • ⁂ Oracle DB (27)
      • : 기본 익히기 (24)
      • : 연습 문제 (3)
    • ⁂ MyBatis Framework (15)
      • : 기본 익히기 (15)
    • —————Backend———————————————.. (0)
    • ⁂ Java (62)
      • : 기본 익히기 (42)
      • : JDBC - Java DataBase Conn.. (4)
      • : Crawling (2)
      • : 독학으로 공부하기(과거) (11)
      • : 연습문제 (3)
    • ——————Web————————————————— (0)
    • ⁂ JSP (28)
      • : 기본 익히기 (28)
    • ⁂ Spring FrameWork (15)
      • : Legacy Project (1)
      • : 기본 익히기(Boot 기반) (14)
    • ——————————————————————— (0)
    • ⁂ Error Note (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코딩 #코딩공부 #상수 #리터럴 #형변환 #개발자 #자바 #자바공부 #자바독학
  • 자바공부
  • 코딩공부 #코딩 #자바 #자바독학 #자바공부 #개발자 #프론트앤드 #백앤드 #풀스택
  • 비트연산자 #코딩공부 #자바공부 #코딩 #자바 #프로그래밍 #개발자
  • 프론트앤드
  • 자바
  • 개발자
  • 코딩공부 #자바공부
  • 코딩공부
  • ErrorPage
  • 백앤드
  • http에러메세지
  • web.xml수정
  • HTML공부
  • httperror
  • 객체지향프로그래밍
  • 연산자 #기본연산자 #코딩 #자바 #독학 #자바공부 #자바연산자
  • 코딩 #코딩공부 #프론트앤드 #백앤드 #풀스택개발자
  • 코딩
  • 풀스택

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김갱환

맨땅에 코딩

⁂ Java/: JDBC - Java DataBase Connectivity

[JAVA] JDBC #2-2 CRUD(Create, Read, Update, Delete) : R

2022. 9. 22. 16:33

1. READ

 

 CRUD 중 하나 빼먹었던 것이 있다.

 바로 Read이다.

 Read, Select문을 사용하여 작업한 SQL문을 출력시키는 작업이었다.

 이 과정은 위에서 진행했던 것들과는 다른 방향으로 코드가 진행이 되기에 이렇게 따로 다루고 있다.

 

 READ 작업을 진행하기 위해선 ResultSet이라는 자료형을 사용하게 된다.

 ResultSet은 SQL에서 테이블 형태의 데이터에 접근하는 코드이며 SELECT문의 결과를 저장하는 객체이다.

 그래서 여기까지 SQL문과 관련된 객체는 총 3가지 종류를 사용하고 있다.

Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

 

 - DB 서버와 연결시켜주는 객체인 Connection

 - String형태의 SQL문을 SQL문으로 변환시켜서 DB 서버에 보내주는 객체인 PreparedStatement

 - SQL문의 SELECT문 결과값을 저장하는 객체인 ResultSet

 

 위의 내용을 모르면 자바에서 SQL문을 작업할 수 없으니 잘 기억해두자.

 그리고 자원 반납은 선언한 반대 순서로 해주면 된다.

 (왜? 자바에서 외부 작업을 건드릴 때는 작업이 끝나면 작업들을 종료시켜주어야 안정성이 높아지니깐)

finally {
    // 자원 반납
    try {
        if(rs!=null) {rs.close();}
    } catch (Exception e) {}

    try {
        if(pstmt!=null) {rs.close();}
    } catch (Exception e) {}

    try {
        if(con!=null) {rs.close();}
    } catch (Exception e) {}
}// end

 

 

2. ResultSet으로 퀴리문 실행시키기

 

 이제 ResultSet을 활용하여 SQL문(쿼리문)을 실행시켜보자. 방법은 아주 간단하다.

 위에서는 .executeUpdate() 메서드를 사용했지만 Read를 하려면 .executeQuery() 메서드를 사용하면 된다.

executeQuery()의 반환형이 ResultSet인 것을 눈여겨보면 된다

 

 이것을 우리가 선언했던 rs 변수에 담은 뒤 if문을 사용하여 출력시킨다.

 여기서 .next() 메서드를 사용하여 커서를 통해 자료가 있는지부터 확인해보자.

if(rs.next()) { // 커서가 있는지?
    System.out.println("자료 있음");
} else {
    System.out.println("자료 없음");				
} // if end

뚱 = END

 

 자료가 있으니 이제 직접적으로 Select된 값들에 접근해보자.

 접근하는 방법은 두 가지가 있다.

 

1) 칼럼 순서로 접근하기

 DB에서는 칼럼 순서가 전혀 의미가 없었다. 하지만 자바에서는 순서가 의미가 있다.

 우리는 지금 SELECT문을 사용하여 cnt라는 sungjuk 테이블의 행 갯수를 새는 데이터에 접근한 상태이다.

 사전에 실습했던 테이블을 활용한 상태로 행의 갯수는 12개가 나와야 한다.

 

sqldeveloper로 먼저 출력해보았다

 

 칼럼의 갯수가 적을 때는 칼럼 순서로 간단하게 접근할 수 있다.

 여기서 주의할 점은 칼럼의 순서와 자료형이 일치하여야 한다는 것이다.

 cnt 칼럼이 갖고 있는 값은 12, 정수형이므로 Int 형으로 출력시키면 도니다.

 

 코드는 아래와 같다.

// rs.getInt(1)
System.out.println("전체 행 개수 : " + rs.getInt(1));

 1을 쓰면 첫 번째 칼럼을 출력시켜달라는 뜻이다.

 

 

2) 칼럼 이름으로 접근하기

 이름으로 접근하는 것도 문법은 동일하다.

 다만 순서를 기록하는 대신 칼럼의 명을 직접 언급해주면 된다.

// rs.getInt("cnt")
System.out.println("전체 행 개수 : " + rs.getInt("cnt"));

뚱뚱뚱~

 

 

3. SELECT문 활용하기

 

1) sungjuk 테이블에서 데이터 하나씩 가져오기

 SQL문에서 우리는 SELECT문을 사용할 떄 전체 칼럼을 선택한다는 의미로 * 기호를 사용했다.

 하지만 자바에서는 * 기호를 사용하기 이전에 칼럼들을 모두 선언해주어야 한다.

 이렇게 선언해주면 위에서와 같은 문법을 사용하면 데이터를 가져와서 출력시킬 수 있다.

int sno = 61;

StringBuilder sql = new StringBuilder();
sql.append(" SELECT sno, uname, kor, eng, mat, tot, aver, addr, wdate ");
sql.append(" FROM sungjuk ");
sql.append(" WHERE sno = ? ");

pstmt = con.prepareStatement(sql.toString());
pstmt.setInt(1, sno);

rs= pstmt.executeQuery();
if(rs.next()) { 
    System.out.println("자료 있음");
    // 1) 칼럼 순서 접근
    System.out.print(rs.getInt(1));
    System.out.print(rs.getString(2));
    System.out.print(rs.getInt(3));
    System.out.print(rs.getInt(4));
    System.out.print(rs.getInt(5));
    System.out.print(rs.getInt(6));
    System.out.print(rs.getInt(7));
    System.out.print(rs.getString(8));
    System.out.print(rs.getString(9));
    System.out.println();

    // 2) 칼럼 명으로 접근
    System.out.print(rs.getInt("sno"));
    System.out.print(rs.getString("uname"));
    System.out.print(rs.getInt("kor"));
    System.out.print(rs.getInt("eng"));
    System.out.print(rs.getInt("mat"));
    System.out.print(rs.getInt("tot"));
    System.out.print(rs.getInt("aver"));
    System.out.print(rs.getString("addr"));
    System.out.print(rs.getString("wdate"));
    System.out.println();

} else {
    System.out.println("자료 없음");				
} // if end

 

2) sungjuk 테이블에서 전체 데이터 가져오기

 DB의 테이블에서 한 줄씩 데이터를 가져올 수 있는 것처럼 전체 데이터를 한번에 가져올 수도 있다.

 .next() 메서드가 boolead값으로 반환되는 것을 이용하여 do~while 문으로 출력을 시켰다.

if(rs.next()) { 
    System.out.println("자료 있음");
    do {
        System.out.print(rs.getInt("sno") + " ");
        System.out.print(rs.getString("uname") + " ");
        System.out.print(rs.getInt("kor") + " ");
        System.out.print(rs.getInt("eng") + " ");
        System.out.print(rs.getInt("mat") + " ");
        System.out.print(rs.getInt("tot") + " ");
        System.out.print(rs.getInt("aver") + " ");
        System.out.print(rs.getString("addr") + " ");
        System.out.print(rs.getString("wdate") + " ");
        System.out.println();
    } while(rs.next()); // 다음 cursor가 있는지
} else {
    System.out.println("자료 없음");				
} // if end

 

 

4. Like 활용하기

 

 문제) 이름에 '나' 문자가 있는 행을 조회하시오

package jdbc0922;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Test05_selectLike {

	public static void main(String[] args) {
		// 문제) 이름에 '나' 문자 있는 행을 조회하시오
		String col = "uname";	// 검색 칼럼 keyfield
		String word = "나";		// 검색어	 keyword		
		
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;		
		
		try {
			
			String url		= "jdbc:oracle:thin:@localhost:1521:xe"; // == "127.0.0.1"
			String user		= "system";
			String password	= "1234";
			String driver	= "oracle.jdbc.driver.OracleDriver"; // ojdbc6.jar
			Class.forName(driver);
			con = DriverManager.getConnection(url, user, password);
						
			System.out.println("오라클DB 서버 연결 성공!!");		
			
			StringBuilder sql = new StringBuilder();
			sql.append(" SELECT sno, uname, kor, eng, mat, tot, aver, addr, wdate ");
			sql.append(" FROM sungjuk ");
			
			// 검색어 존재하는지?
			if(word.length()>0) {
				// where uname like '%나%'
				String where = " WHERE " + col + " LIKE '%" + word + "%'";
				sql.append(where);
			}	// if end
			sql.append(" ORDER BY sno DESC ");
			// System.out.println(sql.toString());
			
			pstmt = con.prepareStatement(sql.toString());
			rs= pstmt.executeQuery();
			
			if(rs.next()) { 
				System.out.println("자료 있음");
				do {
					System.out.print(rs.getInt("sno") + " ");
					System.out.print(rs.getString("uname") + " ");
					System.out.print(rs.getInt("kor") + " ");
					System.out.print(rs.getInt("eng") + " ");
					System.out.print(rs.getInt("mat") + " ");
					System.out.print(rs.getInt("tot") + " ");
					System.out.print(rs.getInt("aver") + " ");
					System.out.print(rs.getString("addr") + " ");
					System.out.print(rs.getString("wdate") + " ");
					System.out.println();
				} while(rs.next()); // 다음 cursor가 있는지
			} else {
				System.out.println("자료 없음");				
			} // if end
						
			
		} catch (Exception e) {
			System.out.println("오라클DB 연결 실패 : " + e);
			
		} finally {
			// 자원 반납
			try {
				if(rs!=null) {rs.close();}
			} catch (Exception e) {}
			
			try {
				if(pstmt!=null) {rs.close();}
			} catch (Exception e) {}
			
			try {
				if(con!=null) {rs.close();}
			} catch (Exception e) {}
		}// end	
		
		System.out.println("뚱");
		
	} // main() end
} // class end

 

저작자표시 비영리 동일조건 (새창열림)

'⁂ Java > : JDBC - Java DataBase Connectivity' 카테고리의 다른 글

[JAVA] JDBC #3-1 자바로 페이징하기  (0) 2022.09.22
[JAVA] JDBC #2-1 CRUD(Create, Read, Update, Delete) : C,U,D  (1) 2022.09.21
[JAVA] JDBC #1 - 환경 구축하기  (0) 2022.09.21
    '⁂ Java/: JDBC - Java DataBase Connectivity' 카테고리의 다른 글
    • [JAVA] JDBC #3-1 자바로 페이징하기
    • [JAVA] JDBC #2-1 CRUD(Create, Read, Update, Delete) : C,U,D
    • [JAVA] JDBC #1 - 환경 구축하기
    김갱환
    김갱환
    코딩의 코자도 모르는 이의 공부 기록장

    티스토리툴바