package org.ultralogger.logger.sql; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; import org.ultralogger.Main; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import java.util.logging.Logger; public class SQL { public static final String driver = "com.mysql.jdbc.Driver"; private Logger logger; private Connection conn; private Main plugin; private String dbms = "mysql"; private String serverName,portNumber,userName,password,dbName,prefix; /* * Enable Sql logging at plugin enable */ public SQL(Main head,String serverName,String portNumber,String userName,String password,String dbName,String prefix){ this.plugin=head; this.serverName = serverName; this.portNumber = portNumber; this.userName = userName; this.password = password; this.dbName= dbName; this.prefix= prefix; logger = getLoggerSafely(); connect(); } /* * Connect to database and catch errors */ public void connect(){ try{ Class.forName(driver); conn = this.getConnection(); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } //Create if not exists and use db Statement stmt = null; try { stmt = conn.createStatement(); stmt.executeUpdate("CREATE DATABASE IF NOT EXISTS "+dbName); stmt.executeQuery("USE "+dbName); stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } /* * Establish connection and log to console */ public Connection getConnection() throws SQLException { Connection conn = null; Properties connectionProps = new Properties(); connectionProps.put("user", this.userName); connectionProps.put("password", this.password); conn = DriverManager.getConnection("jdbc:" + this.dbms + "://" + this.serverName + ":" + this.portNumber + "/?useUnicode=true&characterEncoding=utf-8",connectionProps); logger.info("Connected to database"); return conn; } /* * Execute update and print errors to console * Can also be used to create Tables * TODO: Might be better to buffer it into little query packets instead of loads of single query calls */ public void query(String query){ Statement stmt = null; try { stmt = conn.createStatement(); stmt.executeUpdate(query); stmt.close(); } catch (SQLException e) { System.out.println("(ERROR) Can NOT execute query : "+query); e.printStackTrace(); } } /** * Change ' into '' inside Strings => Block SQL-injection * TODO: Make it run for every String ever called */ public String StringCheck(String check){ String checked= null; try { checked = EscapeString.mysql_real_escape_string(conn, check); } catch (Exception e) { e.printStackTrace(); } return checked; } /** * Get the Bukkit logger first, before we try to create our own */ private Logger getLoggerSafely() { Logger log = null; try { log = plugin.getLogger(); } catch (Throwable e) { // We'll handle it } if (log == null) log = Logger.getLogger("Minecraft"); return log; } /* * Register listeners for the Loggers */ public void register(Listener l){ plugin.getServer().getPluginManager().registerEvents(l, plugin); } public JavaPlugin getPlugin() { return plugin; } public String getprefix(){ return prefix; } }