一共有六个类,其中数据库主类为DbConn.java,子类为DbQuery.java,DbUpdate.java;工厂类为:DbStore.java,DbQueryStore.java,DbUpdateStore.java
DbConn.java代码:
- package com.test.db;
- import com.test.util.BaseDateSource;
- import javax.sql.DataSource;
- import javax.naming.Context;
- import javax.naming.InitialContext;
- import javax.naming.NamingException;
- import java.sql.Connection;
- import java.sql.Statement;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- public class DbConn {
- //声明数据库Connection,Statement和PreparedStatement
- Connection con;
- Statement stmt;
- PreparedStatement psmt;
- //获得数据库的连接
- public void getConn() throws NamingException, SQLException {
- Context ctx = new InitialContext();
- String strLookup = BaseDateSource.judi_sql;
- DataSource ds = (DataSource) ctx.lookup(strLookup);
- con = ds.getConnection();
- System.out.println("数据库连接已打开");
- }
- //处理数据库的SQL语句,此处为空方法,子类重写该方法
- public void sqlProcess(String sql) {}
- //处理数据库的SQL语句,此处为空方法,子类复写该方法
- public void sqlProcess(String username, String password) {}
- public ResultSet getRs() {
- return null;
- }
- //关闭数据库连接
- public void closeCon() throws SQLException {
- con.close();
- System.out.println("数据库连接已关闭");
- }
- }
DbQuery.java代码:
- package com.test.db;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- public class DbQuery
- extends DbConn {
- private ResultSet rs;
- //此处继承自DbConn.java的sqlProcess的抽象方法
- public void sqlProcess(String sql) {
- try {
- stmt = con.createStatement();
- rs = stmt.executeQuery(sql);
- System.out.println("查询数据库成功" + sql);
- }
- catch (SQLException e) {
- e.printStackTrace();
- }
- }
- public ResultSet getRs() {
- System.out.println("返回结果集");
- return rs;
- }
- public void closeCon() throws SQLException {
- rs.close();
- con.close();
- System.out.println("结果集及数据库连接已关闭");
- }
- }
DbUpdate.java代码:
- package com.test.db;
- import java.sql.*;
- public class DbUpdate
- extends DbConn {
- //此处继承自DbConn.java的sqlProcess的抽象方法
- public void sqlProcess(String sql) {
- try {
- stmt = con.createStatement();
- stmt.executeUpdate(sql);
- System.out.println("更新数据库成功" + sql);
- }
- catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
DbStore.java代码:
- package com.test.dbstore;
- import com.test.db.DbConn;
- import javax.naming.NamingException;
- import java.sql.SQLException;
- public abstract class DbStore {
- //声明数据库
- DbConn dbc;
- //订购需要使用的数据库查询方法
- public DbConn order(String sql) throws NamingException, SQLException {
- //为DBC NEW子类
- dbc = create();
- //此处创建连接,统一创建
- dbc.getConn();
- //此处处理SQL语句,自动处理
- dbc.sqlProcess(sql);
- return dbc;
- }
- public DbConn order(String username, String password) throws NamingException,
- SQLException {
- //为DBC NEW子类
- dbc = create();
- //此处创建连接,统一创建
- dbc.getConn();
- //此处处理SQL语句,自动处理
- dbc.sqlProcess(username, password);
- return dbc;
- }
- //创造需要使用的数据库查询方法,子类继承次抽象方法以返回NEW的子类
- abstract DbConn create();
- }
DbQueryStore.java代码:
- package com.test.dbstore;
- import com.test.db.*;
- public class DbQueryStore
- extends DbStore {
- //此处继承抽象方法
- DbConn create() {
- return new DbQuery();
- }
- }
DbUpdateStore.java代码:
- package com.test.dbstore;
- import com.test.db.DbConn;
- import com.test.db.DbUpdate;
- public class DbUpdateStore
- extends DbStore {
- //此处继承抽象方法
- DbConn create() {
- return new DbUpdate();
- }
- }
调用数据库使用如下代码:
DbStore ds = new DbUpdateStore();
DbConn dc = ds.order(sql);
dc.closeConn();
DbStore ds = new DbQueryStore();
DbConn dc = ds.order(sql);
ResultSet rs = dc.getRs()
dc.closeConn();