[JDBC] 자바와, MYSQL 연동하기

ho's·2022년 7월 21일
0

인텔리제이에서 그레이들 사용하기

인텔리제이에 들어가서 gradle프로젝트를 만든 후, build.gradle 파일에 들어가서 dependencies 에 아래와 같은 코드를 작성해서 mysql을 연결하자

implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.27'

위의 코드를 mysql jdbc드라이버라고 한다.

그레이들이 없었다면 아래와 같은 jar파일들을 직접 다운받아 저장해야 한다.
그레이들을 이용해서 코드 한줄이면 편리하게 mysql jdbc드라이버를 사용할 수 있게 된다.

자바에서 JDBC를 사용해보자

JDBC란
Java DataBase Connectivity의 약자로 JDBC는 자바 언어로 데이터베이스 프로그래밍을 하기 위한 라이브러리이다.
JDBC는 DBMS에 종속되지 않는 관련 API를 제공한다.

JDBC API 클래스

  • JDBC는 다양한 클래스와 인터페이스로 구성된 패키지 java.sql와 javax.sql로 구성되어 있다.

  • 데이터베이스를 연결하여 테이블 형태의 자료를 참조

  • SQL 문을 질의

  • SQL 문의 결과를 처리

  • Java는 인터페이스만 제공한다.

  • interface를 실제로 구현하는 것은 보통 Database를 만든 회사

JDBC를 이용한 데이터베이스 연동 과정은 아래와 같다.

JDBC로 DBMS연결

package com.example.jdbcexam01;

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

public class Connectiontest {
    public static void main(String[] args) {
        try(
            Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/classicmodels?useSSL=false&serverTimezone=Asia/Seoul&useUnicode=true&character_set_server=utf8mb4", "root","gkseogh1!23")){
            String sql = "select firstname, lastname, email from employees";
            try(PreparedStatement ps = conn.prepareStatement(sql)){
                ResultSet rs = ps.executeQuery();

                while(rs.next()){
                    String firstName = rs.getString("firstname");
                    String lastName = rs.getString("lastname");
                    String email = rs.getString("email");

                    System.out.println(firstName + "," + lastName +"," + email);
                }
                rs.close();
            }catch(Exception ex){
                System.out.println("SQL error " + ex);
            }
        }

        catch(Exception ex){
            ex.printStackTrace();
        }

    }
}

한글 깨짐 현상을 방지하기 위해 아래와 같은 코드를 getConnection의 첫번째 인자,database앞에 넣어 주도록 한다.

?useSSL=false&serverTimezone=Asia/Seoul&useUnicode=true&character_set_server=utf8mb4
  • DriverManager.getConnection 자바와 sql을 연동해주는 역할

다른 코드 방법

package com.example.jdbcexam01;

import java.sql.*;

public class Connectiontest {
    public static void main(String[] args) {

        Connection c = null;

        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
        }catch(ClassNotFoundException ex){
            System.out.println("JDBC error" + ex.getMessage());
            ex.printStackTrace();
        }

        try{
            c = DriverManager.getConnection("jdbc:mysql://localhost:3306/classicmodels","root","gkseogh1!23");
            String sql = "select employeeNumber, lastName, firstName, extension, email, officeCode, reportsTo, jobTitle from employees";
            try(PreparedStatement ps = c.prepareStatement(sql)){
                ResultSet rs = ps.executeQuery();

                while(rs.next()) {
                    int employeeNumber = rs.getInt("employeeNumber");
                    String lastName = rs.getString("lastName");
                    String firstName = rs.getString("firstName");
                    String extension = rs.getString("extension");
                    String email = rs.getString("email");
                    String officeCode = rs.getString("officeCode");
                    int reportsTo = rs.getInt("reportsTo");
                    String jobTitle = rs.getString("jobTitle");

                    System.out.println(employeeNumber + "," + lastName + ","+ firstName + ","+ extension + ","+ email +"," + officeCode +","+reportsTo+","+jobTitle);
                }
                rs.close();
                }
        }catch(SQLException ex){
            ex.printStackTrace();

        }
        try{
            if(c != null){
                c.close();
            }
        }catch(SQLException e){}
    }
}

위와 같이 정보가 잘 읽혀지지만 반복되는 코드가 많다고 느껴진다.


해결 안되는 오류

다음과 같이 실행시킬때 인코딩문제가 발생했다. 설정에 들어가서 utf-8변경해 주어도 해결되지 않는다.

profile
그래야만 한다

0개의 댓글