토비의 스프링을 본격적으로 공부하기 위해 첫 장을 펼치고 DAO 예제 코드를 따라치고 있었는데 오류가 났다.(참고로 카테고리를 Java로 한 이유는 아직 Spring에 대한 내용을 배우지 않았기 때문이다.)
첫 오류는 이랬다. 바로 Exception in thread "main" java.lang.ClassNotFoundException: org.mariadb.jdbc.Drive였다.
찾아보니 MariaDB Connector를 설치해야 했다. 정확한 명칭은 'MariaDB Connector/J'였다. 이것은 너무나 당연했는데 오랜만에 기초부터 다시 하다보니 멍청하게도 잊고 있었다.
2024.06.09 - [개발일기/Java] - [Java]Java와 mariaDB 연결하기_'MariaDB Connector/J'
모듈을 다운받아 설치를 했음해도 똑같은 오류가 났다.
원인이 무엇일까 고민하다가 mariaDB 공식문서를 천천히 읽어나갔다. 그런데 새로운 사실을 발견했다. 이 사실이 오류 해결의 실마리가 됐다.
https://mariadb.com/kb/en/about-mariadb-connector-j/
공식문서에 따르면 Java와 mariaDB를 연결하기 위해서는 두 가지 표준 방법이 있다는 것이다.
먼저 DriverManager의 getConnection 메소드를 사용하는 것과 두 번째는 Class.forName("org.mariadb.jdbc.Drive")를사용하는 것이다. 즉 둘 중에 하나만 사용하라는 것이었다.
나는 두 가지 방법을 동시에 코딩했던 것이다. 책에서는 동시에 작성돼있는데 말이다. 현재 책은 mysql 기준으로 DAO에 대해서 설명하고 있어서 mariaDB도 똑같다고 판단했다. 아마 내 기억에도 mysql은 동시에 다 사용하는 것 같았다.
실제 책의 내용은 이렇다.
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/springbook?, "spring", "book");
하지만 나는 이 부분을 아래와 같이 바꿨다. DriverManager 클래스의 getConnection 메소드를 사용하기로 했다.
// Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection("jdbc:mariadb://localhost:3306/toby_spring_study?user=DB접속계정&password=DB접속비밀번호");
// 참고로 DB접속계정과 비밀번호는 여러분 자신의 계정과 비밀번호로 설정해줘야 한다.
전체적인 DAO 소스를 보면 다음과 같다.
package springbook.user.dao;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import springbook.user.domain.User;
public class UserDao {
public void add(User user) throws ClassNotFoundException, SQLException{
// Class.forName("org.mariadb.jdbc.Drive");
Connection c = DriverManager.getConnection("jdbc:mariadb://localhost:3306/toby_spring_study?user=DB접속계정&password=DB접속비밀번호");
PreparedStatement ps = c.prepareStatement("insert into users(id, name, password) values (?, ?, ?)");
ps.setString(1, user.getId());
ps.setString(2, user.getName());
ps.setString(3, user.getPassword());
ps.executeUpdate();
ps.close();
c.close();
}
public User get(String id) throws ClassNotFoundException, SQLException{
// Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection("jdbc:mariadb://localhost:3306/toby_spring_study?user=DB접속계정&password=DB접속비밀번호");
PreparedStatement ps = c.prepareStatement("SELECT * FROM users WHERE id = ?");
ps.setString(1, id);
ResultSet rs = ps.executeQuery();
rs.next();
User user = new User();
user.setId(rs.getString("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
rs.close();
ps.close();
c.close();
return user;
}
}
참고로 자바 빈과 Test main 메소드도 올려보겠다.
package springbook.user.domain;
public class User {
String id;
String name;
String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package springbook.user.test;
import java.sql.SQLException;
import springbook.user.dao.UserDao;
import springbook.user.domain.User;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// TODO Auto-generated method stub
UserDao dao = new UserDao();
User user = new User();
user.setId("jobkid");
user.setName("잡키드");
user.setPassword("1111");
dao.add(user);
System.out.println(user.getId() + " : 등록 성공");
User user2 = dao.get(user.getId());
System.out.println(user2.getName());
System.out.println(user2.getPassword());
System.out.println(user2.getId()+" : 조회 성공");
}
}
main에서 RunTime을 실행한 결과 eclipse 콘솔 창에 다음과 같은 결과가 나온다.
아직 토비의 스프링의 가장 맨 처음 단계를 공부하고 있지만 하루에 소단원 한 개씩 나가면서 돌발 문제가 생기면 해결하는 과정을 올려봐야 겠다.
토비의 스프링 책을 산지 1년이 지났는데 바쁘다는 핑계로 미루다가 올해 상반기 말이 돼서야 처음 펼쳤다. 아직 내 갈 길은 멀지만 천리길도 한 걸음 부터다.
'개발일기 > Java' 카테고리의 다른 글
[Java]Java와 mariaDB 연결하기_'MariaDB Connector/J' (1) | 2024.06.09 |
---|---|
[Java]cmd 환경에서 Jar 파일 실행 오류 해결 - UnsupportedClassVersionError (1) | 2024.02.24 |