Advertisement
Guest User

Untitled

a guest
Dec 8th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.12 KB | None | 0 0
  1. public class MySQL implements Store {
  2.  
  3. public static List<String> mysqlurl;
  4. private final String host;
  5. private final String user;
  6. private final String pass;
  7. private final String name;
  8. private final String prefix;
  9. private final int port;
  10. private static Connection conn;
  11. private long time;
  12. private Executor executor;
  13. private AtomicInteger ai;
  14.  
  15. public void checkTable() {
  16. connect();
  17. final StringBuilder sb = new StringBuilder();
  18. sb.append("create table if not exists drop_users(");
  19. sb.append("name varchar(16) not null,");
  20. sb.append("uuid char(36) not null,");
  21. sb.append("points int not null,");
  22. sb.append("neededpoints int not null,");
  23. sb.append("level int not null,");
  24. sb.append("stone int not null,");
  25. sb.append("obsidian int not null,");
  26. sb.append("primary key(name));");
  27. try {
  28. MySQL.conn.createStatement().executeUpdate(sb.toString());
  29. }
  30. catch (SQLException e) {
  31. e.printStackTrace();
  32. }
  33. disconnect();
  34. }
  35.  
  36. public void loadData() throws SQLException {
  37. connect();
  38. int i = 0;
  39. final ResultSet rs = MySQL.conn.createStatement().executeQuery("SELECT * FROM `drop_users`");
  40. while (rs.next()) {
  41. final User u = User.get(UUID.fromString(rs.getString("uuid")));
  42. u.setName(rs.getString("name"));
  43. u.setUniqueId(UUID.fromString(rs.getString("uuid")));
  44. u.setPoints(rs.getInt("points"));
  45. u.setNeededPoints(rs.getInt("neededpoints"));
  46. u.setLevel(rs.getInt("level"));
  47. u.setStone(rs.getInt("stone"));
  48. u.setObsidian(rs.getInt("obsidian"));
  49. ++i;
  50. }
  51. System.out.println("Loaded " + i + " users!");
  52. disconnect();
  53. }
  54.  
  55. public void saveData() throws SQLException {
  56. connect();
  57. for (final User u : UserManager.getUsers()) {
  58. final StringBuilder sb = new StringBuilder();
  59. sb.append("INSERT INTO drop_users (name, uuid, points, neededpoints, level, stone, obsidian) VALUES (");
  60. sb.append("'" + u.getName() + "',");
  61. sb.append("'" + u.getUniqueId().toString() + "',");
  62. sb.append("'" + u.getPoints() + "',");
  63. sb.append("'" + u.getNeededPoints() + "',");
  64. sb.append("'" + u.getLevel() + "',");
  65. sb.append("'" + u.getStone() + "',");
  66. sb.append("'" + u.getObsidian() + "'");
  67. sb.append(") ON DUPLICATE KEY UPDATE ");
  68. sb.append("name='" + u.getName() + "',");
  69. sb.append("uuid='" + u.getUniqueId() + "',");
  70. sb.append("points='" + u.getPoints() + "',");
  71. sb.append("neededpoints='" + u.getNeededPoints() + "',");
  72. sb.append("level='" + u.getLevel() + "',");
  73. sb.append("stone='" + u.getStone() + "',");
  74. sb.append("obsidian='" + u.getObsidian() + "';");
  75. conn.createStatement().executeUpdate(sb.toString());
  76. }
  77. disconnect();
  78. }
  79.  
  80. public MySQL(String host, int port, String user, String pass, String name, String prefix) {
  81. this.host = host;
  82. this.port = port;
  83. this.user = user;
  84. this.pass = pass;
  85. this.name = name;
  86. this.prefix = prefix;
  87. this.executor = Executors.newSingleThreadExecutor();
  88. this.time = System.currentTimeMillis();
  89. this.ai = new AtomicInteger();
  90. new BukkitRunnable() {
  91. public void run() {
  92. if (System.currentTimeMillis() - time > Time.SECOND.getTime(30)) {
  93. update(false, "DO 1");
  94. }
  95. }
  96. }.runTaskTimer(Main.getInstance(), 600L, 600L);
  97. }
  98.  
  99. public void setMysqlurl(List<String> s) {
  100. mysqlurl = s;
  101. }
  102.  
  103. public boolean connect(){
  104. Main.getInstance().getLogger().info("Connecting to MySQL server...");
  105. try {
  106. Class.forName("com.mysql.jdbc.Driver");
  107. conn = DriverManager.getConnection("jdbc:mysql://" + this.host + ":" + this.port + "/" + this.name, this.user, this.pass);
  108. Main.getInstance().getLogger().info("Connection established! Ping ");
  109. return true;
  110. } catch (ClassNotFoundException e) {
  111. Main.getInstance().getLogger().warning("JDBC driver not found!");
  112. Main.getInstance().getLogger().warning("Error: " + e.getMessage());
  113. e.printStackTrace();
  114. } catch (SQLException e) {
  115. Main.getInstance().getLogger().warning("Can not connect to a MySQL server!");
  116. Main.getInstance().getLogger().warning("Error: " + e.getMessage());
  117. e.printStackTrace();
  118. }
  119. return false;
  120. }
  121.  
  122. public void update(boolean now, final String update) {
  123. this.time = System.currentTimeMillis();
  124. Runnable r = new Runnable() {
  125. public void run() {
  126. try {
  127. conn.createStatement().executeUpdate(update.replace("{P}", prefix));
  128. } catch (SQLException e) {
  129. Main.getInstance().getLogger().warning("Error: " + e.getMessage());
  130. Main.getInstance().getLogger().info("Reconnecting...");
  131. reconnect();
  132. }
  133. }
  134. };
  135. if (now) {
  136. r.run();
  137. } else {
  138. this.executor.execute(r);
  139. }
  140. }
  141.  
  142. public ResultSet update(String update) {
  143. try {
  144. Statement statement = conn.createStatement();
  145. statement.executeUpdate(update.replace("{P}", this.prefix), 1);
  146. ResultSet rs = statement.getGeneratedKeys();
  147. if (rs.next()) {
  148. return rs;
  149. }
  150. } catch (SQLException e) {
  151. Main.getInstance().getLogger().warning("Error: " + e.getMessage());
  152. Main.getInstance().getLogger().info("Reconnecting...");
  153. reconnect();
  154. }
  155. return null;
  156. }
  157.  
  158. public void disconnect() {
  159. if (conn != null) {
  160. try {
  161. conn.close();
  162. } catch (SQLException e) {
  163. Main.getInstance().getLogger().warning("Can not close the connection to the MySQL server!");
  164. Main.getInstance().getLogger().warning("Error: " + e.getMessage());
  165. e.printStackTrace();
  166. }
  167. }
  168. }
  169.  
  170. public void reconnect(){
  171. connect();
  172. }
  173.  
  174. public boolean isConnected() {
  175. try {
  176. return (!conn.isClosed()) || (conn == null);
  177. } catch (SQLException e) {
  178. e.printStackTrace();
  179. }
  180. return false;
  181. }
  182.  
  183. public ResultSet query(String query) {
  184. try {
  185. return conn.createStatement().executeQuery(query.replace("{P}", this.prefix));
  186. } catch (SQLException e) {
  187. Main.getInstance().getLogger().warning("An error occurred with given query '" + query.replace("{P}", this.prefix) + "'!");
  188. Main.getInstance().getLogger().warning("Error: " + e.getMessage());
  189. e.printStackTrace();
  190. }
  191. return null;
  192. }
  193.  
  194. public void query(final String query, final Callback<ResultSet> cb) {
  195. new Thread(new Runnable() {
  196. public void run() {
  197. try {
  198. ResultSet rs = conn.createStatement().executeQuery(query.replace("{P}", prefix));
  199. cb.done(rs);
  200. } catch (SQLException e) {
  201. Main.getInstance().getLogger().warning("An error occurred with given query '" + query.replace("{P}", prefix) + "'!");
  202. Main.getInstance().getLogger().warning("Error: " + e.getMessage());
  203. cb.error(e);
  204. e.printStackTrace();
  205. }
  206. }
  207. }, "MySQL Thread #" + this.ai.getAndIncrement()).start();
  208. }
  209.  
  210. public Connection getConnection(){
  211. return conn;
  212. }
  213.  
  214. public StoreMode getStoreMode(){
  215. return StoreMode.MYSQL;
  216. }
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement