본문으로 바로가기
반응형

완성본 : 데이터베이스값삽입.zip





우선 HeideiSQL을 실행 시킨뒤 데이터베이스에 접속을 해주세요.


mc_test 데이터베이스를 생성하지 않앗다면 이전글을 보고 와주세요.

[Minecraft] 마인크래프트 데이터베이스 연동하기




mc_test 에서 우클릭을 하신뒤 새로생성에서 테이블을 눌러주세요.


위와같이 나오셨다면 이미지를 통해 간단한 설명을 확인 바랍니다.


추가 버튼을 누르신뒤 이름을 u_no로 만들어주세요.



u_no에서 우클릭을 누르신다음에 새 인덱스 생성에서 primary를 눌러주세요.

인덱스, primary(pk)를 아시고 싶으시다면 제 블로그에서는 따로 설명을 안드리고 구글에 검샋 해주세요.

간단하게 설명 드리면 pk는 중복되지 않고 not null(빈값이 아니다.) 입니다.

그리고, INT는 자료형이 숫자라는것 입니다.



u_no에서 기본값을 AUTO_INCREMENT로 해주세요.

새로운 열이 들어올때마다 1씫 증가시켜주는 유저 고유번호라고 보시면 됩니다.




추가를 누르시고

이름 ; u_uuid

데이터 유형 : varchar

길이/설정 : 100

null체크 푸시고

기본값 : 기본값 없음


추가를 누르시고

이름 ; u_name

데이터 유형 : varchar

길이/설정 : 50

null체크 푸시고

기본값 : 기본값 없음


저장버튼을 눌러주세요.


## 스크린샷을 보고 이해가 안되신다면 아래의 영상을 확인 해주세요. ##




src/main/java에서 우클릭을 누르시고 New -> Class를 눌러주세요.



package : org.alpreah.domain

Name : user

만드신뒤 Finish를 눌러주세요.



해당하는 클레스에 이렇게 적어주세요.



우클릭 하신뒤 Source -> Generate Getters and Setters를 눌러주세요.



select All를 눌러주세요.



Generate를 눌러주세요.



눌러주시면 위와 같은 결과가 나옵니다.


db_connect.,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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package org.alpreah.db;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.UUID;
 
import org.alpreah.domain.user;
import org.alpreah.main.Main;
import org.bukkit.entity.Player;
 
public class db_connect {
 
    private Connection connection;
 
    private String host = "localhost";
    private int port = 3306;
    private String database = "mc_test";
    private String username = "root";
    private String password = "1111";
    private PreparedStatement pstmt = null;
    private ResultSet rs = null;
 
    public static HashMap<UUID, user> user_list = new HashMap<UUID, user>();
 
    public Connection open_Connection() {
        try {
            if (connection != null && !connection.isClosed()) {
                return null;
            }
 
            synchronized (this) {
                if (connection != null && !connection.isClosed()) {
                    return null;
                }
                Class.forName("com.mysql.jdbc.Driver");
                connection = DriverManager.getConnection(
                        "jdbc:mysql://" + this.host + ":" + this.port + "/" + this.database + "?autoReconnect=true",
                        this.username, this.password);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return connection;
    }
 
    public int insertMember(Player player) {
        // 예외 처리 안해주고 오류 발생하면 서버 터짐
        Connection conn = null;
        try {
            conn = this.open_Connection();
            // 사용자의 정보가 있는지 없는지 확인하는 질의문을 생성한다.
            String sql = "select count(*) from user u where u.u_uuid = ?";
            // PreparedStatement에 질의어를 넣고
            pstmt = conn.prepareStatement(sql);
            // 질의어에 ?라고 적혀 있는 값을 정의 해준다.
            pstmt.setString(1, player.getUniqueId().toString());
            // 질의어 실행
            rs = pstmt.executeQuery();
            // 검색된 레코드를 넘겨줌 (필수)
            rs.next();
            // 해당하는 유저의 정보가 없는 경우
            if (rs.getInt(1) == 0) {
                try {
                    // PreparedStatement 초기화 (재사용을 위해)
                    pstmt.clearParameters();
                    sql = "INSERT INTO USER (u_uuid, u_name) VALUES (?, ?)";
                    pstmt = conn.prepareStatement(sql);
                    pstmt.setString(1, player.getUniqueId().toString());
                    pstmt.setString(2, player.getName());
                    pstmt.executeUpdate();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return 0;
            
        } catch (Exception e) {
            e.printStackTrace();
            return 1;
        }
        finally {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
                return 2;
            }
        }
    }
 
    public user db_PlayerInfo(Player player) {
        UUID player_UUID = player.getUniqueId();
        user u = new user();
        Connection conn = null;
        // 예외 처리 안해주면 서버 터짐
        try {
            conn = this.open_Connection();
            // 사용자의 정보가 있는지 없는지 확인하는 질의문을 생성한다.
            String sql = "select u.u_no, u.u_uuid, u.u_name from user u where u.u_uuid = ?";
            // PreparedStatement에 질의어를 넣고
            pstmt = conn.prepareStatement(sql);
            // 질의어에 ?라고 적혀 있는 값을 정의 해준다.
            pstmt.setString(1, player_UUID.toString());
            // 질의어 실행
            rs = pstmt.executeQuery();
            // 검색된 레코드를 넘겨줌 (필수임 ㅇ)
            rs.next();
            // 해당하는 유저의 정보가 없는 경우
            u.setU_no(rs.getInt("u_no"));
            u.setU_uuid(rs.getString("u_uuid"));
            u.setU_name(rs.getString("u_name"));
            
            Main.User_List.put(rs.getString("u_uuid"), u);
            
 
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            try {
                // 연결 된 DB 연결을 종료 해준다. 안해주면 여러개 쌓이면 DB 검색 안됨 (즉, commit과 같은 용도)
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return u;
    }
}
 
cs



Mian.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
package org.alpreah.main;
 
import java.util.HashMap;
 
import org.alpreah.db.db_connect;
import org.alpreah.domain.user;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
 
public class Main extends JavaPlugin implements Listener {
    
    db_connect db_conn = new db_connect();
    public static HashMap<String, user> User_List = new HashMap<String, user>();
    
    public void onEnable() {
        getLogger().info("onEnable 메소드가 호출이 되었고 정상적으로 작동 되었습니다.");
        Bukkit.getServer().getPluginManager().registerEvents(thisthis);
    }
 
    public void onDisable() {
        getLogger().info("onDisable 메소드가 호출이 되었고 정상적으로 작동 되었습니다.");
    }
    
    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent e) {
        Player player = (Player) e.getPlayer();
        if(db_conn.insertMember(player) == 0) db_conn.db_PlayerInfo(player);
        else player.kickPlayer("데이터베이스에서 정보를 로드중 오류가 발생 했습니다.");
        
        player.sendMessage("데이터 베이스에서 불러온 당신의 정보 입니다.");
        player.sendMessage("당신의 고유번호 : " + User_List.get(player.getUniqueId().toString()).getU_no());
        player.sendMessage("당신의 UUID : " + User_List.get(player.getUniqueId().toString()).getU_uuid());
        player.sendMessage("당신의 닉네임 : " + User_List.get(player.getUniqueId().toString()).getU_name());
    }
    
    @EventHandler
    public void onPlayerQuiet(PlayerQuitEvent e) {
        //
    }
}
 
cs



## 결과 영상 ##


반응형