rendered paste body/** * */package db.sqlserver;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.sql.DataSource;import play.Logger;import play.exceptions.DatabaseException;/** * @author eknowit * */public class DB { public static DataSource datasource = null; static ThreadLocal<Connection> localConnection = new ThreadLocal<Connection>(); static String destroyMethod = ""; public static void close() { if (localConnection.get() != null) { try { Connection connection = localConnection.get(); localConnection.set(null); connection.close(); } catch (Exception e) { throw new DatabaseException("It's possible than the connection was not properly closed !", e); } } } public static Connection getConnection() { try { if (localConnection.get() != null) { return localConnection.get(); } Connection connection = datasource.getConnection(); localConnection.set(connection); return connection; } catch (SQLException ex) { throw new DatabaseException("Cannot obtain a new connection (" + ex.getMessage() + ")", ex); } catch (NullPointerException e) { if (datasource == null) { throw new DatabaseException("No database found. Check the configuration of your application.", e); } throw e; } } public static void destroy() { try { if (DB.datasource != null && DB.destroyMethod != null && !DB.destroyMethod.equals("")) { Method close = DB.datasource.getClass().getMethod(DB.destroyMethod, new Class[] {}); if (close != null) { close.invoke(DB.datasource, new Object[] {}); DB.datasource = null; Logger.trace("Datasource destroyed"); } } } catch (Throwable t) { Logger.error("Couldn't destroy the datasource", t); } } public static List<Map<String, Object>> executeQuery(String sql, Object... params) { Connection con = null; PreparedStatement pstm = null; ResultSet rs = null; try { con = DB.getConnection(); pstm = con.prepareStatement(sql); int i; for (i = 0; i < params.length; i++) { pstm.setObject(i + 1, params[i]); } rs = pstm.executeQuery(); List<Map<String, Object>> resp = new ArrayList<Map<String, Object>>(); ResultSetMetaData metadata = rs.getMetaData(); int columns = metadata.getColumnCount(); Map<String, Object> element; while (rs.next()) { element = new HashMap<String, Object>(); for (i = 1; i <= columns; i++) { element.put(metadata.getColumnLabel(i), rs.getObject(i)); } resp.add(element); } return resp; } catch (SQLException ex) { throw new DatabaseException(ex.getMessage(), ex); } finally { try { if (rs != null) { rs.close(); } if (pstm != null) { pstm.close(); } if (con != null) { DB.close(); } } catch (Exception e) { System.out.println("HOO: No manejado !!!"); } } } }