JDBC

JDBC (설치 및 연동, 기본)

code2772 2022. 10. 19. 08:16
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();
        }
    }
}
반응형