본문 바로가기
프로그래밍/Java

[JAVA / 자바]JDBC(JAVA API) 연결 에러/문제 해결하기

by Mr.noobiest 2023. 12. 12.

 

Mysql과 JSP를 JDBC를 사용해서 연결하려고 한다. 바로 에러 발생

 

1) 첫번째 에러 

java.sql.SQLException: No suitable driver

드라이버가 맞지 않다는거다 mysql의 버전과 JDBC 버전이 맞는지 확인해야 한다.

mysql> SELECT version();으로 확인하거나 그냥 mysql에 접속하면 아래에 뜬다

 

 

이후 아래 사이트에서 mysql 자기버전 JDBC driver로 검색하여 아래 이미지와 같이 Download 링크로 이동한다.

ex)mysql 8 .0.25 jdbc driver

 

MySQL :: MySQL Blog Archive

Nov 24, 2023 EXPLAIN INTO and EXPLAIN FOR SCHEMA in MySQL By Magnus Brevik Nov 10, 2023 How to use MySQL 8.2 read/write splitting with Connector/Python By Frederic Descamps Nov 2, 2023 Enhancing systemd notifications in MySQL By Tarang Ranpara Oct 31, 2023

dev.mysql.com

 

 

이후 아래 사이트에서 본인의 운영체제를 선택하여 jar 파일을 다운로드한다.

 

MySQL :: Download Connector/J

MySQL Connector/J is the official JDBC driver for MySQL. MySQL Connector/J 8.0 and higher is compatible with all MySQL versions starting with MySQL 5.7. Additionally, MySQL Connector/J 8.0 and higher supports the new X DevAPI for development with MySQL Ser

dev.mysql.com

 

 

다운로드 받은 jar파일을  본인의 프로젝트 -> WEB-INF -> lib 안에 넣어준다

이후 jar파일 우클릭 -> build path -> Add ...를 눌러주면 알아서 프로젝트에 해당 jdbc dirver가 적용된다.

 


 

2) 바로 찾아오는 두번째 문제

타임존이 문제인 에러였다, URL을 아래와 같이 변경하면 에러가 해결된다.

Public Key Retrieval is not allowed at ~~~ 에러 발생
url="jdbc:mysql://localhost:3306/UserChat?serverTimezone=Asia/Seoul"/>

 


 

3) 아직 끝나지 않은 3번째 문제

Unknown system variable 'query_cache_size' ~~~

의존성 문제로 mysql의 버전을 직접 기입해주면된다 version="8.0.25"

 

runtime "mysql:mysql-connector-java:8.0.25"

 


 

4) 너무나도 뻔한 Access Denined 에러

패스워드도 맞고 root 계정도 맞는데 액세스 거부가 떴다 -> 패스워드를 숫자로만 변경했더니 해결됨

mysql> alter user 'root'@'localhost' identified with mysql_native_password by '1234';

mysql> flush privileges;

 


 

 

에러가 애초에 발생하지 않게 아래 사항을 미리 적용하도록 하자

1) JDBC Driver -jar파일을 나의 mysql 버전에 맞춤

2) mysql url의 timezone 설정

3) 비밀번호 간략화

4) version 직접 기입


 

결과

context.xml를 아래와 같이 설정하도록 한다.

<Context path="/UserChat" docBase="www">
 <Resource
          name="jdbc/UserChat"
          auth="Container"
          type="javax.sql.DataSource"
          maxTotal="100"
          maxIdle="30"
          maxWaitMillis="10000"
          username="root"
          password="비밀번호"
          version="8.0.25"
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/UserChat?serverTimezone=Asia/Seoul"/>
          <ResourceLink type="javax.sql.data.DataSource" name="jdbc/UserChat" global="jdbc/UserChat" />
</Context>

 

 

그리고 생성한 DB "UserChat"에 임의의 값을 넣은다음 확인하도록 한다,

왜인지 모르겠지만 getString("version()~~을 하면 에러발생

 

ResultSet rset = stmt.executeQuery("SELECT * FROM user; ");

while (rset.next()) {
out.println("MySQL Version : " + rset.getString(1));
}
728x90
반응형