Java tutorial
/* * Copyright 2009 Perseus Project - Tufts University <http://www.perseus.tufts.edu> * * This file is part of DbUtilPerseus. * * DbUtilPerseus is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * DbUtilPerseus is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with DbUtilPerseus. If not, see <http://www.gnu.org/licenses/>. */ //package eu.himeros.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; /** * Manage Db connections providing shortcuts for Statements, PreparedStatements * and ResultSets. * * @author Federico Boschetti <federico.boschetti.73@gmail.com> */ public class DbManager { public Connection con; public Statement stmt; public PreparedStatement pstmt; public ResultSet rst; public Statement[] stmts; public PreparedStatement[] pstmts; public ResultSet[] rsts; private String driverName; private String dbName; private boolean dbArray; private int stmtsSize; private int pstmtsSize; private int rstsSize; /** * Initialize a generic DbManager. * * @param driver * the driver. * @param database * the database name. * @param login * the login. * @param passwd * the password. */ public DbManager(String driver, String database, String login, String passwd) { dbArray = false; try { initDb(driver, database, login, passwd); stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch (Exception e) { e.printStackTrace(); } } /** * Initialize the DbManager, using hsqldb defaults. */ public DbManager() { dbArray = false; try { initDb("hsqldb", ".", "sa", ""); stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch (Exception e) { e.printStackTrace(); } } /** * Initialize the DbManager. * * @param driver * the driver. * @param database * the database name. * @param login * the login. * @param passwd * the password. * @param stmtsSize * the max number of Statement instances. * @param pstmtsSize * the max number of PreparedStatement instances. * @param rstsSize * the max number of ResultSet instances. */ public void dbManager(String driver, String database, String login, String passwd, int stmtsSize, int pstmtsSize, int rstsSize) { dbArray = true; this.stmtsSize = stmtsSize; this.pstmtsSize = pstmtsSize; this.rstsSize = rstsSize; try { initDb(driver, database, login, passwd); if (stmtsSize > 0) { stmts = new Statement[stmtsSize]; for (int i = 0; i < stmtsSize; i++) { stmts[i] = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); } } if (pstmtsSize > 0) { pstmts = new PreparedStatement[pstmtsSize]; } if (rstsSize != 0) { rsts = new ResultSet[rstsSize]; } } catch (Exception e) { e.printStackTrace(); } } /** * Initialize the DbManager. * * @param driver * the driver. * @param database * the database name. * @param login * the login. * @param passwd * the password. * @param stmtsSize * the max number of Statement instances. * @param pstmtsSize * the max number of PreparedStatement instances. * @param rstsSize * the max number of ResultSet instances. */ public DbManager(String driver, String database, String login, String passwd, int stmtsSize, int pstmtsSize, int rstsSize) { dbManager(driver, database, login, passwd, stmtsSize, pstmtsSize, rstsSize); } /** * Initialize the DbManager. * * @param driver * the driver. * @param database * the database name. * @param login * the login. * @param passwd * the password. * @param stmtsSize * the max number of Statement instances. * @param rstsSize * the max number of ResultSet instances. */ public DbManager(String driver, String database, String login, String passwd, int stmtsSize, int rstsSize) { dbManager(driver, database, login, passwd, stmtsSize, 0, rstsSize); } /** * Provide the PreparedStatement, given a query. * * @param query * the query. * @return the PreparedStatement based on the query. */ public PreparedStatement prepareStatement(String query) { try { pstmt = con.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); return pstmt; } catch (Exception e) { e.printStackTrace(); return null; } } /** * Shortcut for hsqldb driver name. * * @param driver * the driver. * @param database * the database name. */ private void longNames(String driver, String database) { if (driver.equals("hsqldb")) { driverName = "org.hsqldb.jdbcDriver"; dbName = "jdbc:hsqldb:" + database; } else { driverName = driver; dbName = database; } } /** * Initialize the database. * * @param driver * the driver. * @param database * the database name. * @param login * the login. * @param passwd * the password. */ private void initDb(String driver, String database, String login, String passwd) { try { longNames(driver, database); Class.forName(driverName); con = DriverManager.getConnection(dbName, login, passwd); } catch (Exception e) { e.printStackTrace(); } } /** * Close the single instance of ResultSet, PreparedStatement, Statement and * Connection. */ private void closeSingle() { try { if (rst != null) { rst.close(); } if (pstmt != null) { pstmt.close(); } stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } /** * Close the array. */ private void closeArray() { try { for (int i = 0; i < rstsSize; i++) { if (rsts[i] != null) { rsts[i].close(); } } for (int i = 0; i < stmtsSize; i++) { if (stmts[i] != null) { stmts[i].close(); } } for (int i = 0; i < pstmtsSize; i++) { if (pstmts[i] != null) { pstmts[i].close(); } } con.close(); } catch (Exception e) { e.printStackTrace(); } } /** * Close the array or the single instance. */ public void close() { if (dbArray) { closeArray(); } else { closeSingle(); } } /** * Close the ResultSet * * @param rst * the ResultSet */ public void close(ResultSet rst) { try { rst.close(); closeSingle(); } catch (Exception e) { e.printStackTrace(); } } }