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