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();