View Javadoc

1   package com.imcode.db;
2   
3   import org.apache.commons.dbutils.QueryRunner;
4   import org.apache.commons.dbutils.ResultSetHandler;
5   
6   import javax.sql.DataSource;
7   import java.sql.Connection;
8   import java.sql.SQLException;
9   
10  public class DatasourceDatabase implements Database {
11  
12      private QueryRunner queryRunner = new QueryRunner();
13      private DataSource dataSource;
14  
15      public DatasourceDatabase( DataSource dataSource ) {
16          this.dataSource = dataSource;
17      }
18  
19      public Object executeCommand( final DatabaseCommand databaseCommand ) throws DatabaseException {
20          try {
21              Connection connection = dataSource.getConnection();
22              try {
23                  DatabaseConnection defaultDatabaseConnection = new DatabaseConnectionImpl( connection, queryRunner );
24                  return databaseCommand.executeOn( defaultDatabaseConnection );
25              } catch( DatabaseException e ) {
26                  throw new DatabaseException( "Executing "+databaseCommand, e ) ;
27              } finally {
28                  connection.close() ;
29              }
30          } catch ( SQLException e ) {
31              throw DatabaseException.fromSQLException( null, e );
32          }
33      }
34  
35      private static class DatabaseConnectionImpl implements DatabaseConnection {
36  
37          private Connection connection;
38          private QueryRunner queryRunner;
39  
40          private DatabaseConnectionImpl(Connection connection, QueryRunner queryRunner) {
41              this.connection = connection;
42              this.queryRunner = queryRunner;
43          }
44  
45          public int executeUpdate(String sql, Object[] parameters) throws DatabaseException {
46              try {
47                  return queryRunner.update(connection, sql, parameters);
48              } catch (SQLException se) {
49                  throw DatabaseException.fromSQLException(null, se);
50              }
51          }
52  
53          public Number executeUpdateAndGetGeneratedKey(String sql, Object[] parameters) throws DatabaseException {
54              try {
55                  return JdbcUtils.executeUpdateAndGetGeneratedKey(connection, sql, parameters);
56              } catch (SQLException se) {
57                  throw DatabaseException.fromSQLException(null, se);
58              }
59          }
60  
61          public Object executeQuery(String sqlQuery, Object[] parameters,
62                                     ResultSetHandler resultSetHandler) throws DatabaseException {
63              try {
64                  return queryRunner.query(connection, sqlQuery, parameters, resultSetHandler);
65              } catch (SQLException e) {
66                  throw DatabaseException.fromSQLException(null, e);
67              }
68          }
69  
70          public Connection getConnection() {
71              return connection;
72          }
73      }
74  
75  }