Optimizing database performance for java server -
i have live java server. has databasemanager class database connection, operation , closing. there lot of database activities going on (even more 50 clients simultaneously connected , voting). executequery method returns resultset, not every opened connections closed because closing empty resultset before returning. there better way address this?
public class databasemanager { private connection conn; public static logger logger; public static string user = "root"; public static string pass = ""; public databasemanager() { logger = loggerfactory.getlogger("utilities.databasemanager"); try { class.forname("com.mysql.jdbc.driver"); } catch (classnotfoundexception e) { logger.error(e.getmessage()); } } public void startconnection() { try { conn = drivermanager.getconnection("jdbc:mysql:///youspinvotes", user, pass); logger.debug("database connected"); } catch (sqlexception e) { logger.error("unable connect database"); logger.error(e.getmessage()); } } public resultset exececutequery(final string query) { logger.debug("executing query:" + query); resultset resultset = null; try { final statement stmt = conn.createstatement(); resultset = stmt.executequery(query); logger.debug("query executed"); } catch (exception e) { logger.error("unable execute query."+e.getlocalizedmessage()); resultset = null; } return resultset; } public int executeupdate(final string query) { logger.debug("executing update query:" + query); int rowsaffected = -1; try { final statement stmt = conn.createstatement(); rowsaffected = stmt.executeupdate(query); stmt.close(); logger.debug("update performed "+rowsaffected+" rows changed."); } catch (exception e) { logger.error(query + ": unable execute query. \n"+ e.getmessage()); } return rowsaffected; } public void endconnection() { logger.debug("closing database connection"); try { conn.close(); } catch (exception e) { logger.error("there problem closing database connection."); } } } since there lot of creating , closing connections, resource , time consumed. there way can enhance performance? connection pooling choice server? efficient way implement kind of servers?
pooling connexions idea if you're trying improve performance. opening connections can costly it's better keep them alive.
i'm not sure mean "live java server", if you're in java ee server there should connection pool implemented in , use it.
there many plain jdbc pools, instance dbcp , c3p0 options.
not related see pass string query methods, using prepared statements query parameters might improve performance (depending on driver implementation , underlying database), plus it's safer against sql injection attacks.
Comments
Post a Comment