如何实现DriverManager类

这是为概念。

因此避免了import语句/ package语句。 也仅给出必要的方法。

搜索****以获取评论

由Joshua Bloch提供的有效Java

http://www.janeve.me/articles/class-...-getconnection
/* ******Service interface  */
public interface Connection {
... //***** Service-specific methods go here
} 
/* ******  Following class implements a connection
of a particular DriverImpl */
public class ConnectionImpl implements Connection{
} 
/* ******Service provider interface */
public interface Driver {
    Connection getConnection() throws SqlException; 
        public boolean acceptsURL(String url); 
} 
/* ****** Following class is a Driver implementation provided by a particular DataBase vendor. The static
block is executed whenever class.forName(...) is called.*/
public class DriverImpl implements Driver {
    static { 
            try { 
                DriverManager.registerDriver(new Driver()); 
            } catch (SQLException E) { 
                throw new RuntimeException("Can't register driver!"); 
            } 
    } 
private Connection getConnection()throws SQLException{
......
} 
public boolean acceptsURL(String url){
......
} 
}     
/* ******Noninstantiable class for service registration and access */
public class DriverManager {
private DriverManager() { } // Prevents instantiation 
// Stores service instances of Drivers
private static final Set<Driver> drivers = new ConcurrentHashSet<Driver>();    
/****  This method is called in the static block defined 
in the Driver class  */
public static void registerDriver(Driver p){
    drivers.put(p);
}     
/*** The getConnection method which is called by our client code. This method calls getDriver() method */
public Connection getConnection(String url,....) throws SqlException{
    Driver d = getDriver(url);
    return d.getConnection();     
} 
private Driver getDriver(String url) throws SQLException{ 
    Iterator<Driver> itr = drivers.iterator();
    Driver d = null;    
    while(itr.hasNext()){
        d = itr.next();
        if ( d.acceptsURL(url) ) 
            return d;
    } 
  }
  throw new SQLException("No driver found for " + url);
} 
}

From: https://bytes.com/topic/java/insights/951463-how-drivermanager-class-implemented

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DBConnectionManager.java //连接数据库用的 import java.sql.*; public class DBConnectionManager { private String driverName="com.microsoft.jdbc.sqlserver.SQLServerDriver"; private String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo"; private String user="sa"; private String password=""; public String getDriverName() { return driverName; } public void setDriverName(String driverName) { this.driverName = driverName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public Connection getConnection(){ try{ Class.forName(driverName); return DriverManager.getConnection(url, user, password); }catch(Exception e){ e.printStackTrace(); return null; } } } DBSQLManager.java //操作数据库用的 import java.sql.*; public class DBSQLManager { protected Connection con=null;//Connection对象 protected Statement stmt=null;//Statement对象 protected ResultSet rs=null;//记录结果集 protected String sql=""; //SQL语句 public DBSQLManager(){ try { DBConnectionManager dcm=new DBConnectionManager(); con=dcm.getConnection(); //con.setAutoCommit(false);//添加事物,既是否自动提交 stmt=con.createStatement(); } catch (SQLException e) { e.printStackTrace(); } } public Statement getStmt(){ return stmt; } public Connection getCon(){ return con; } public ResultSet getRs(){ return rs; } public void setSql(String sql){ this.sql=sql; } public String getSql(){ return sql; } //查找 public void execueQuery(){ try { rs=stmt.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); } } //更新 public void executeUpdate(){ try { stmt.executeUpdate(sql); } catch (SQLException e) { e.printStackTrace(); } } //关闭 public void close(){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs=null; } if(stmt!=null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } stmt=null; } try { con.close(); } catch (SQLException e) { e.printStackTrace(); } con=null; } } SqlOperate.java //用来调用数据库操作语句 import java.sql.ResultSet; import java.sql.SQLException; public class SqlOperate { //插入,修改,删除 public void insOrModOrDel(String sql){ DBSQLManager dbsm=new DBSQLManager(); dbsm.getStmt(); dbsm.setSql(sql); dbsm.executeUpdate(); dbsm.close(); } //显示 public void display(String sql){ DBSQLManager dbsm=new DBSQLManager(); dbsm.getStmt(); dbsm.setSql(sql); dbsm.execueQuery(); ResultSet rs=dbsm.getRs(); try { while(rs!=null&&rs.next()){ System.out.print(rs.getObject(1)+"\t"); System.out.print(rs.getObject(2)+"\t"); System.out.print(rs.getObject(3)+"\t"); System.out.println(rs.getObject(4)); } dbsm.close(); } catch (SQLException e) { e.printStackTrace(); } } } SqlMain.java //数据库的测试主函数 public class SqlMain { public static void main(String[] args){ SqlOperate sqlOpt=new SqlOperate(); // sqlOpt.insOrModOrDel("insert into user1 values('qianhaifei',999999,'qianhaifei@163.com')");//插入 // sqlOpt.insOrModOrDel("update user1 set username='weixiangyang' where id=4");//修改 // sqlOpt.insOrModOrDel("delete from user1 where username='weixy2000'");//删除 sqlOpt.display("select *from user1");//显示 } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值