litesoft
@ 947
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
// This Source Code is in the Public Domain per: http://unlicense.org package org.litesoft.sql; import java.sql.*; import java.util.*; import org.litesoft.db.*; import org.litesoft.logger.*; public abstract class SQLDBconnectionProvider { public static final Logger LOGGER = LoggerFactory.getLogger( SQLDBconnectionProvider.class ); protected static final String PROP_KEY_USER = "user"; protected static final String PROP_KEY_PASSWORD = "password"; protected String mDatabaseURL; protected Properties mConnectionProperties; protected Driver mDriver; private boolean mDBisSetup = false; protected Driver createDriver( String pDatabaseURL, String pUserName, String pPassword ) { mDatabaseURL = pDatabaseURL; mConnectionProperties = new Properties(); mConnectionProperties.put( PROP_KEY_USER, pUserName ); mConnectionProperties.put( PROP_KEY_PASSWORD, pPassword ); try { mDriver = DriverManager.getDriver( mDatabaseURL ); } catch ( Exception e ) { String zErrorMessage = "Failed to create JDBC Driver for " + mDatabaseURL; LOGGER.error.log( e, zErrorMessage ); throw new Error( zErrorMessage, e ); } return mDriver; } public final SQLDBconnection createSQLDBconnection() throws DBException { setup(); Connection zConnection; try { zConnection = mDriver.connect( mDatabaseURL, mConnectionProperties ); } catch ( SQLException e ) { throw new WrappedSQLException( e ); } try { DBinfo zDBinfo = getDBinfo( zConnection, mDatabaseURL ); return LLcreateSQLDBconnection( zConnection, zDBinfo ); } catch ( SQLException e ) { try { zConnection.close(); } catch ( SQLException e1 ) { // Whatever! } throw new WrappedSQLException( e ); } } protected SQLDBconnection LLcreateSQLDBconnection( Connection pConnection, DBinfo pDBinfo ) { return new SQLDBconnection( pConnection, mDatabaseURL, pDBinfo ); } synchronized protected void setup() { if ( !mDBisSetup ) { mDBisSetup = true; setupDB(); } } protected synchronized DBinfo getDBinfo( Connection pCon, String pUrl ) throws SQLException { DBinfo zDBinfo = mDBinfosByUrls.get( pUrl ); if ( zDBinfo == null ) { mDBinfosByUrls.put( pUrl, zDBinfo = SQLHelper.createDBinfo( pCon ) ); LOGGER.info.log( pUrl, " connects to ", zDBinfo ); } return zDBinfo; } private Map<String, DBinfo> mDBinfosByUrls = new HashMap<String, DBinfo>(); abstract protected void setupDB(); } |