MSSQL JDBC 연동

김재민·2022년 9월 19일
0

회사 내부 과제로 MSSQL 과 JDBC 연동하여 DB를 INESERT하고 있었다.

코드를 작성하고 첫번째 발생한 오류는

com.microsoft.sqlserver.jdbc.SQLServerException: 드라이버가 SSL(Secure Sockets Layer) 암호화를 사용하여 SQL Sever로 보안 연결을 설정할 수 없습니다. 오류: "The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]". ClientConnectionId:661cd102-e250-408a-b966-79141847dd2a
   at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:3806)
   at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1906)
   at com.microsoft.sqlserver.jdbc.SQLServerConn

였는데 해결 방법을 확인해보니 JAVA_HOME/lib/security/java.security 파일의 내용을 수정하면 된다고 했는데

나의 자바는 11버전이어서 그런지 몰라도 security 폴더 자체가 없었다.

우선 java1.8버전을 다시 다운 받아서 버전을 내렸다.

local서버로 테스트했을 때는 실행이 되긴했다.

하지만 runnable jar 파일로 생성했을 때

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
        at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:317)
        at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:259)
        at java.util.jar.JarVerifier.processEntry(JarVerifier.java:329)
        at java.util.jar.JarVerifier.update(JarVerifier.java:239)
        at java.util.jar.JarFile.initializeVerifier(JarFile.java:404)
        at java.util.jar.JarFile.ensureInitialization(JarFile.java:641)
        at java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:69)
        at sun.misc.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:995)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:456)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)

와 같은 에러가 또 한번 발생했다.

에러를 해결하기 위해 온갖 방법을 했는데 잘되지 않아서 여러가지 시도를 해보다가 기존에 받았던 sqljdc_11.2를 삭제하고 sqljdbc4.jar로 다운받아서 실행했더니 되는 것처럼 보였다.

근데, 계속해서 문제가 생겼고 sqljdbc42.jar 내의 META-INF/ MSFTSIG.RSA 파일을 삭제하였다.

근데 intellij내에서 삭제가 되지않아 cmd 터미널을 통해 삭제하였다.

삭제 명령어

zip -q -d sqljdbc42.jar META-INF/MSFTSIG.RSA

이후에 실행했더니 실행은 되었지만 새로 생긴 문제

源?吏??뿰	???옣	jiyeonkim@hansol.com
?쑄?젙臾?	?꽑?엫	jmyun@hansol.com
?븞寃쎌닔	梨낆엫	gs.ahn@hansol.com

이런식으로 결과값이 한글이 깨져서 나왔다.

해결법

System.setProperty("file.encoding","UTF-8");

        Field charset = Charset.class.getDeclaredField("defaultCharset");
        
        charset.setAccessible(true);
        charset.set(null,null);

코드를 추가하고 다시 jar 파일을 build하니 제대로 실행됨

profile
어제의 나보다 나은 오늘의 내가 되자!🧗‍♂️

0개의 댓글