فهرست منبع

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 14 سال پیش
والد
کامیت
13b87edbbc
1فایلهای تغییر یافته به همراه116 افزوده شده و 212 حذف شده
  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;
 	}
-	
 }