리눅스 환경의 JAVA에서 MySQL 연결을 위한 드라이버 설정
1. 드라이버 다운로드
자신이 사용하는 MySQL 버전에 맞게 다운로드
- MySQL 5.0 하위 버전
- MySQL 5.1 이상(현재 최신버전)
- 다른 버전 선택
위 링크로 이동하면, 'mysql-connector-java-x.x.x.tar.gz'(또는 *.zip) 파일을 다운로드 받을 수 있다. 단, 오라클 계정으로 로그인을 해야한다.
(오라클 계정 하나면 오라클, 자바, MySQL 관련 자료를 쉽게 얻을 수 있으니 계정이 없는 사람은 이번 기회에 만들어 두는게 좋을 듯)
2. 드라이버 설치(압축풀기)
설치라고 해봐야 별거 없다. tar 명령으로 압축풀어주면 끝
(jdk가 설치 되어있고, JAVA_HOME 환경변수 설정이 완료된 상태로 가정)
<ex>
# tar zxvf mysql-connector-java-5.1.26.tar.gz
# cd mysql-connector-java-5.1.26
# mv mysql-connector-java-5.1.26-bin.jar $JAVA_HOME/lib/
3. 환경변수 추가(classpath)
# vi /etc/profile
...
export CLASSPATH=.:$JAVA_HOME/lib/mysql-connector-java-5.1.26-bin.jar
(위와 같이 입력 후 저장)
# sh /etc/profile
(프로파일 변경 내용이 적용 되도록 해줌)
4. 연동확인
- 서버 호스트 : MySQL 서버의 아이피
- 포트 : MySQL 서버에 설정된 포트번호
- DB명 : 접속 할 DB명
- mysql 계정 : mysql DB의 user 테이블에 설정된 계정
- 패스워드 : mysql 계정에 설정된 패스워드
각자 환경 및 설정에 맞게 입력 후 java 파일을 컴파일 하여 실행했을 때 에러 또는 예외 메시지가 나오지 않았다면, 연동 성공
(위 소스를 컴파일 했을 때 발생되는 경고는 'conn' 객체를 사용하는 곳이 없어서 나는 경고 이므로 무시해도됨)
* 'Class.forName("com.mysql.jdbc.Driver");'이 부분은 'org.gjt.mm.mysql.Driver'으로 넣어줘도 상관 없음
하지만 'com.mysql.jdbc.Driver' 로 넣어주는 것을 권장.
'org.gjt.mm.mysql.Driver'는 예전 버전에서 사용하던 방식이고, 지금은 'com.mysql.jdbc.Driver' 로 많이 사용함. (기능적인 차이는 없음)
5. Exception 해결방법
- 예외 1
Exception in thread "main" java.lang.NoClassDefFoundError: java.util.concurrent.ConcurrentHashMap
at com.mysql.jdbc.NonRegisteringDriver.<clinit>(NonRegisteringDriver.java:83)
at java.lang.Class.initializeClass(libgcj.so.7rh)
at java.lang.Class.initializeClass(libgcj.so.7rh)
at java.lang.Class.forName(libgcj.so.7rh)
at java.lang.Class.forName(libgcj.so.7rh)
at CheckMySQL.main(CheckMySQL.java:14)
(MySQL 버전보다 높은 드라이버를 사용할 때 발생)
- 예외 2
Exception in thread "main" java.lang.NoClassDefFoundError: CheckMySQL.class
at gnu.java.lang.MainThread.run(libgcj.so.7rh)
Caused by: java.lang.ClassNotFoundException: CheckMySQL.class not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./,file:/usr/local/jdk1.6.0_45/lib/mysql-connector-java-3.1.0-alpha-bin.jar,file:/usr/local/tomcat-7.0.29/lib/servlet-api.jar,file:/home/tomcat/web/WEB-INF/classes/], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
at java.net.URLClassLoader.findClass(libgcj.so.7rh)
at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.7rh)
at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
at gnu.java.lang.MainThread.run(libgcj.so.7rh)
(잘못된 방법으로 클래스 파일을 실행했을 때 발생, 실행시 class 확장자를 넣어줬을 경우)
* 컴파일은?
# javac CheckMySQL.java
* 실행은?
#java CheckMySQL
- 예외 3
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./,file:/usr/local/tomcat-7.0.29/lib/servlet-api.jar,file:/home/tomcat/web/WEB-INF/classes/], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
at java.net.URLClassLoader.findClass(libgcj.so.7rh)
at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.7rh)
at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
at java.lang.Class.forName(libgcj.so.7rh)
at java.lang.Class.forName(libgcj.so.7rh)
at CheckMySQL.main(CheckMySQL.java:14)
(드라이버를 찾을 수 없으므로, 환경변수 설정 적용이 되지 않은 경우이거나 적용은 되었으나 jar파일이 해당 위치에 없어서 불러오지 못했을 수도 있다. 처음부터 천천히 다시 해보는 것이 좋음. 여기서 중요한 부분은 '/etc/profile'에 classpath 를 잡아주고 '/etc/profile'을 다시 불러오게 해줘야 한다는 점 - 다시 불러온다는 의미가 이해하기 어렵다면 리눅스 로그아웃 후 다시 로그인 하면됨)
* 위 예외 3가지에 대한 해결 방법이 각자 환경에 따라 달라질 수 있으므로 참고만 할 것!
출처 : http://jino8752.blogspot.kr/2013/09/java-mysql.html
레퍼런스 :
1. http://confluence.goldpitcher.co.kr/display/GPJIRA/Configuring+database+connection+results+in+Error%3A+Host+%27xxxxxxx%27+is+not+allowed+to+connect+to+this+MySQL+server
2. http://noon.tistory.com/1477
3. http://www.mkyong.com/jdbc/how-to-connect-to-mysql-with-jdbc-driver-java/
4. http://ra2kstar.tistory.com/120#recentTrackback
'Skills > Unix, Linux' 카테고리의 다른 글
Linux 에서 DNS 설정 하기 (0) | 2015.11.09 |
---|---|
VNC Server 설정 다시한번 파헤치기 (0) | 2015.10.30 |
How to install tcpreplay on Linux (0) | 2015.03.18 |
.bash_profile과 .bashrc의 차이점 (0) | 2015.03.05 |
[Linux] 아파치를 이용한 리눅스 웹 서버 구축 (0) | 2014.11.26 |
댓글