package pl.shockah.shocky.sql; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import pl.shockah.shocky.Data; public class SQL { private static Connection conn = null; public static Map<String,PreparedStatement> statements = new HashMap<String,PreparedStatement>(); public static void raw(String query) {execute(query);} public static ResultSet select(QuerySelect query) {return executeQuery(query.getSQLQuery());} public static void delete(QueryDelete query) {execute(query.getSQLQuery());} public static int update(QueryUpdate query) {return updateResultSet(query.getSQLQuery());} public static void init() { try { Class.forName("com.mysql.jdbc.Driver").newInstance(); Class.forName("pl.shockah.shocky.sql.Criterion"); Class.forName("pl.shockah.shocky.sql.CriterionNumber"); Class.forName("pl.shockah.shocky.sql.CriterionString"); Class.forName("pl.shockah.shocky.sql.Wildcard"); Class.forName("pl.shockah.shocky.sql.Factoid"); Class.forName("pl.shockah.shocky.sql.Query"); Class.forName("pl.shockah.shocky.sql.QueryDelete"); Class.forName("pl.shockah.shocky.sql.QueryInsert"); Class.forName("pl.shockah.shocky.sql.QueryUpdate"); } catch (Exception ex) { ex.printStackTrace(); } } public synchronized static Connection getSQLConnection() { try { if (conn == null || !conn.isValid(1)) { if (conn != null && !statements.isEmpty()) { Iterator<PreparedStatement> iter = statements.values().iterator(); while(iter.hasNext()) { PreparedStatement p = iter.next(); p.close(); iter.remove(); } } conn = DriverManager.getConnection(String.format("jdbc:mysql://%s/%s?user=%s&password=%s&useUnicode=true&characterEncoding=utf-8", Data.config.getString("main-sqlhost"), Data.config.getString("main-sqldb"), Data.config.getString("main-sqluser"), Data.config.getString("main-sqlpass"))); } } catch (SQLException e) { e.printStackTrace(); conn = null; } return conn; } public static ResultSet executeQuery(String query) { Statement s = null; try { s = getSQLConnection().createStatement(); return s.executeQuery(query); } catch (SQLException e) { e.printStackTrace(); } return null; } public static void execute(String query) { Statement s = null; try { s = getSQLConnection().createStatement(); s.execute(query); } catch (SQLException e) { e.printStackTrace(); } finally { try { s.close(); } catch (SQLException e) { } } } public static int updateResultSet(String query) { Statement s = null; try { s = getSQLConnection().createStatement(); return s.executeUpdate(query); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (s != null) s.close(); } catch (SQLException e) { } } return 0; } public static int insert(QueryInsert query) { PreparedStatement s = null; try { s = query.getSQLQuery(getSQLConnection()); return s.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (s != null) s.close(); } catch (SQLException e) { } } return 0; } public static String getTable(String name) { return Data.config.getString("main-sqlprefix")+name; } }