결론 : 버전에 맞지 않는 jdbc driver 를 사용하는 경우 위와 같은 오류메시지가 발생할수 있다.

메시지의 내용이 좀 엉뚱맞아서 한참을 헤맸다. 

더 이상한것은 URL IP 끝자리가 100번인데, 1까지만 나오는점이다.

 

상황

이전에 사용하던 DB커넥션 테스트소스를 새로운 mysql db로의 접속테스트 시도하려는데, 위 제목과 같은 오류메시지가 발생.

 

dbeaver에서도 잘 되고, myslq server에 들어가서 상태를 체크해봐도 이상없는데...

pom.xml의 jdbc driver 버전을 올려주었더니 바로 OK ㅠ.ㅠ;;;

 

그런데 이게 왠만큼 버전차이가 발생하면 이상이 없는듯하다.

구 소스에서 사용하던 드라이버 버전이 mysql 5.1.9 버전이었고, 접속하려는 DB의 버전은 8.0.x였다.

드라이버 버전을 5.1.49버전에서 멀쩡하게 돌아가는것으로 보아 해당 버전사이에 어떠한 업데이트가 있었던듯하다.

 

가급적이면 접속하려는 서버의 버전과 맞춰서 사용하자.

 



MSSQL/Oracle/MySQL JDBC Driver Test

Posted 2013. 6. 10. 21:45

간만에 삽질을 또 했습니다.

한동안 MySQL을 주로 사용하다가, Oracle을 썼고, 이번엔 MSSQL을 쓰게 되었는데, 초보적인 삽질아닌 삽질을 했습니다.

 

지난주까지 멀쩡하게 잘 되던 SqlServer 접속이 안되는 것입니다. 아무리 컴퓨터는 거짓말을 않한다지만...

 

원인은 이렇습니다.

 

1. 잘못된 Copy & Paste

 Class.forName("dirverName") 에 대한 부분이 좀 이상했습니다.

com.microsoft.sqlserver.jdbc.SQLServerDriver vs com.microsoft.jdbc.sqlserver.SQLServerDriver

 

...sqlserver.jdbc.SQLD~ 가 맞습니다.

 

2. DBMS마다 URL 형식이 다릅니다.

 

 - MySQL : jdbc:mysql://127.0.0.1:33061/dbName?

 - Oracle : jdbc:oracle:thin:@127.0.0.1:1521:orcl

 - MSSQL : jdbc:sqlserver://127.0.0.1:433;databaseName=dbName

 - MSSQL(jtds) : jdbc:jtds:sqlserver://127.0.0.1:1433/dbName;tds=8.0

 

정확히 언급하면 같은 DBMS 일지라도 jdbc Driver마다 다르다고 할수 있습니다.

 

3. DBMS 버전, JDK 버전마다 jdbc Driver가 다릅니다.

 

Oracle의 경우 초창기엔 classes12.jar/zip 을 썼지만 현재는 ojdbc를 사용합니다.

MSSQL의 경우 jdk1.5의 경우 JDBC3.0 스펙의 sqljdbc.jar를 사용하지만

jdk1.6의 경우엔 위의 jar를 사용할 경우 Connection이 되지 않습니다.

jdk 1.6 이상에서는 JDBC4.0 스펙의 sqljdbc4.jar를 사용합니다.

 

 

결론은 주말에 기존 작업하던 노트북 HDD를 SSD로 교체하면서 OS를 재설치 했습니다. 설치하면서 jdk1.5, jdk1.6 두개 설치했던것을 jdk1.6만 설치해서 접속이 되지 않은 것입니다.

 

더군다나 중간에 googling 하여 copy & paste 소스에도 driver class package명이 다르게 적혀있어서 삽질을 더 오래하게 되었습니다.

 

각 DBMS별 connection을 가져오는 pseudo 코드는 다음과 같습니다.

1. MS-SQL

//MS에서 제공하는 드라이버를 사용하는 경우
  String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=dbName";
  Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

  Connection conn = DriverManager.getConnection(url, "db_user", "db_password"); 

//net sourceforge.net에서 제공하는 드라이버를 사용하는 경우

String url = "jdbc:jtds:sqlserver://127.0.0.1:1433/DBMS명";
Class.forName("net.sourceforge.jtds.jdbc.Driver");

Connection conn = DriverManager.getConnection(url, "db_user", "db_password"); 

 

 

2. Oracle 의 경우

 String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
 Class.forName("oracle.jdbc.OracleDriver");

...

 

3. MySQL 의 경우

String url = "jdbc:mysql://127.0.0.1:33061/dbName?"

Class.forName("com.mysql.jdbc.Driver");

 

....

 

MSSQL의 3가지 종류 jdbc Driver

 

sqljdbc.jar

 

sqljdbc4.jar

 

jtds-1.3.0.jar