· 8 years ago · Jan 14, 2018, 11:22 AM
1package net.forsteve.death.data;
2
3import java.sql.Connection;
4import java.sql.DriverManager;
5import java.sql.ResultSet;
6import java.sql.SQLException;
7import java.sql.Statement;
8import java.util.UUID;
9
10import org.bukkit.scheduler.BukkitRunnable;
11
12import net.forsteve.death.Main;
13import net.forsteve.death.data.object.User;
14import net.forsteve.death.data.object.UserManager;
15
16public class MySQL
17{
18 private static Connection conn;
19 private static String base = "forsteve_death";
20
21 public MySQL()
22 {
23 new BukkitRunnable()
24 {
25 public void run()
26 {
27 openConnection();
28 }
29 }.runTaskAsynchronously(Main.getPlugin);
30
31 new BukkitRunnable()
32 {
33 @Override
34 public void run()
35 {
36 createTable();
37 downloadUsers();
38 }
39 }.runTaskLater(Main.getPlugin, 40);
40 saveDatabase();
41 }
42
43 private void saveDatabase()
44 {
45 new BukkitRunnable()
46 {
47 @Override
48 public void run()
49 {
50 saveUsers();
51 //System.out.println("[DeathMySQL] Zapisuje dane.");
52 }
53 }.runTaskTimer(Main.getPlugin, 120, Config.mysql_interval * 20);
54 }
55
56 public synchronized static void openConnection()
57 {
58 String url = "jdbc:mysql://" + Config.mysql_ip + ":" + Config.mysql_port + "/";
59
60 try { conn = DriverManager.getConnection(url + Config.mysql_database, Config.mysql_user, Config.mysql_password); }
61 catch (Exception e) { e.printStackTrace(); }
62 }
63
64
65 public static void createTable()
66 {
67 try
68 {
69 Statement st = conn.createStatement();
70 String new_table = "CREATE TABLE IF NOT EXISTS " + base + "(uuid VARCHAR(36), nick VARCHAR(32), kills MEDIUMTEXT, deaths MEDIUMTEXT, PRIMARY KEY (uuid)) DEFAULT CHARSET=cp1250 collate cp1250_polish_ci";
71 st.execute(new_table);
72 st.close();
73 } catch (SQLException e) {
74 e.printStackTrace();
75 }
76 }
77
78 public static void downloadUsers()
79 {
80 try
81 {
82 Statement st = conn.createStatement();
83
84 ResultSet rs = st.executeQuery("SELECT * FROM " + base);
85 while (rs.next())
86 {
87 UUID uuid = UUID.fromString(rs.getString("uuid"));
88 String name = rs.getString("nick");
89 String kills = rs.getString("kills");
90 String deaths = rs.getString("deaths");
91
92 User user = new User(uuid);
93 user.setName(name);
94 user.setKills(kills);
95 user.setDeaths(deaths);
96
97 UserManager.addUser(user);
98 }
99 st.close();
100 } catch (SQLException e)
101 {
102 e.printStackTrace();
103 }
104 }
105
106 public static void saveUsers()
107 {
108 try
109 {
110 Statement st = conn.createStatement();
111
112 for(User u : UserManager.getUsers())
113 {
114 String nick = u.getName();
115 UUID uuid = u.getUuid();
116 String kills = u.getKills();
117 String deaths = u.getDeaths();
118
119 String sql = "INSERT INTO " + base + " (uuid, nick, kills, deaths)"
120 + " VALUES ('" + uuid + "', '" + nick + "', '" + kills + "', '" + deaths + "')"
121 + " ON DUPLICATE KEY UPDATE kills='" + kills + "', deaths='" + deaths + "'"
122 ;
123 st.executeUpdate(sql);
124 }
125 st.close();
126 } catch (Exception e) {
127 e.printStackTrace();
128 }
129 }
130}