본문 바로가기
java

JAVA DB Mysql 연동

by le_piee 2019. 11. 13.

mysql-connector-java-5.1.45-bin.jar
0.95MB

안녕하세요 le-piee입니다

오늘은 데이터베이스랑 연동하는 법에 대해 적어보려 합니다

 

환경

jdk 8

이클립스 19-6

mysql 5.7

 

패키지와 클래스는 이렇게 사용하겠습니다.

 

일단 먼저 자바 프로젝트에 jdbc를 추가해줘야 합니다

맨 위에 있는 jdbc를 다운로드한 후 

프로젝트 우클릭 - Build Path - configure Build Path로 들어갑니다

 

라이브러리 - Classpath를 클릭 - Add External JaRs..를 클릭한 후 다운 받은 jdbc       파일을 더블클릭 한 후 Apply 합니다

 

 

사용 할 데이터베이스와 테이블 생성

 

User.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
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;
    }
    

나중에 Dao에서 여기로 데이터를 넘길 것입니다

우리는 이 클래스에 접근을 하여 데이터를 조회하거나 추가할 예정입니다

 

 

 

 

 

UserDao.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 
 
//Dao (Data Access Object) db를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말함
public class UserDao {
 
    //DB와 연결하는 메소드
    //주소와 아이디 비밀번호를 데이터베이스에 넣어 연결을 확인한다. 연결이 되면 Conn을 리턴한다.
    private Connection getConnection() throws ClassNotFoundException,SQLException{
        String url ="jdbc:mysql://localhost:3306/Spring?useSSL=false&useUnicode=yes&characterEncoding=UTF-8";
                    //jdbc:mysql://localhost:3306/데이터베이스명?useSSL=false&useUnicode=yes&characterEncoding=UTF-8";한글 깨짐을 방지
        String userName ="root";  //ID입력
        String password="password!";  //Password입력
        
        Class.forName("org.gjt.mm.mysql.Driver");
        Connection conn = DriverManager.getConnection(url,userName,password);
        return conn;
    }
        
 
 
 
    //User를 추가하는 메소드
    //리턴받은 Connection메소드를 호출하여 리턴받은 후 쿼리를 넣음
    public void add(User user) throws ClassNotFoundException, SQLException{
        Connection c = getConnection();
        PreparedStatement ps = c.prepareStatement(
                "insert into users(id,name,password) values(?,?,?)");
        ps.setString(1user.getId());
        ps.setString(2, user.getName());
        ps.setString(3, user.getPassword());
        
        ps.executeUpdate();
        
        ps.close();
        c.close();
    }
    
    //User를 조회하는 메소드
    //Add메소드와 동일하지만 조회하는 
    public User get(String id) throws ClassNotFoundException, SQLException{
        Connection c = getConnection();
        
        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;
    }

DAO는 연결 부분과 사용자 등록과 조회하는 클래스이다.

코드를 보면 보이겠지만 User클래스로 값을 넘기고 받는다

 

 

 

TestMain.java

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
 
public class TestMain {
 
    public static void main(String[] args) throws ClassNotFoundException, SQLException{
        // TODO Auto-generated method stub
 
        //UserDao클래스를 인스턴스화
        UserDao dao = new UserDao();
        
        //User클래스를 인스턴스화 후 값을 넣는다
        User user = new User();
        user.setId("TestID");
        user.setName("테스트이름");
        user.setPassword("TestPw");
        
        //값을 다 넣었으니 add메소드를 호출하여 insert 한다
        dao.add(user);
        
        System.out.println(user.getId() + "등록 성공!");
        
 
        //User클래스를 사용한 인스턴스를 하나 더 생성한 후 조회를 한다
        User user2  = dao.get(user.getId());
        System.out.println(user2.getName());
        System.out.println(user2.getPassword());
        System.out.println(user2.getId() + "조회성공");
    }

그 후 테스트를 해야 하니 main 클래스를 생성한다 자세한 건 주석으로 설명해 놓았다

 

실행을 해 보면 이렇게 잘 나오는 것을 확인 할 수 있다.

 

데이터베이스에도 잘 들어간 것을 확인 할 수 있다.

 

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 

혹시 이러한 에러가 발생한다면 root계정에 권한이 없는 건데 권한을 부여하면 됩니다.

 

 

use DB명;

grant all privileges on DB명.* to root@'%' identified by '비밀번호 입력' with grant option;

flush privileges;

이 코드를 데이터베이스에 넣어보면 해결됩니다.