Java에서 MySQL 사용
자바에서 MS-SQL 접근하는 법을 살펴봤으니,
자바에서 "Microsoft SQL Server JDBC Driver" 사용하는 방법
; https://www.sysnet.pe.kr/2/0/1116
이번에는 MySQL 쪽으로 눈을 돌렸습니다. ^^
지난번 PHP + MySQL 연동을 했을 때 설명했던 것과 동일하게 MySQL을 설치하고 "mysqld --install" 명령어로 NT 서비스로 등록시켰습니다.
.NET 개발자가 처음 해보는 PHP + MySQL 연동
; https://www.sysnet.pe.kr/2/0/1058
또한, SQL 서버에 익숙한 분들은 SSMS(SQL Server Management Studio)와 같은 도구가 그리울텐데요. MySQL의 경우 다음과 같은 GUI 관리 도구를 배포하고 있습니다.
MySQL Workbench
; http://www.mysql.com/products/workbench/
Zip 파일의 압축을 풀고 "MySQLWorkbench.exe" 파일을 실행시켜 주면 됩니다. 오~~~ 나름 쓸만한데요. ^^ 아래 화면은, Workbench에서 적당하게 테스트 DB 및 테이블 만들어 본 것입니다.
닷넷에서도 (더 나은 성능으로) DB 연동을 하려면 해당 DB에 대해 전용 ADO.NET Data Provider가 필요한데, MySQL의 경우 "MySql ADO.NET Driver"라는 것을 사용해서 접근할 수 있습니다.
자바 역시, MySQL용의 "JDBC Driver"가 필요하고 이것도 MySQL 웹 사이트 쪽에서 다운로드할 수 있습니다.
Download Connector/J
- MySQL Connector/J is the official JDBC driver for MySQL.
; http://www.mysql.com/downloads/connector/j/
압축을 풀면, "mysql-connector-java-5.1.17-bin.jar"라는 파일이 나오는데, 서블릿에서 테스트 하는 경우
MS-SQL 실습했을 때와 동일하게 복사를 해주면 됩니다.
- mysql-connector-java-5.1.17-bin.jar를 '[톰캣 설치폴더]\lib' 폴더에 복사 (실행을 위해!)
- Eclipse IDE에서 Java Build Path / Libraries / Add External JARs를 통해 mysql-connector-java-5.1.17-bin.jar를 지정 (컴파일을 위해!)
(만약, mysql-connector-java-5.1.17-bin.jar 내부의 클래스를 직접 사용하는 경우가 아니라면 참조 생략 가능)
DB Provider에 대한 추상화는 자바가 더욱 잘해놓은 것 같습니다. 왜냐하면, 닷넷의 경우 DB가 바뀌면 (별도의 배려를 하지 않고 작성한 경우를 제외하고) DB Provider용 어셈블리에 대한 참조 변경부터 코드까지 모두 손을 대야 하는데, 자바의 경우에는 Class.forName 메서드에 전달되는 JDBC Driver 이름 및 연결 문자열만 바꿔주면 되기 때문입니다.
가령 아래는 MS-SQL 접근 코드인데,
import java.sql.*;
public class TestMain {
public static void main(String [] args)
{
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn = DriverManager.getConnection("jdbc:sqlserver://mydb2:1433;" +
"databaseName=TestDB;user=testdbuser;password=testdbuser2008");
conn.close();
}
catch (Exception ex)
{
System.out.println(ex.toString());
}
}
}
MySQL로 DB가 변경된 경우 소스 코드 상에서 수정되는 것은 다음과 같이 간단합니다.
import java.sql.*;
public class TestMain {
public static void main(String [] args)
{
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost" ,"root" ,"");
conn.close();
}
catch (Exception ex)
{
System.out.println(ex.toString());
}
}
}
나머지 지루한 CRUD 코드는 생략합니다.
Java에서 MySQL 사용법은 쉬운데, 의외로 MySQL 관리 자체가 낯설더군요. 예를 들어, 기본적인 "root" 사용자 이외에 별도로 다음과 같은 설정으로 추가를 했을 때,
연결 문자열을 다음과 같은 식으로 바꾸는 정도로는 오류가 발생했습니다.
DriverManager.getConnection("jdbc:mysql://localhost" ,"newuser" ,"newuser2008");
== 예외 ==
java.sql.SQLException: Access denied for user 'newuser'@'localhost' (using password: YES)
MySQL에서 "Limit Connectivity to Hosts Matching" 값에 "%" 문자를 사용하는 것은 도스의 "*(asterisk)" 의미와 동일합니다. 즉, 모든 클라이언트로부터 연결을 받아들이겠다는 의미인데요. 아쉽게도 그 '모든 클라이언트'에 "localhost"와 "127.0.0.1"은 포함되지 않습니다.
따라서, 다음과 같이 명시적으로 IP (또는 호스트 이름)을 설정해야 합니다.
DriverManager.getConnection("jdbc:mysql://192.168.50.32" ,"newuser" ,"newuser2008");
(왜 "모든 클라이언트"에서 "localhost"는 제외한 것일까요? ^^;)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]