📝 TIL

[TIL] Java Enum, MySQL 개발 환경 설정, JDBC

오늘 ONEUL 2022. 5. 26. 21:40

✍ Today I Learned

[Enum]

  • 열거형(enum)이란? 관련 있는 상수들의 집합이다. class나 interface 대신 enum 키워드를 사용하여 정의하고, 콤마로 상수를 구분한다. 이때 상수는 대문자를 사용한다.
public enum Directions {
    EAST, WEST, SOUTH, NORTH
}
  • 정의된 enum은 다음과 같은 방법으로 사용한다.
Directions east = Directions.EAST;
  • enum의 상수값은 기본적으로 0부터 시작하고, 불규칙한 값을 상수값으로 설정하고 싶으면 상수의 이름 옆에 괄호(())를 추가한 뒤, 그 안에 원하는 상수값을 적으면 된다. 이때 불규칙한 특정 값을 저장할 수 있는 인스턴스 변수와 생성자를 별도로 추가해야만 한다.
    • values() - 해당 enum을 배열로 반환
    • valueOf("String") - 전달된 문자열과 일치하는 enum의 상수 반환
    • ordinal() - enum 상수가 정의된 순서 반환(상수값 자체를 반환하는 게 아님)

 

 

[MySQL 개발 환경 설정]

  • 데이터베이스 회사에서 자바 언어로 제어할 수 있게 제공하는 소프트웨어 = 드라이버
  • MySQL 홈페이지에서 MySQL Community Server와 Connector/J의 zip 파일을 다운로드하여 설치 후 환경변수 설정을 해주었다.
  • cmd를 관리자 권한으로 실행하여 설치된 폴더로 이동한 후 초기화를 해준다.

cmd에서 MySQL 초기화 설정

  • 이때, data 폴더가 생성되는데 웬만하면 건드리지 않는 것이 좋다.
  • cd - change directory 폴더 변경
  • dir - directory 현재 폴더의 목록 보기
  • .. - 상위로 이동
  • / - 루트로 이동
  • 이제 root 계정으로 접속하여 데이터베이스를 선택하고 비밀번호를 설정한다. 초기 비밀번호는 없기 때문에 enter를 입력하면 된다. 초기 설정부터 나머지 설정은 다음과 같다.
mysqld --initialize-insecure
mysqld --install
net start mysql
mysql -uroot -p

mysqld --initialize-insecure
mysqld --install
net start mysql

mysql -uroot -p (초기 비밀번호는 없음 > 엔터)
mysql> use mysql
mysql> ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysql';
mysql> flush privileges;
mysql> exit

(변경된 비밀번호로 재접속)
mysql -uroot -pmysql
mysql> create database javadb;
mysql> use mysql;
mysql> create user 'javauser'@'localhost' identified by 'mysql';
mysql> grant all privileges on javadb.* to 'javauser'@'localhost' with grant option;
mysql> flush privileges;
mysql> exit

(새롭게 생성한 계정으로 접속)
mysql -ujavauser -pmysql
show databases;
  • MySQL설정을 마친 후 Connector/J 파일을 진행하려는 프로젝트의 lib폴더에 이동시키고 Bulid Path 설정을 해준다.
  • jar 파일 우클릭 > Build Path > Add to Build Path

Build path 진행 후 모습

  • DatabaseConnector 클래스를 생성하고 JDBC API를 이용하여 데이터베이스 관련 작업을 처리한다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DatabaseConnector {
    private static DatabaseConnector dbc = new DatabaseConnector(); // static 이기 때문에 인스턴스 생성없이 사용가능
    private Connection conn = null; // 데이터베이스 접속관련 규격
    // Connector/J 에서 제공하는 클래스
    private String jdbcDriver = "com.mysql.cj.jdbc.Driver";
    // MySQL 프로그램 접근 위치
    private String jdbcUrl = "jdbc:mysql://localhost/javadb";

    private DatabaseConnector() {
        try {
            Class.forName(jdbcDriver);
            conn = DriverManager.getConnection(jdbcUrl, "javauser", "mysql");
        } catch (ClassNotFoundException e) {
            System.out.println("드라이버를 찾을 수 없습니다."); // 라이브러리 셋팅 오류
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("연결 정보가 정확하지 않습니다.");
            e.printStackTrace();
        }
    }
    public static DatabaseConnector getInstance() { // 싱글톤 방식, 여기도 static
        return dbc;
    }
    public Connection getConnection() {
        return conn;
    }
}

 

 

[주소록 관리 시스템]

  • 데이터베이스를 이용하여 주소록 관리 시스템을 구현해보자. (데이터의 영속성)
  • Select를 할 땐 Result Set을 반환 값으로 하는 executeQuery()를 사용하고, 그 외에 데이터베이스가 변경되는 일을 할 땐 executeUpdate()를 사용한다.
  • 싱글톤 패턴(Singleton pattern)이란? 프로그램이 시작될 때 어떤 클래스가 최초 한 번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴이다.

 

Insert

mysql> insert into address values(?,?,?)
  • 입력받은 이름, 나이, 전화번호 등의 데이터를 데이터베이스로 넘겨서 저장하고, 결과를 true or false로 반환한다.

 

Select

mysql> select * from address
  • 전달해주는 데이터 없이 전체 데이터 리스트를 List 타입으로 리턴 받는다.