Advertisement
Guest User

Untitled

a guest
Apr 24th, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.61 KB | None | 0 0
  1. package net.foxgenesis.sql;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import java.sql.Statement;
  8. import java.util.function.Consumer;
  9.  
  10. import org.bukkit.Bukkit;
  11.  
  12. public class DataBaseAPI
  13. {
  14. private String host;
  15. private String password;
  16. private String db;
  17. private String user;
  18. private int port;
  19. private Connection con;
  20.  
  21. /**
  22. * create a new connection to a database
  23. * @param host SQL host
  24. * @param user SQL username
  25. * @param password SQL password
  26. * @param database SQL database
  27. * @param port SQl port
  28. */
  29. public DataBaseAPI(String host, String user, String password, String database, int port) {
  30. this.host = host;
  31. this.user = user;
  32. this.password = password;
  33. this.db = database;
  34. this.port = port;
  35. }
  36.  
  37. /**
  38. * init the database
  39. */
  40. public void connect() {
  41. try {
  42. Class.forName("com.mysql.jdbc.Driver");
  43. if (!checkLogin())
  44. System.err.println("Database-Login isn't valid!");
  45. else {
  46. createConnection("jdbc:mysql://" + host + ":" + port + "/" + db);
  47. System.out.println("MySQL-Connection - OK");
  48. }
  49. } catch (Exception ex) {
  50. System.err.println("Failed to connect to SQL server: " + ex.getMessage());
  51. }
  52. }
  53.  
  54. /**
  55. * check the login of the database
  56. * @return boolean
  57. */
  58. private boolean checkLogin() {
  59. try{
  60. if(!hasDatabase(db))
  61. createDatabase(db);
  62. } catch(Exception e) {
  63. System.err.println(e.getMessage());
  64. return false;
  65. }
  66. try {
  67. String url = "jdbc:mysql://" + host + ":" + port + "/" + db;
  68. Connection con = DriverManager.getConnection(url, user, password);
  69. con.createStatement();
  70. con.close();
  71. } catch (Exception ex) {
  72. ex.printStackTrace();
  73. return false;
  74. }
  75. return true;
  76. }
  77.  
  78. public void createDatabase(String name) {
  79. try(Connection con = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port, user, password)) {
  80. Statement t = con.createStatement();
  81. t.execute("CREATE DATABASE " + db + ";");
  82. t.close();
  83. } catch (Exception ex) {
  84. ex.printStackTrace();
  85. }
  86. }
  87.  
  88. /**
  89. * Disconnects from current connection and checks if there
  90. * is a database with a given name
  91. * @param name - database name
  92. * @return if the database was found
  93. */
  94. public boolean hasDatabase(String name) {
  95. String url = "jdbc:mysql://" + host + ":" + port + "/" + db;
  96. try(Connection con = DriverManager.getConnection(url, user, password)){
  97. con.createStatement().close();
  98. return true;
  99. } catch (Exception ex) {
  100. if(ex.getMessage().contains("Unknown database"))
  101. return false;
  102. ex.printStackTrace();
  103. Bukkit.shutdown();
  104. return false;
  105. }
  106. }
  107.  
  108. public boolean hasTable(String name) {
  109. if(con == null) {
  110. System.err.println("No connection to SQL server!");
  111. return false;
  112. }
  113. try(Statement d = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
  114. return getRowCount(d.executeQuery("SHOW TABLES LIKE '" + name + "';"),false) > 0;
  115. } catch (SQLException e) {
  116. e.printStackTrace();
  117. return false;
  118. }
  119. }
  120.  
  121. public void dropTable(String name) {
  122. if(con == null)
  123. System.err.println("No connection to SQL server!");
  124. try(Statement d = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
  125. d.execute("DROP TABLE " + name);
  126. } catch (SQLException e) {
  127. e.printStackTrace();
  128. }
  129. }
  130.  
  131. private void createConnection(String url) {
  132. try {
  133. if(con != null)
  134. con.close();
  135. con = DriverManager.getConnection(url, user, password);
  136. } catch (Exception ex) {
  137. System.err.println("Failed to connect to SQL server: " + ex.getMessage());
  138. }
  139. }
  140.  
  141. public void closeConnection() {
  142. try {
  143. if(isConnected())
  144. con.close();
  145. } catch (Exception ex) {
  146. ex.printStackTrace();
  147. }
  148. }
  149.  
  150. public void excecuteQuery(String query, Consumer<ResultSet> result) {
  151. if(!isConnected()) {
  152. System.err.println("No connection to SQL server!");
  153. return;
  154. }
  155. try(Statement statement = con.createStatement()) {
  156. ResultSet r = statement.executeQuery(query);
  157. result.accept(r);
  158. r.close();
  159. } catch (Exception ex) {
  160. ex.printStackTrace();
  161. }
  162. }
  163.  
  164. public ResultSet excecuteQuery(String query) {
  165. if(!isConnected()) {
  166. System.err.println("No connection to SQL server!");
  167. return null;
  168. }
  169. try {
  170. Statement statement = con.createStatement();
  171. return statement.executeQuery(query);
  172. } catch (Exception ex) {
  173. ex.printStackTrace();
  174. return null;
  175. }
  176. }
  177.  
  178. public int excecuteUpdate(String query) {
  179. if(!isConnected()) {
  180. System.err.println("No connection to SQL server!");
  181. return -1;
  182. }
  183. int result = 0;
  184. try(Statement statement = con.createStatement()) {
  185. result = statement.executeUpdate(query);
  186. } catch (Exception ex) {
  187. ex.printStackTrace();
  188. }
  189. return result;
  190. }
  191.  
  192. public void execute(String query) {
  193. if(!isConnected()) {
  194. System.err.println("No connection to SQL server!");
  195. return;
  196. }
  197. try(Statement statement = con.createStatement()) {
  198. statement.execute(query);
  199. } catch (Exception ex) {
  200. ex.printStackTrace();
  201. }
  202. }
  203.  
  204. public boolean isConnected() {
  205. return con != null;
  206. }
  207.  
  208. private int getRowCount(ResultSet resultSet, boolean backToStart) {
  209. if (resultSet == null) {
  210. return 0;
  211. }
  212. try {
  213. resultSet.last();
  214. return resultSet.getRow();
  215. } catch (SQLException exp) {
  216. exp.printStackTrace();
  217. } finally {
  218. try {
  219. if(backToStart)
  220. resultSet.beforeFirst();
  221. else
  222. resultSet.close();
  223. } catch (SQLException exp) {
  224. exp.printStackTrace();
  225. }
  226. }
  227. return 0;
  228. }
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement