Mysql.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. package mysql;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import java.sql.Statement;
  8. import java.time.LocalDateTime;
  9. import java.time.format.DateTimeFormatter;
  10. import object.CurrentParsing;
  11. public class Mysql {
  12. private static final Mysql instance = new Mysql();
  13. private static final String username = "OddsNy";
  14. private static final String password = "Odds1_Ny_Password";
  15. private static final String database = "new_odds";
  16. private static final String url = "jdbc:mysql://nordh.xyz:3306/";
  17. private static final String timezoneFix
  18. = "?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
  19. private Connection conn;
  20. protected Mysql() {
  21. getConnection();
  22. }
  23. public static Mysql getInstance() {
  24. return instance;
  25. }
  26. protected Connection getConnection() {
  27. if (conn == null) {
  28. try {
  29. conn = DriverManager.getConnection(url + database + timezoneFix, username, password);
  30. } catch (final SQLException e) {
  31. throw new RuntimeException(e.getMessage(), e);
  32. }
  33. }
  34. return conn;
  35. }
  36. public CurrentParsing getCurrentParsing() {
  37. final CurrentParsing returnValue = new CurrentParsing();
  38. try {
  39. final Statement statement = conn.createStatement();
  40. final String sql = "SELECT * FROM parsing";
  41. final ResultSet rs = statement.executeQuery(sql);
  42. while (rs.next()) {
  43. returnValue.setDone(rs.getBoolean("done"));
  44. returnValue.setCurrentYear(rs.getInt("year"));
  45. returnValue.setCurrentDate(rs.getDate("gameDate"));
  46. returnValue.setLeague(rs.getString("league"));
  47. returnValue.setPage(rs.getInt("page"));
  48. }
  49. } catch (final SQLException e) {
  50. e.printStackTrace();
  51. }
  52. return returnValue;
  53. }
  54. public int addLeague(String leagueName, String country, String sport) throws SQLException {
  55. leagueName = leagueName.trim();
  56. leagueName = leagueName.replaceAll(" ", "-");
  57. leagueName = leagueName.replaceAll("\\.", "");
  58. final int sportId = addSport(sport);
  59. final int countryId = addCountry(country);
  60. final String sql = "INSERT INTO League (name, sportId, countryId) VALUES (?, ?, ?) " + "ON DUPLICATE KEY UPDATE name = ?";
  61. final PreparedStatement statement = conn.prepareStatement(sql);
  62. statement.setString(1, leagueName);
  63. statement.setInt(2, sportId);
  64. statement.setInt(3, countryId);
  65. statement.setString(4, leagueName);
  66. statement.executeUpdate();
  67. return getId("League", leagueName, countryId);
  68. }
  69. public int addCountry(String name) throws SQLException {
  70. name = name.replaceAll(" ", "-");
  71. name = name.replaceAll("\\.", "");
  72. final String sql = "INSERT INTO Country (name) VALUES (?) ON DUPLICATE KEY UPDATE name = ?";
  73. final PreparedStatement statement = conn.prepareStatement(sql);
  74. statement.setString(1, name);
  75. statement.setString(2, name);
  76. statement.executeUpdate();
  77. return getId("Country", name, -1);
  78. }
  79. public int addSport(String sport) throws SQLException {
  80. sport = sport.replaceAll(" ", "-");
  81. sport = sport.replaceAll("\\.", "");
  82. final String sql = "INSERT INTO Sport (name) VALUES (?) ON DUPLICATE KEY UPDATE name = ?";
  83. final PreparedStatement statement = conn.prepareStatement(sql);
  84. statement.setString(1, sport);
  85. statement.setString(2, sport);
  86. statement.executeUpdate();
  87. return getId("Sport", sport, -1);
  88. }
  89. private int getId(String table, String name, int countryId) throws SQLException {
  90. String sql = "SELECT id FROM " + table + " WHERE name = ?";
  91. if (countryId > -1) {
  92. sql += " AND countryId = ?";
  93. }
  94. final PreparedStatement stmt = conn.prepareStatement(sql);
  95. stmt.setString(1, name.trim());
  96. if (countryId > -1) {
  97. stmt.setInt(2, countryId);
  98. }
  99. final ResultSet insertRs = stmt.executeQuery();
  100. int id = 0;
  101. if (insertRs.next()) {
  102. id = insertRs.getInt("id");
  103. }
  104. return id;
  105. }
  106. public int getLeagueId(int sportId, int countryId, String leagueName) throws SQLException {
  107. final String sql = "SELECT id FROM League WHERE name = ? AND countryId = ? AND sportId = ?";
  108. final PreparedStatement stmt = conn.prepareStatement(sql);
  109. stmt.setString(1, leagueName.trim());
  110. stmt.setInt(2, countryId);
  111. stmt.setInt(3, sportId);
  112. final ResultSet rs = stmt.executeQuery();
  113. int id = 0;
  114. while (rs.next()) {
  115. id = rs.getInt("id");
  116. }
  117. return id;
  118. }
  119. public int getSportId(String sportName) {
  120. final String sql = "SELECT id from Sport WHERE name = ?";
  121. PreparedStatement stmt;
  122. int id = 0;
  123. try {
  124. stmt = conn.prepareStatement(sql);
  125. stmt.setString(1, sportName.trim());
  126. final ResultSet rs = stmt.executeQuery();
  127. while (rs.next()) {
  128. id = rs.getInt("id");
  129. }
  130. } catch (final SQLException e) {
  131. // TODO Auto-generated catch block
  132. e.printStackTrace();
  133. }
  134. return id;
  135. }
  136. public int getCountryId(String country) throws SQLException {
  137. final String sql = "SELECT id from Country WHERE name = ?";
  138. final PreparedStatement stmt = conn.prepareStatement(sql);
  139. stmt.setString(1, country.trim());
  140. final ResultSet rs = stmt.executeQuery();
  141. int id = 0;
  142. while (rs.next()) {
  143. id = rs.getInt("id");
  144. }
  145. return id;
  146. }
  147. public void addResult(String tableName, LocalDateTime gameDate, String homeTeam, String awayTeam, int homeScore,
  148. int awayScore, boolean overtime, float odds1, float oddsX, float odds2, int countryId, String season, int leagueId,
  149. int sportId) throws SQLException {
  150. final int homeTeamId = getOrInsertTeam(homeTeam, countryId, leagueId, sportId);
  151. final int awayTeamId = getOrInsertTeam(awayTeam, countryId, leagueId, sportId);
  152. final String selectSql = "SELECT id FROM SoccerResults WHERE homeTeamId = ? AND awayTeamId = ? AND DATE(gameDate) = ?";
  153. final PreparedStatement st = conn.prepareStatement(selectSql);
  154. final String date = gameDate.format(DateTimeFormatter.ISO_DATE);
  155. st.setInt(1, homeTeamId);
  156. st.setInt(2, awayTeamId);
  157. st.setString(3, date);
  158. final ResultSet rs = st.executeQuery();
  159. int gameId = -1;
  160. while (rs.next()) {
  161. gameId = rs.getInt("id");
  162. }
  163. if (gameId != -1) {
  164. final String sql
  165. = "UPDATE " + tableName + " SET homeScore = ?, awayScore = ?, overtime = ?, odds1 = ?, oddsX = ?, odds2 = ? "
  166. + "WHERE homeTeamId = ? AND awayTeamId = ? AND DATE(gameDate) = ?";
  167. final PreparedStatement statement = conn.prepareStatement(sql);
  168. statement.setInt(1, homeScore);
  169. statement.setInt(2, awayScore);
  170. statement.setBoolean(3, overtime);
  171. statement.setFloat(4, odds1);
  172. statement.setFloat(5, oddsX);
  173. statement.setFloat(6, odds2);
  174. statement.setInt(7, homeTeamId);
  175. statement.setInt(8, awayTeamId);
  176. statement.setString(9, date);
  177. statement.executeUpdate();
  178. } else {
  179. final String sql = "INSERT INTO " + tableName
  180. + " (homeTeamId, awayTeamId, homeScore, awayScore, overtime, odds1, oddsX, odds2, countryId, gameDate, season, leagueId) "
  181. + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE homeScore = ?, awayScore = ?, odds1 = ?, oddsX = ?, odds2 = ?";
  182. final PreparedStatement stmt = conn.prepareStatement(sql);
  183. stmt.setInt(1, homeTeamId);
  184. stmt.setInt(2, awayTeamId);
  185. stmt.setInt(3, homeScore);
  186. stmt.setInt(4, awayScore);
  187. stmt.setBoolean(5, overtime);
  188. stmt.setFloat(6, odds1);
  189. stmt.setFloat(7, oddsX);
  190. stmt.setFloat(8, odds2);
  191. stmt.setInt(9, countryId);
  192. stmt.setString(10, gameDate.toString());
  193. stmt.setString(11, season);
  194. stmt.setInt(12, leagueId);
  195. stmt.setInt(13, homeScore);
  196. stmt.setInt(14, awayScore);
  197. stmt.setFloat(15, odds1);
  198. stmt.setFloat(16, oddsX);
  199. stmt.setFloat(17, odds2);
  200. stmt.execute();
  201. }
  202. }
  203. private int getOrInsertTeam(String teamName, int countryId, int leagueId, int sportId) throws SQLException {
  204. teamName = teamName.replace('\u00A0', ' ').trim();
  205. int teamId = getId("Team", teamName, countryId);
  206. if (teamId <= 0) {
  207. final String insertSql = "INSERT INTO Team (name, sportId, countryId, leagueId) VALUES (? ,? ,? ,?)";
  208. final PreparedStatement insertTeamStatement = conn.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS);
  209. insertTeamStatement.setString(1, teamName.trim());
  210. insertTeamStatement.setInt(2, sportId);
  211. insertTeamStatement.setInt(3, countryId);
  212. insertTeamStatement.setInt(4, leagueId);
  213. insertTeamStatement.executeUpdate();
  214. final ResultSet generatedKeys = insertTeamStatement.getGeneratedKeys();
  215. generatedKeys.next();
  216. teamId = generatedKeys.getInt(1);
  217. }
  218. return teamId;
  219. }
  220. public void setParsingForLeague(int leagueId, int sportId, int countryId, LocalDateTime gameDate, int currentParsePage,
  221. String parsedYear) {
  222. final String sql
  223. = "UPDATE League SET parsedYear = ?, parsedPage = ?, lastParsedGameDate = ? WHERE sportId = ? AND countryId = ? AND id = ?";
  224. try {
  225. final PreparedStatement stmt = conn.prepareStatement(sql);
  226. stmt.setString(1, parsedYear);
  227. stmt.setInt(2, currentParsePage);
  228. stmt.setString(3, gameDate.toString());
  229. stmt.setInt(4, sportId);
  230. stmt.setInt(5, countryId);
  231. stmt.setInt(6, leagueId);
  232. stmt.executeUpdate();
  233. } catch (final SQLException e) {
  234. System.out.println("Failing sql: " + sql + ", " + parsedYear + ", " + currentParsePage + ", " + gameDate.toString()
  235. + ", " + sportId + ", " + countryId + ", " + leagueId);
  236. e.printStackTrace();
  237. }
  238. }
  239. public String getLastParsedYear(String leagueName, int countryId) {
  240. String returnValue = "";
  241. final String sql = "SELECT parsedYear FROM League WHERE name = ? AND countryId = ?";
  242. try {
  243. final PreparedStatement stmt = conn.prepareStatement(sql);
  244. stmt.setString(1, leagueName);
  245. stmt.setInt(2, countryId);
  246. final ResultSet rs = stmt.executeQuery();
  247. while (rs.next()) {
  248. returnValue = rs.getString("parsedYear");
  249. }
  250. } catch (final SQLException e) {
  251. e.printStackTrace();
  252. }
  253. return returnValue;
  254. }
  255. public Connection getDbConnection() {
  256. if (conn == null) {
  257. conn = getConnection();
  258. }
  259. return conn;
  260. }
  261. }