Database 2일차

소윤정·2021년 6월 13일
0

DataBase

목록 보기
2/2

오늘은 어제 배운 데이터베이스 기본 문법을 배운것을 바탕으로 자바에서 어떻게 쓰이는 지에 대해 배웠다. 자바만 할때는 조금 지루한 감이 있었는데 시각적으로 결과가 눈에 보이니까 그래도 조금은 재밌는것같다 :)

JDBC (Java Database Connectivity)

  • 클래스들을 모아 놓은 것
  • 자바에서 DB프로그램을 하기 위해 사용하는 API
API(Application Programming Interface)란?
  • 소프트웨어를 구축하고 통합하기 위한 정의 및 프로토콜 세트
  • 프론트엔드와 백엔드가 서로 주고 받기 위한 URL
  • JDBC API : 일반적인 SQL 문법을 알아들을 수 있는 클래스
  • JDBC Driver : SQL 홈페이지에서 다운 받아서 사용할 수 있음

JDBC Driver 다운로드

https://dev.mysql.com/downloads/connector/j/

  1. Platform Independent 선택
  2. zip 버전 다운로드

인텔리제이에 JDBC 드라이버 포함(프로젝트할때마다 계속 사용하니 기억!)

  • File - Project Structure - Library - +버튼 누르고 jar 파일을 선택

JDBC를 통해 DBMS 연결

  1. JDBC 드라이버를 로딩

    • Class.forName("JDBC 드라이버 패키지명");
      ex) Class.forName("com.mysql.jdbc.Driver");
  2. JDBC 와 DBMS 연결

    • Connection conn = DriverManager.getConnection(url, userid, userpw); 연결 성공 후 Connection 객체 생성
    • jdbc:mysql://ip주소 / db명?useSSL=SSL 사용여부(true, false)
      ex) jdbc:mysql://127.0.0.1/DB 스키마?useSSL=false
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class jdbc1 {
    public static void main(String[] args) {
        String url = "jdbc:mysql://127.0.0.1/jcp?useSSL=false";
        String userid = "DB 이름";
        String userpw = "DB 비밀번호";

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("드라이버가 로드되었습니다.");
            Connection conn = DriverManager.getConnection(url, userid, userpw);
            System.out.println("MySQL에 정상적으로 연결되었습니다.");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e){
            e.printStackTrace();
        }
    }
}

결과)


Statement 인터페이스

  • Statement 객체는 Statement 인터페이스를 구현한 객체를 Connection 클래스의 createStatement() 메소드를 호출
  • executeQuery() 메소드를 호출하여 SQL문을 실행할 수 있다.
  • executeUpdate() 메소드를 통해 SQL문을 실행할 수 있다. (insert, update, delete)
  • executeQuery() 메소드를 호출하여 SQL문을 실행할 수 있다.(select)

문제) 회원가입 프로그램 작성

출력)
아이디를 입력하세요. apple
비밀번호를 입력하세요. 1111
이름을 입력하세요. 김사과
...

주소를 입력하세요. 서울
상세주소를 입력하세요. 서초구
참고사항을 입력하세요. 201동
회원 가입이 완료 되었습니다!

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

/*
    회원가입 프로그램 작성
 */
public class jdbc3 {
    public static void main(String[] args) {
        String url = "jdbc:mysql://127.0.0.1/jcp?useSSL=false";
        String userid = "DB 이름";
        String userpw = "DB 비밀번호";
        Scanner sc = new Scanner(System.in);

        System.out.println("********** 회원가입 **********");
        System.out.print("아이디를 입력하세요 >> ");
        String mem_userid = sc.next();
        System.out.print("비밀번호를 입력하세요 >> ");
        String mem_userpw = sc.next();
        System.out.print("이름을 입력하세요 >> ");
        String mem_name = sc.next();
        System.out.print("핸드폰 번호를 입력하세요 >> ");
        String mem_hp = sc.next();
        System.out.print("이메일을 입력하세요 >> ");
        String mem_email = sc.next();
        System.out.print("취미를 입력하세요 >> ");
        String mem_hobby = sc.next();
        System.out.print("주민번호 앞자리를 입력하세요 >> ");
        String mem_ssn1 = sc.next();
        System.out.print("주민번호 뒷자리를 입력하세요 >> ");
        String mem_ssn2 = sc.next();
        System.out.print("우편번호를 입력하세요 >> ");
        String mem_zipcode = sc.next();
        System.out.print("주소를 입력하세요 >> ");
        String mem_address1 = sc.next();
        System.out.print("상세주소를 입력하세요 >> ");
        String mem_address2 = sc.next();
        System.out.print("참고사항을 입력하세요 >> ");
        String mem_address3 = sc.next();

        String sql = "INSERT INTO tb_member (mem_userid, mem_userpw, mem_name, mem_hp, mem_email, mem_hobby, mem_ssn1, mem_ssn2, \n" +
                "mem_zipcode, mem_address1, mem_address2, mem_address3) VALUES ('"+mem_userid+"', '"+mem_userpw+"', " +
                "'"+mem_name+"', '"+ mem_hp+"', \n" + "'"+mem_email+"', '"+mem_hobby+"', '"+mem_ssn1+"', '"+mem_ssn2+"', '"+mem_zipcode+"', " +
                "'"+mem_address1+"', '"+mem_address2+"', '"+mem_address3+"')";

//        System.out.println(sql);
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection conn = DriverManager.getConnection(url, userid, userpw); // DBMS에 로그인 시키기
            Statement stmt = conn.createStatement(); // SQL 실행하는 녀석
            int result = stmt.executeUpdate(sql);
            if(result >= 1) System.out.println("회원가입이 완료되었습니다!");
            else System.out.println("회원가입에 실패하였습니다!");
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }catch (SQLException e){
            e.printStackTrace();
        }
    }
}

ResultSet 인터페이스

  • 결과를 저장할 수 있는 객체
  • 저장된 값을 행 단위로 불러올 수 있음
  • 행 단위로 데이터를 가져올 경우 타입을 지정하여 불러올 수 있음
  • 커서라는 개념이 있다. ( 데이터를 가르키는 것이 아닌 필드명을 가르키고 있다)

DTO (Data Transfer Object)

  • 데이터 교환을 위한 객체
    ex) getter and setter

DAO(Data Access Object)

  • DB에 대한 접근을 담당하기 위해 만들어진 객체
    ex) controller를 DB랑 사용하기 위해 빼놓은 것

0개의 댓글