用简单工厂方法设计的数据库查询(JAVA代码实现)

Java数据库操作设计模式
本文介绍了一种基于Java实现的数据库操作设计模式,通过抽象基类DbConn与具体子类DbQuery、DbUpdate来区分查询与更新操作,并利用工厂模式进行实例化。此模式能够有效分离SQL处理逻辑,便于维护和扩展。

 一共有六个类,其中数据库主类为DbConn.java,子类为DbQuery.java,DbUpdate.java;工厂类为:DbStore.java,DbQueryStore.java,DbUpdateStore.java

 

DbConn.java代码:

  1. package com.test.db;
  2. import com.test.util.BaseDateSource;
  3. import javax.sql.DataSource;
  4. import javax.naming.Context;
  5. import javax.naming.InitialContext;
  6. import javax.naming.NamingException;
  7. import java.sql.Connection;
  8. import java.sql.Statement;
  9. import java.sql.PreparedStatement;
  10. import java.sql.ResultSet;
  11. import java.sql.SQLException;
  12. public class DbConn {
  13.   //声明数据库Connection,Statement和PreparedStatement
  14.   Connection con;
  15.   Statement stmt;
  16.   PreparedStatement psmt;
  17.   //获得数据库的连接
  18.   public void getConn() throws NamingException, SQLException {
  19.     Context ctx = new InitialContext();
  20.     String strLookup = BaseDateSource.judi_sql;
  21.     DataSource ds = (DataSource) ctx.lookup(strLookup);
  22.     con = ds.getConnection();
  23.     System.out.println("数据库连接已打开");
  24.   }
  25.   //处理数据库的SQL语句,此处为空方法,子类重写该方法
  26.   public void sqlProcess(String sql) {}
  27.   //处理数据库的SQL语句,此处为空方法,子类复写该方法
  28.   public void sqlProcess(String username, String password) {}
  29.   public ResultSet getRs() {
  30.     return null;
  31.   }
  32.   //关闭数据库连接
  33.   public void closeCon() throws SQLException {
  34.     con.close();
  35.     System.out.println("数据库连接已关闭");
  36.   }
  37. }

DbQuery.java代码:

  1. package com.test.db;
  2. import java.sql.ResultSet;
  3. import java.sql.SQLException;
  4. public class DbQuery
  5.     extends DbConn {
  6.   private ResultSet rs;
  7.   //此处继承自DbConn.java的sqlProcess的抽象方法
  8.   public void sqlProcess(String sql) {
  9.     try {
  10.       stmt = con.createStatement();
  11.       rs = stmt.executeQuery(sql);
  12.       System.out.println("查询数据库成功" + sql);
  13.     }
  14.     catch (SQLException e) {
  15.       e.printStackTrace();
  16.     }
  17.   }
  18.   public ResultSet getRs() {
  19.     System.out.println("返回结果集");
  20.     return rs;
  21.   }
  22.   public void closeCon() throws SQLException {
  23.     rs.close();
  24.     con.close();
  25.     System.out.println("结果集及数据库连接已关闭");
  26.   }
  27. }

DbUpdate.java代码:

  1. package com.test.db;
  2. import java.sql.*;
  3. public class DbUpdate
  4.     extends DbConn {
  5.   //此处继承自DbConn.java的sqlProcess的抽象方法
  6.   public void sqlProcess(String sql) {
  7.     try {
  8.       stmt = con.createStatement();
  9.       stmt.executeUpdate(sql);
  10.       System.out.println("更新数据库成功" + sql);
  11.     }
  12.     catch (SQLException e) {
  13.       e.printStackTrace();
  14.     }
  15.   }
  16. }

DbStore.java代码:

  1. package com.test.dbstore;
  2. import com.test.db.DbConn;
  3. import javax.naming.NamingException;
  4. import java.sql.SQLException;
  5. public abstract class DbStore {
  6.   //声明数据库
  7.   DbConn dbc;
  8.   //订购需要使用的数据库查询方法
  9.   public DbConn order(String sql) throws NamingException, SQLException {
  10.     //为DBC NEW子类
  11.     dbc = create();
  12.     //此处创建连接,统一创建
  13.     dbc.getConn();
  14.     //此处处理SQL语句,自动处理
  15.     dbc.sqlProcess(sql);
  16.     return dbc;
  17.   }
  18.   public DbConn order(String username, String password) throws NamingException,
  19.       SQLException {
  20.     //为DBC NEW子类
  21.     dbc = create();
  22.     //此处创建连接,统一创建
  23.     dbc.getConn();
  24.     //此处处理SQL语句,自动处理
  25.     dbc.sqlProcess(username, password);
  26.     return dbc;
  27.   }
  28.   //创造需要使用的数据库查询方法,子类继承次抽象方法以返回NEW的子类
  29.   abstract DbConn create();
  30. }

DbQueryStore.java代码:

  1. package com.test.dbstore;
  2. import com.test.db.*;
  3. public class DbQueryStore
  4.     extends DbStore {
  5. //此处继承抽象方法
  6.   DbConn create() {
  7.     return new DbQuery();
  8.   }
  9. }

DbUpdateStore.java代码:

  1. package com.test.dbstore;
  2. import com.test.db.DbConn;
  3. import com.test.db.DbUpdate;
  4. public class DbUpdateStore
  5.     extends DbStore {
  6.   //此处继承抽象方法
  7.   DbConn create() {
  8.     return new DbUpdate();
  9.   }
  10. }

调用数据库使用如下代码:

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();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值