一共有六個類,其中資料庫主類為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();