교육 (Today I Learned)/Hanaro

[Hanaro] 42일차 / Java (Collection, JDBC, 기본 SQL문, DB연결)

Bay Im 2024. 3. 18. 00:55

09 자료구조, Collection API 실습

  • Collection framework
    • Collection
      • 사전적 의미로는 요소(객체)를 수집해 저장하는 것
    • Collection framework
      • 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 제공되는 컬렉션 라이브러리
      • java util 패키지 포함
      • 인터페이스를 통하여 정형화된 방법으로 다양한 컬렉션 클래스 이용
  • 컬렉션 프레임워크의 주요 인터페이스
    • List
      • 순서를 유지하고 저장 (인덱스로 관리)
      • 중복 저장 가능
      • 종류
        • ArrayList
          • List<데이터타입> 변수명 = new ArrayList<>(); 형태
          • 저장 용량을 초과한 객체들이 들어와도 자동적으로 늘어난다.
          • 객체 제거시 자동으로 앞으로 1씩 당겨진다.
          • 저장 용량 고정도 가능
        • LinkedList
          • List<데이터타입> 변수명 = new LinkedList<>(); 형태
          • 추가, 삭제 속도는 ArrayList보다 빠르고 검색은 느리다.
        • Vector
    • Set
      • 순서를 유지하지 않고 저장
      • 중복 저장 불가
      • 종류
        • HashSet
          • Set<데이터타입> 변수명 = new HashSet<>(); 형태
        • TreeSet
    • Map
      • 키(key)와 값(value)의 쌍으로 저장
      • 키와 값은 모두 객체
      • 키는 중복 저장 불가, 값은 중복 저장 가능
      • 종류
        • HashMap
          • Map<키의데이터타입, 값의데이터타입> map = new HashMap<K, V>(); 형태
        • TreeMap
        • Hashable
        • Properties
  • List 컬렉션의 주요 메소드
    • 객체 추가
      • add(index, element)
        • 해당 인덱스 위치에 객체 추가
      • add(object)
        • 해당 객체를 맨 끝에 추가
      • set(index, element)
        • 해당 인덱스 위치에 저장되어 있는 객체를 주어진 객체로 변경
    • 객체 검색
      • contains(object)
        • 주어진 객체가 저장되어 있는 지여부
      • get(index)
        • 해당 인덱스에 저장된 객체를 리턴
      • isEmpty()
        • 컬렉션이 비어있는지 확인
      • size()
        • 전체 객체수 리턴
      • iterator()
        • 저장된 객체를 한번씩 가져오는 반복자 리턴
    • 객체 삭제
      • clear()
        • 모든 객체 삭제
      • remove(index)
        • 해당 인덱스에 저장된 객체 삭제
      • remove(object)
        • 주어진 객체 삭제
    • 객체 정렬
      • Collections.sort(리스트명)
        • 오름차순 정렬
      • Collections.sort(리스트명, reverseOrder())
        • 내림차순 정렬
  • Set 컬렉션의 주요 메소드
    • 객체 추가
      • add(element)
    • 객체 검색
      • contains(object)
      • isEmpty()
      • iterator()
      • size()
    • 객체 삭제
      • clear()
      • remove(object)
  • Map 컬렉션의 주요 메소드
    • 객체 추가
      • put(key, value)
        • 주어진 키와 값을 추가, 저장되면 값을 리턴
    • 객체 검색
      • containsKey(key)
        • 주어진 키가 있는지 여부 확인
      • containsValue(value)
        • 주어진 값이 있는지 여부 확인
      • get(key)
        • 주어진 키의 값을 리턴
      • isEmpty()
      • keySet()
        • 모든 키를 Set 객체에 담아서 리턴
      • size()
      • values()
        • 모든 값을 Collection에 담아서 리턴
    • 객체 삭제
      • clear()
      • remove(key)
        • 해당 키와 일치하는 값 삭제, 삭제 시 값 리턴
    • 객체 전체 출력
      • for-each 사용
        • for (String key : map.keySet()) { System.out.println(map.get(key)); }
      • Iterator 사용
        • Iterator<String> it = map.keySet().iterator();
          while (it.hasNext()) {
              System.out.println(it.next());
              System.out.println(map.get(it.next()));
          }
  • Iterator (반복)
    • 컬렉션(List, Map, Set)의 저장된 객체를 한번씩 가져오는 반복자 리턴
    • Iterator<데이터타입> it = 컬렉션명.iterator();
      while (it.hasNext()) {
          System.out.println(it.next());
      }
  • 자바의 데이터 구조
    • 변수
    • Array
      • 인덱스, 대량의 값
    • List
      • 인덱스, 대량의 값
      • 추가, 삭제, 변경
    • Set
      • 중복, 순서없는 집합 구조
    • Map
      • Key-Value
        • JSON, XML 데이터 구조와 연결 역할
        • Class의 변수-값

 

