1. 개요

Java에서 MySQL(혹은 MariaDB)에 연결하여 개발해야 하는 경우는 빈번하게 발생한다. 그런데 무언가 잘 안될때 무엇이 문제인지 확인하느라 많은 시간을 허비하게 된다. 오늘은 기본적인 사항을 점검하고 테스트하는 방법을 공유하고자 한다.

 

2. MySQL 측면

  • mysql -u 유저명 -p 를 입력하여 패스워드를 넣고 정상적으로 접속되는지 확인하자.
  • 많은 경우 유저 패스워드가 잘못된 경우가 많다. 만일 패스워드가 잘못되었다면 update user set password = PASSWORD('yyyy') where user='xxxx';와 같이 xxxx 유저의 패스워드를 yyyy 로 맞춰주고 다시 테스트한다.
  • flush privileges를 꼭 해주는 것도 잊지 말자.
  • database, table 등이 정상적인지 확인하자.

 

3. 자바 측면

  • JDBC Driver가 자바 애플리케이션 혹은 애플리케이션 서버의 CLASSPATH에 잘 잡혀있는지 확인하자. (클래스 로딩 : http://sarc.io/index.php/java/473-2016-05-31-15-48-27)
  • 이클립스라면 build path 에서 확인한다.
  • MySQL 서버의 IP, Port를 확인하자.

 

4. 연결 테스트

이제부터는 MySQL에 연결하여 테스트를 해보는 과정을 살펴본다.

- mysql>에서 다음과 같은 테이블을 만든다.

mysql> create table idol ( groupname varchar(50), membername varchar(50) );
Query OK, 0 rows affected (0.01 sec)

- 위에서 만든 idol 테이블에 레코드를 추가한다.

mysql> insert into idol values ('ses', 'vada');
Query OK, 1 row affected (0.00 sec)
mysql> insert into idol values ('sistar', 'dasom');
Query OK, 1 row affected (0.00 sec)

- 이제 아래 Java 코드로 연결을 해본다.

import java.sql.*;

public class MySQLConn {

    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/test";

    static final String USERNAME = "testuser";
    static final String PASSWORD = "testuser";

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try{
            Class.forName(JDBC_DRIVER);
            conn = DriverManager.getConnection(DB_URL,USERNAME,PASSWORD);
            System.out.println("\n- MySQL Connection");
            stmt = conn.createStatement();

            String sql;
            sql = "SELECT groupname, membername FROM idol";
            ResultSet rs = stmt.executeQuery(sql);

            while(rs.next()){
                String groupName = rs.getString("groupName");
                String memberName = rs.getString("memberName");

                System.out.print("\n** Group : " + groupName);
                System.out.print("\n    -> Member: " + memberName);
            }
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se1){
            se1.printStackTrace();
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            try{
                if(stmt!=null)
                    stmt.close();
            }catch(SQLException se2){
            }
            try{
                if(conn!=null)
                    conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        System.out.println("\n\n- MySQL Connection Close");
    }
}

- 결과

- MySQL Connectiom

** Group : ses
    -> Member: vada
** Group : sistar
    -> Member: dasom

- MySQL Connection Close

 

5. JNDI 방식으로 DB 연결

위 예제를 다음과 같이 수정한다.

  • import 추가
javax.sql.DataSource
javax.naming.InitialContext
javax.naming.Context
  • 소스 수정
DataSource dataSource;
Context context = new InitialContext();
dataSource = (DataSource)context.lookup("????");
conn = dataSource.getConnection();