Sfoglia il codice sorgente

Cleaned up Database.java; no more ridiculous lag

Fixed issue where players are reset to their DB values when other players
join
general cleanup
Jeff Wardian 13 anni fa
parent
commit
13b87edbbc
1 ha cambiato i file con 116 aggiunte e 212 eliminazioni
  1. 116 212
      src/com/gmail/nossr50/Database.java

+ 116 - 212
src/com/gmail/nossr50/Database.java

@@ -8,252 +8,156 @@ import java.util.HashMap;
 import java.util.ArrayList;
 import java.sql.PreparedStatement;
 
-
-import org.bukkit.entity.Player;
-
-import com.avaje.ebeaninternal.server.lib.sql.DataSourceException;
 import com.gmail.nossr50.config.LoadProperties;
 
-
 public class Database {
 
-	private Connection conn;
 	private mcMMO plugin;
-	
-	public Database(mcMMO instance) 
-	{
-		plugin = instance;
+	private String connectionString;
+
+	public Database(mcMMO instance) {
+		this.plugin = instance;
+		this.connectionString = "jdbc:mysql://" + LoadProperties.MySQLserverName + ":" + LoadProperties.MySQLport + "/" + LoadProperties.MySQLdbName + "?user=" + LoadProperties.MySQLuserName + "&password=" + LoadProperties.MySQLdbPass;
 		// Load the driver instance
 		try {
-            Class.forName("com.mysql.jdbc.Driver").newInstance();
-        } catch (Exception ex) {
-        	throw new DataSourceException("Failed to initialize JDBC driver");
-        }
-		
-		// make the connection
-		try {
-		    conn = DriverManager.getConnection("jdbc:mysql://" + LoadProperties.MySQLserverName + ":" + LoadProperties.MySQLport + "/" + LoadProperties.MySQLdbName + "?user=" + LoadProperties.MySQLuserName + "&password=" + LoadProperties.MySQLdbPass);			
-		} catch (SQLException ex) {
-		    // handle any errors
-		    System.out.println("SQLException: " + ex.getMessage());
-		    System.out.println("SQLState: " + ex.getSQLState());
-		    System.out.println("VendorError: " + ex.getErrorCode());
+			Class.forName("com.mysql.jdbc.Driver");
+			DriverManager.getConnection(connectionString);
+		} catch (ClassNotFoundException e) {
+			plugin.getServer().getLogger().warning(e.getLocalizedMessage());
+		} catch (SQLException e) {
+			plugin.getServer().getLogger().warning(e.getLocalizedMessage());
+			System.out.println("SQLException: " + e.getMessage());
+			System.out.println("SQLState: " + e.getSQLState());
+			System.out.println("VendorError: " + e.getErrorCode());
 		}
 	}
 	//Create the DB structure
-	public void createStructure(){
-		Write("CREATE TABLE IF NOT EXISTS `"+LoadProperties.MySQLtablePrefix+"huds` (`user_id` int(10) unsigned NOT NULL," +
-				"`hudtype` varchar(50) NOT NULL DEFAULT ''," +
-				"PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
-		Write("CREATE TABLE IF NOT EXISTS `"+LoadProperties.MySQLtablePrefix+"users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT," +
-				"`user` varchar(40) NOT NULL," +
-				"`lastlogin` int(32) unsigned NOT NULL," +
-				"`party` varchar(100) NOT NULL DEFAULT ''," +
-				"PRIMARY KEY (`id`)," +
-				"UNIQUE KEY `user` (`user`)) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;");
-		Write("CREATE TABLE IF NOT EXISTS `"+LoadProperties.MySQLtablePrefix+"cooldowns` (`user_id` int(10) unsigned NOT NULL," +
-				"`taming` int(32) unsigned NOT NULL DEFAULT '0'," +
-				"`mining` int(32) unsigned NOT NULL DEFAULT '0'," +
-				"`woodcutting` int(32) unsigned NOT NULL DEFAULT '0'," +
-				"`repair` int(32) unsigned NOT NULL DEFAULT '0'," +
-				"`unarmed` int(32) unsigned NOT NULL DEFAULT '0'," +
-				"`herbalism` int(32) unsigned NOT NULL DEFAULT '0'," +
-				"`excavation` int(32) unsigned NOT NULL DEFAULT '0'," +
-				"`archery` int(32) unsigned NOT NULL DEFAULT '0'," +
-				"`swords` int(32) unsigned NOT NULL DEFAULT '0'," +
-				"`axes` int(32) unsigned NOT NULL DEFAULT '0'," +
-				"`acrobatics` int(32) unsigned NOT NULL DEFAULT '0'," +
-				"PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
-		Write("CREATE TABLE IF NOT EXISTS `"+LoadProperties.MySQLtablePrefix+"skills` (`user_id` int(10) unsigned NOT NULL," +
-				"`taming` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`mining` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`woodcutting` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`repair` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`unarmed` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`herbalism` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`excavation` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`archery` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`swords` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`axes` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`acrobatics` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
-		Write("CREATE TABLE IF NOT EXISTS `"+LoadProperties.MySQLtablePrefix+"experience` (`user_id` int(10) unsigned NOT NULL," +
-				"`taming` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`mining` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`woodcutting` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`repair` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`unarmed` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`herbalism` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`excavation` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`archery` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`swords` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`axes` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"`acrobatics` int(10) unsigned NOT NULL DEFAULT '0'," +
-				"PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
-		Write("CREATE TABLE IF NOT EXISTS `"+LoadProperties.MySQLtablePrefix+"spawn` (`user_id` int(10) NOT NULL," +
-				"`x` int(64) NOT NULL DEFAULT '0'," +
-				"`y` int(64) NOT NULL DEFAULT '0'," +
-				"`z` int(64) NOT NULL DEFAULT '0'," +
-				"`world` varchar(50) NOT NULL DEFAULT ''," +
-				"PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
+
+	public void createStructure() {
+		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "huds` (`user_id` int(10) unsigned NOT NULL,"
+				+ "`hudtype` varchar(50) NOT NULL DEFAULT '',"
+				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
+		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,"
+				+ "`user` varchar(40) NOT NULL,"
+				+ "`lastlogin` int(32) unsigned NOT NULL,"
+				+ "`party` varchar(100) NOT NULL DEFAULT '',"
+				+ "PRIMARY KEY (`id`),"
+				+ "UNIQUE KEY `user` (`user`)) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;");
+		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "cooldowns` (`user_id` int(10) unsigned NOT NULL,"
+				+ "`taming` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`mining` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`woodcutting` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`repair` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`unarmed` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`herbalism` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`excavation` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`archery` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`swords` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`axes` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`acrobatics` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
+		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "skills` (`user_id` int(10) unsigned NOT NULL,"
+				+ "`taming` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`mining` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`woodcutting` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`repair` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`unarmed` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`herbalism` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`excavation` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`archery` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`swords` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`axes` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
+		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "experience` (`user_id` int(10) unsigned NOT NULL,"
+				+ "`taming` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`mining` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`woodcutting` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`repair` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`unarmed` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`herbalism` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`excavation` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`archery` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`swords` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`axes` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
+		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "spawn` (`user_id` int(10) NOT NULL,"
+				+ "`x` int(64) NOT NULL DEFAULT '0',"
+				+ "`y` int(64) NOT NULL DEFAULT '0',"
+				+ "`z` int(64) NOT NULL DEFAULT '0',"
+				+ "`world` varchar(50) NOT NULL DEFAULT '',"
+				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
 	}
-	// check if its closed
-	private void reconnect()
-	{
-		System.out.println("[mcMMO] Reconnecting to MySQL...");
-		try 
-		{
-		    conn = DriverManager.getConnection("jdbc:mysql://" + LoadProperties.MySQLserverName + ":" + LoadProperties.MySQLport + "/" + LoadProperties.MySQLdbName + "?user=" + LoadProperties.MySQLuserName + "&password=" + LoadProperties.MySQLdbPass);			
-		    
-		    System.out.println("[mcMMO] Connection success!");
-		} catch (SQLException ex) 
-		{
-			System.out.println("[mcMMO] Connection to MySQL failed! Check status of MySQL server!");
-		    System.out.println("SQLException: " + ex.getMessage());
-		    System.out.println("SQLState: " + ex.getSQLState());
-		    System.out.println("VendorError: " + ex.getErrorCode());
-		}
-		
+
+	// write query
+	public boolean Write(String sql) {
 		try {
-			if(conn.isValid(5)){
-				Users.clearUsers();
-				
-				for(Player x : plugin.getServer().getOnlinePlayers())
-				{
-					Users.addUser(x);
-				}
-			}
-		} catch (SQLException e) {
-			//Herp
+			Connection conn = DriverManager.getConnection(connectionString);
+			PreparedStatement stmt = conn.prepareStatement(sql);
+			stmt.executeUpdate();
+			conn.close();
+			return true;
+		} catch (SQLException ex) {
+			System.out.println("SQLException: " + ex.getMessage());
+			System.out.println("SQLState: " + ex.getSQLState());
+			System.out.println("VendorError: " + ex.getErrorCode());
+			return false;
 		}
 	}
-	// write query
-	public boolean Write(String sql) 
-	{
-		/*
-		 * Double check connection to MySQL
-		 */
-		try 
-		{
-			if(!conn.isValid(5))
-			{
-			reconnect();
-			}
-		} catch (SQLException e) 
-		{
-			e.printStackTrace();
-		}
-			
-		try 
-			{
-		  		PreparedStatement stmt = null;
-		  		stmt = this.conn.prepareStatement(sql);
-		  		stmt.executeUpdate();
-		  		return true;
-			} catch(SQLException ex) {
-			    System.out.println("SQLException: " + ex.getMessage());
-			    System.out.println("SQLState: " + ex.getSQLState());
-			    System.out.println("VendorError: " + ex.getErrorCode());
-				return false;
-			}
- 	}
-	
+
 	// Get Int
 	// only return first row / first field
 	public Integer GetInt(String sql) {
-  		PreparedStatement stmt = null;
 		ResultSet rs = null;
 		Integer result = 0;
-		
-		/*
-		 * Double check connection to MySQL
-		 */
-		try 
-		{
-			if(!conn.isValid(5))
-			{
-			reconnect();
+		try {
+			Connection conn = DriverManager.getConnection(connectionString);
+			PreparedStatement stmt = conn.prepareStatement(sql);
+			stmt = conn.prepareStatement(sql);
+			if (stmt.executeQuery() != null) {
+				stmt.executeQuery();
+				rs = stmt.getResultSet();
+				if (rs.next()) {
+					result = rs.getInt(1);
+				} else {
+					result = 0;
+				}
 			}
-		} catch (SQLException e) 
-		{
-			e.printStackTrace();
+			conn.close();
+		} catch (SQLException ex) {
+			System.out.println("SQLException: " + ex.getMessage());
+			System.out.println("SQLState: " + ex.getSQLState());
+			System.out.println("VendorError: " + ex.getErrorCode());
 		}
-		
-		try {
-			stmt = this.conn.prepareStatement(sql);
-		    if (stmt.executeQuery() != null) {
-		    	stmt.executeQuery();
-		        rs = stmt.getResultSet();
-		        if(rs.next()){
-		        	result = rs.getInt(1);
-		        }
-		        else { result = 0; }
-		    }
-		} 
-		catch (SQLException ex) {
-		    System.out.println("SQLException: " + ex.getMessage());
-		    System.out.println("SQLState: " + ex.getSQLState());
-		    System.out.println("VendorError: " + ex.getErrorCode());
-		}		
-		
+
 		return result;
 	}
-	
+
 	// read query
 	public HashMap<Integer, ArrayList<String>> Read(String sql) {
-		/*
-		 * Double check connection to MySQL
-		 */
-		try 
-		{
-			if(!conn.isValid(5))
-			{
-			reconnect();
-			}
-		} catch (SQLException e) 
-		{
-			e.printStackTrace();
-		}
-		
-  		PreparedStatement stmt = null;
 		ResultSet rs = null;
 		HashMap<Integer, ArrayList<String>> Rows = new HashMap<Integer, ArrayList<String>>();
-		
 		try {
-			stmt = this.conn.prepareStatement(sql);
-		    if (stmt.executeQuery() != null) {
-		    	stmt.executeQuery();
-		        rs = stmt.getResultSet();
+			Connection conn = DriverManager.getConnection(connectionString);
+			PreparedStatement stmt = conn.prepareStatement(sql);
+			if (stmt.executeQuery() != null) {
+				stmt.executeQuery();
+				rs = stmt.getResultSet();
 				while (rs.next()) {
 					ArrayList<String> Col = new ArrayList<String>();
-					for(int i=1;i<=rs.getMetaData().getColumnCount();i++) {						
+					for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
 						Col.add(rs.getString(i));
 					}
-					Rows.put(rs.getRow(),Col);
+					Rows.put(rs.getRow(), Col);
 				}
-			}	    
-		}
-		catch (SQLException ex) {
-		    System.out.println("SQLException: " + ex.getMessage());
-		    System.out.println("SQLState: " + ex.getSQLState());
-		    System.out.println("VendorError: " + ex.getErrorCode());
+			}
+			conn.close();
+		} catch (SQLException ex) {
+			System.out.println("SQLException: " + ex.getMessage());
+			System.out.println("SQLState: " + ex.getSQLState());
+			System.out.println("VendorError: " + ex.getErrorCode());
 		}
-		
-		// release dataset
-	    if (rs != null) {
-	        try {
-	            rs.close();
-	        } catch (SQLException sqlEx) { } // ignore
-	        rs = null;
-	    }
-	    if (stmt != null) {
-	        try {
-	            stmt.close();
-	        } catch (SQLException sqlEx) { } // ignore
-	        stmt = null;
-	    }
-
 		return Rows;
 	}
-	
 }