JDBC Programming

  • JDBC (Java Database Connectivity)
    • 자바 프로그램에서 데이터베이스 접속할 수 있도록 만든 API
  • JDBC 프로그래밍 개요 (사용 클래스)
    1. JDBC 드라이버 코드
      1. System.setProperty()
      2. Class.forName()
    2. 데이터베이스 연결
      1. java.sql.Connection
    3. Statement 생성
      1. java.sql.Statement
      2. java.sql.PreparedStatement
    4. SQL문 전송
      1. java.sql.Statement
        1. executeQuery()
        2. executeUpdate()
    5. 결과 받기
      1. java.sql.ResultSet
    6. 연결 해제
      1. java.sql.Connection
        1. close()
  • JDBC 프로그래밍
    1. JDBC 드라이버 로딩 (두가지 방법 중 택)
      1. System.setProperty(”jdbc.drivers”, “com.mysql.jdbc.Driver”);
      2. Class.forName(”com.mysql.cj.jdbc.Driver”);
    2. 데이터베이스 연결
      1. JDBC_URL = “jdbc:mysql://localhost:3306/sqldb”;
      2. Connection conn = DriverManager.getConnection(JDBC_URL, “DB아이디”, “DB비밀번호”);
    3. Statement 생성
      1. Statement stmt = conn.createStatement();
      2. 사용 후에는 stmt.close();
    4. SQL문 전송
      1. stmt.executeUpdate(”insert into 테이블명 values(’ “ + request.getParameter(”username”) + “’,’” + request.getParameter(”email”) + “ ‘)”);
        1. executeQuery()
          1. SELECT문 수행 시 사용
        2. executeUpdate()
          1. UPDATE, DELETE과 같은 문 수행 시 사용
    5. 결과 받기
      1. ResultSet rs = stmt.executeQuery();
      2. while문
      3. while(rs.next()) {
        	name = rs.getString(1);
        	age = rs.getInt(2);
        }
      4. rs.close();
    6. 연결 해제
      1. 사용이 끝난 데이터베이스 연결 정보는 닫아주기
      2. try - with -resource 방법으로 처리

 

 

SQL로 데이터베이스 다루기

SQL문 기본

  • 데이터베이스 생성
    • create database if not exists 데이터베이스명;
  • 데이터베이스 선택
    • use 데이터베이스명;
  • 주석문
    • — 주석내용
  • 테이블 생성
    • create table 테이블명 ( 컬렴명 데이터유형 추가조건 );
      • 추가조건 종류
        • not null
          • null이 아니어야 한다.
        • auto_increment
          • 값이 1씩 자동 증가
        • primary key
          • 기본키로 지정
  • 테이블 구조 확인
    • DESC 테이블명;
  • 레코드 추가
    • insert into 테이블명 (컬럼명1, 컬럼명2, …) values (값1, ‘값2’, …);
    • 모든 컬럼에 레코드 추가 시 insert into 테이블명 values (값1, ‘값2’, …);
  • 테이블 데이터 전체 조회
    • select * from 테이블명;
  • 레코드 수정
    • update 테이블명 set 컬럼명1=’바꿀값’, 컬럼명2=’바꿀값’ where 조건명;
  • 레코드 삭제
    • delete from 테이블명 where 조건명;

 

프로젝트와 데이터베이스 연결

  • 자바 프로젝트와 MySQL DB 연결
    • MySQL Community Downloads
      • Select Operating System: Platfrom Independent 선택
      • ZIP Archive로 다운로드
      • 압축 풀기
      • 폴더 안의 mysql-connector-j-8.3.0.jar 파일 복사
    • 프로젝트 폴더에 lib 폴더 생성 후 붙여넣기
    • 인텔리제이
      • Project Structure- Modules- Dependencies 이동
      • 왼쪽에 + 버튼 누른 후 Jars or Directories 이동 후 위의 jar 파일 선택
  • 데이터베이스 접속 및 쿼리문 실행하는 DAO 클래스 작성
    • 테이블명DAO.java
      • import java.sql.*;
        
        public class MemberDAO {
            //데이터베이스 접속 객체
            Connection conn = null;
            //SQL 쿼리를 구현하는 객체
            Statement stmt = null;
            //쿼리에 대한 응답인 ResultSet을 가져오는 객체
            ResultSet rs = null;
        
            public MemberDAO() {
                try {
                    //MySQL DB 드라이버 로드
                    Class.forName("com.mysql.cj.jdbc.Driver");
                    //데이터베이스 접속
                    conn = DriverManager.getConnection(
                            "jdbc:mysql://localhost:3306/mydb", //Host
                            "root", //사용자
                            "root" //암호
                    );
                } catch (Exception e) {
                    e.printStackTrace();
                    try {
                        conn.close();
                    } catch (Exception ex) {
                        e.printStackTrace();
                    }
                }
                if (conn != null) {
                    System.out.println("데이터베이스 접속 성공!!");
                }
            }
            
            // 그외 insert, update, select 등 함수 작성 
            
            public void close() {
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        throw new RuntimeException(e);
                    }
                }
                if (stmt != null) {
                    try {
                        stmt.close();
                    } catch (SQLException e) {
                        throw new RuntimeException(e);
                    }
                }
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        throw new RuntimeException(e);
                    }
                }
            }
        }
  • DTO 클래스 작성
    • 테이블명DTO.java
    • 각 열을 멤버 변수로 선언
    • 해당 열들의 getter, setter 함수 작성
  • Main 클래스 작성
    • 테이블명Main.java
      • public class MemberMain {
            public static void main(String[] args) {
                // DAO 객체 생성
                MemberDAO dao = new MemberDAO();
        	        
                // 레코드 추가 예시
                MemberDTO dto = new MemberDTO ();
                dto.setMemberno(5);
                dto.setId("hong");
                dto.setName("홍길동");
                int result = dao.insert(vo);
                
                dao.close();
            }
        }