[Java] mysql과 연동하기

Coastby·2022년 10월 17일
0

LIKELION Back-End School

목록 보기
43/61

1. gradle 빌드

1-1) new project

  • name : 원하는 이름
  • Language : Java
  • Build system : Gradle

1-2) 빌드되었는지 실행해본다.

src - main - java - new - java class

main 메서드에서 출력해보기

System.out.println("good");

1-3) 빌드 설정바꾸기

  • Build and run using : IntelliJ IDEA
  • Run tests using : IntelliJ IDEA

2. Dependency 추가하기

2-1) maven repository에서 mysql 검색

MySQL Connector/J 클릭

2-2) dependency에 추가하기

Gradle 탭의 코드 복사해서 build.gradledependencies 괄호 안에 붙여넣기

2-3) 새로고침

오른쪽 위에 고래버튼 눌러주고 gradle의 dependency에 추가되었는지 확인하기

3. DB에 테이블 생성하기

Workbench에서 실습에 쓰일 user table 생성하기

CREATE TABLE `likelion-db`.`users` (
  `id` VARCHAR(45) NOT NULL,
  `name` VARCHAR(45) NOT NULL,
  `password` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`));

4. add(), getById(), findAll() method 만들기

💡 DB 보안 조심!!! 소스코드에 직접적인 내용 안들어가게 환경변수로 설정해서 넘겨주기

4-1) 환경변수 설정하기

  • UserDao 클래스를 생성한다.
  • main 메서드에 아무거나 입력하고 실행시킨다.
    • 실행 안하고 하면 모듈 인식이 안된다.
  • run configuration 클릭 Edit Configurations..

  • Envitonment variables 작성하기
    • mysql 올릴 때 설정으로 입력한다.
    • DB_HOST : jdbc:mysql://[ec2DNS주소]:3306/[schema이름]
    • DB_PASSWORD : mysql 비밀번호
    • DB_USER : root

  • 정보가 잘 넘어오는지 확인하기

  • 환경변수 잘못 설정하면 Access denied 를 만난다.

🚫 에러

dependency 설정을 안 함

Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:mysql://ec2-3-38-164-117.ap-northeast-2.compute.amazonaws.com:3306/likelion-db

4-2) add() 코드

  • ⌨️ 코드 보기
    public void add() throws ClassNotFoundException, SQLException {
            //environment variable에서 정보를 가져온다
            //소스코드에 직접적인 정보를 안 넣을 수 있다.
            Map<String, String> env = System.getenv();
            String dbHost = env.get("DB_HOST");
            String dbUser = env.get("DB_USER");
            String dbPassword = env.get("DB_PASSWORD");
    
            Class.forName("com.mysql.cj.jdbc.Driver");
    
            //db와 연결하는 단계
            Connection conn = DriverManager.getConnection(dbHost, dbUser, dbPassword); //db연결
            PreparedStatement ps = conn.prepareStatement("INSERT INTO Users(id, name, password) VALUES(?, ?, ?)");
            ps.setString(1, "2");
            ps.setString(2, "Hwang");
            ps.setString(3, "0111");
    
            //ctrl+enter
            ps.executeUpdate();
            ps.close();
            conn.close();
        }
    
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
           UserDao userDao = new UserDao();
           userDao.add();
        }
    
    }

4-3) getById() 코드

  • ⌨️ 코드 보기
    public User getById(String id) throws ClassNotFoundException, SQLException {
        //environment variable에서 정보를 가져온다
        //소스코드에 직접적인 정보를 안 넣을 수 있다.
        Map<String, String> env = System.getenv();
        String dbHost = env.get("DB_HOST");
        String dbUser = env.get("DB_USER");
        String dbPassword = env.get("DB_PASSWORD");
    
        Class.forName("com.mysql.cj.jdbc.Driver");
    
        //db와 연결하는 단계
        Connection conn = DriverManager.getConnection(dbHost, dbUser, dbPassword); //db연결
        //쿼리를 작성하는 코드
        PreparedStatement ps = conn.prepareStatement("SELECT id, name, password FROM Users WHERE id=?");
        ps.setString(1, id);
    
        ResultSet rs = ps.executeQuery();
        rs.next();
        User user = new User(rs.getString("id"), rs.getString("name"), rs.getString("password"));
    
        System.out.println("SELECT 완료");
        rs.close();
        ps.close();
        conn.close();
    
        return user;
    }

4-4) finaAll() 코드

  • ⌨️ 코드 보기
    public List<User> findAll() throws ClassNotFoundException, SQLException {
            //environment variable에서 정보를 가져온다
            //소스코드에 직접적인 정보를 안 넣을 수 있다.
            Map<String, String> env = System.getenv();
            String dbHost = env.get("DB_HOST");
            String dbUser = env.get("DB_USER");
            String dbPassword = env.get("DB_PASSWORD");
    
            Class.forName("com.mysql.cj.jdbc.Driver");
    
            //db와 연결하는 단계
            Connection conn = DriverManager.getConnection(dbHost, dbUser, dbPassword); //db연결
            //쿼리를 작성하는 코드
            PreparedStatement ps = conn.prepareStatement("SELECT * FROM Users");
            ResultSet rs = ps.executeQuery();
            List<User> userList = new ArrayList<>();
            while(rs.next()){
                User user = new User(rs.getString("id"), rs.getString("name"), rs.getString("password"));
                userList.add(user);
            }
            System.out.println("SELECT 완료");
            rs.close();
            ps.close();
            conn.close();
    
            return userList;
        }
profile
훈이야 화이팅

0개의 댓글