본문 바로가기
JDBC

JDBC (설치 및 연동, 기본)

by code2772 2022. 10. 19.

[ 목차 ]

    728x90
    반응형

    설치 및 연동과 기본

    JDBC(Java Database Connectivity)
    자바에서 DB 소프트웨어와 연결하여 프로그램을 개발하기 위해 사용하는 API
    
        자바 어플리케이션 <--------> JDBC API <---------> JDBC Driver <----------> MySQL
    
    JDBC Driver 다운로드 - 라이브러리
    - dev.mysql/downloads/connector/j
    - platform Independent 선택
    - No thanks, just start my download.
    - zip 파일 다운로드
    - 암축풀고 mysql-connector-j-8.0.31.jar 파일을 원하는 디렉토리에 저장
    
    라이브러리 : 도구(툴) - (공사를 위한 도구, 툴)
    프레임워크 : 틀(비워쟈 있는 건축물) - (이미 만들어진 건축물)
    
    인텔리제이 JDBC 드라이버 추가
    file -> Project Structure -> Library -> + 버튼 -> Java -> 드라이버 jar파일 선택 -> ok
    
    JDBC API를 통해 DBMS와 연결
    1. JDBC Driver를 로딩
        Class.forName("JDBC 드라이버 패키지명");
        Class.forNmae("com.mysql.cj.jdbc.Driver"); // 대소문자 구분핵서 써야한다.
    2. JDBC API와 DBMS 연결
        DriverManager.getConnection(주소, 아이디, 비밀번호); //연결을 성공하면 Connection 객체가 생성
        주소 : jdbc:mysql//ip주소/db명?userSSL=true
    
    Statement 인터페이스
    - Connection 클래스의 createStatement() 메소그를 호출시 Statement 객체가 생성
    - Statement 객체는 Statement 인터페이스를 구현한 객체
    - executeUpdate() 메소드를 통해 insert, update, delete 구문을 실행항 수 있음
    - executeQuery() 메소드를 통해 select 구문을 실행할 수 있음

    연동

    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/test?ussSSL=false"; // 127.0.0.1은 내 주소를 뜻함
            String uid = "banana"; // 아이디
            String upw = "2222"; // 비밀번호
    
            try {
                Class.forName("com.mysql.cj.jdbc.Driver"); //오류시 밑에있는 출력은 안나온다.
                System.out.println("드라이버가 로드되었습니다.");
    
                Connection conn =DriverManager.getConnection(url, uid, upw);//connection 객체를 리턴
                // Connection 객체는 연결이 된 상태에서 sql구문을 사용한다.
                // DriverManager은 연결을 의미한다.
                System.out.println("MySQL 서버에 정상적으로 연결되었습니다.");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
    }

    Insert문

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class Jdbc2 {
        public static void main(String[] args) {
            String url = "jdbc:mysql://127.0.0.1/test?ussSSL=false";
            String uid = "banana";
            String upw = "2222";
            String sql = "insert into product values('0000000099', '인텔리제이', '편해요',160000, now())";
    
    
            try {
                Class.forName("com.mysql.cj.jdbc.Driver"); //오류시 밑에있는 출력은 안나온다.
                // 내부에 있는것은 패키지명을 뜻한다.
                Connection conn = DriverManager.getConnection(url, uid, upw);//connection 객체를 리턴
                // 겟 컨넥션을 통해 데이터베이스와 연결 -> 연결이 되면 connection 객체가 생성된다.
                // Connection 객체는 연결이 된 상태에서 sql구문을 사용한다.
                // DriverManager은 연결을 의미한다.
    
                Statement stmt = conn.createStatement();// sql을 다룰 수 있는 상태로 만듬int cnt = stmt.executeUpdate(sql);
                // String을 입력하지만 받아오는것은 int형이다. 얼마나 업데이트 되었는지?
                // stmt는 sql을 실행해준다.
                int cnt = stmt.executeUpdate(sql);// String을 입력하지만 받아오는것은 int형이다.
                if (cnt >= 1) System.out.println(cnt + "개의 레코드가 삽입되었습니다.");
                else System.out.println("삽입 실패");
    
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    

    과제

    
    aidev 데이터베이스를 다룰 수 있는 계정(자신이 원하는 계정 생성)으로 접속하여 tb_member에 사용자를
    insert하는 프로그램을 만들어보자.
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class JdbcTask {
        public static void main(String[] args) {
            String url = "jdbc:mysql://127.0.0.1/aidev?ussSSL=false";
            //mysql> create user 'song'@'%' identified by '2772';
            //mysql> grant all privileges on aidev.* to 'song'@'%';
            String uid = "song";
            String upw = "2772";
            String sql = "insert into tb_member (mem_userid, mem_userpw, mem_name, mem_hp, mem_email, mem_ssn1, mem_ssn2)" +
                    " values ('sakdwms', '2772', 'gnstjq', '010-456-4145', 'gnstjq@gnstjq.com', '231545', '41515')";
            try {
                Class.forName("com.mysql.cj.jdbc.Driver"); //오류시 밑에있는 출력은 안나온다.
                Connection conn = DriverManager.getConnection(url, uid, upw);//connection 객체를 리턴
                // Connection 객체는 연결이 된 상태에서 sql구문을 사용한다.
                // DriverManager은 연결을 의미한다.
    
                Statement stmt = conn.createStatement();// sql을 다룰 수 있는 상태로 만듬
                int cnt = stmt.executeUpdate(sql);// String을 입력하지만 받아오는것은 int형이다. 얼마나 업데이트 되었는지?
                if (cnt >= 1) System.out.println(cnt + "개의 레코드가 삽입되었습니다.");
                else System.out.println("삽입 실패");
    
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {//예외 발생 당시의 호출스택(Call stack)에 있던 메소드의 정보와 예외 결과를 화면에 출력함
                e.printStackTrace();
            }
        }
    }
    
    반응형