将加载驱动、创建连接设定为仅在程序运行初始进行一次,之后重复调用即可。
Product:商品信息;TradeRecord:交易记录。
2个接口供业务使用
public interface DAOFactory { public ProductDAO getProductDAO(); public TradeRecordDAO getTradeRecordDAO(); }
将加载驱动写在构造函数中,并提供一个getInstance静态方法返回私有静态final成员INSTANCE,这个成员在new的同时进行了加载驱动:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public final class JDBCDAOFactory implements DAOFactory { private static final JDBCDAOFactory INSTANCE = new JDBCDAOFactory(); private JDBCDAOFactory() { try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException cnfe) { throw new LinkageError("JDBC加载失败", cnfe); } } public static JDBCDAOFactory getInstance() { return INSTANCE; } private ProductDAO productDAO = new ProductDAOImpl(this); private TradeRecordDAO tradeRecordDAO = new TradeRecordDaoImpl(this); @Override public ProductDAO getProductDAO() { return productDAO; } @Override public TradeRecordDAO getTradeRecordDAO() { return tradeRecordDAO; } Connection getConnection() throws SQLException { return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:HelloWorld", "scott", "tiger"); } }
根据实际情况修改:
import java.sql.*; public class ProductDAOImpl implements ProductDAO { private final JDBCDAOFactory FACTORY; ProductDAOImpl(JDBCDAOFactory factory) { FACTORY = factory; } @Override public ProductTO insertProduct(ProductTO productTO) throws DaoException { String sql = ""; try { Connection conn = FACTORY.getConnection(); try { PreparedStatement pstatement = conn.prepareStatement(sql); pstatement.executeUpdate(); . . . conn.commit(); return null; } catch (SQLException sqle) { conn.rollback(); throw sqle; } finally { conn.close(); } } catch (SQLException sqle) { throw new DaoException(sqle); } } @Override public void updateProduct(ProductTO productTO) throws DaoException { } @Override public void deleteProduct(ProductTO productTO) throws DaoException { } @Override public ProductTO getProductById(String id) throws DaoException { return null; } }
最后在ProductManagerImpl里就可以:
DAOFactory jdbcdaoFactory = JDBCDAOFactory.getInstance();
jdbcdaoFactory.getProductDAO().insertProduct()......