zoukankan      html  css  js  c++  java
  • 宋体、数据库H2DBEngine——Driver的设计与实现by小雨

    时间紧张,先记一笔,后续优化与完善。

        首先,我们通过上面的码代看一下JDBC是如何用使Driver的。

    Connection conn = null;
    String driver = "oracle.jdbc.driver.OracleDriver";
    Class.forName(driver);
    String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:ORCL";
    String user = "toddt";
    String password = "mypwd";
    conn = DriverManager.getConnection(jdbcUrl,user,password);

     从本段码代我们可以看出,用使JDBC时,首先需要将数据库对应的Driver加载到JVM当中;然后通过DriverManager获取到数据库的连接。上面,我们看一下在H2数据库中Driver是如何实现的。

        在H2 Driver类实现了java.sql.Driver接口,明表其为JDBC Driver。该类包含了一个static码代段,该段码代在执行Class.forName()时会主动执行即主动执行load方法。

        static {

            load();

        }

        load()方法起到了一个非常重要的作用:将Driver本身的一个实例(object)册注到DriverManager。该方法在DriverDriverManager之间结构了一道桥梁。当DriverManger.getConnection时,会调用Driver的方法成生一个到数据库的Connection

    // Driver INSTANCE = new Driver();
     public static synchronized Driver load() {
            try {
                if (!registered) {
                    registered = true;
                    DriverManager.registerDriver(INSTANCE);//
                }
            } catch (SQLException e) {
                TraceSystem.traceThrowable(e);
            }
            return INSTANCE;
        }

        Driver的另一个重要作用是获到得数据库的连接(Connection),在该类中由另外一个方法体具实现该能功:

    public Connection connect(String url, Properties info) throws SQLException {
            try {
                if (info == null) {
                    info = new Properties();
                }
                if (!acceptsURL(url)) {
                    return null;
                }
                if (url.equals(DEFAULT_URL)) {
                    return DEFAULT_CONNECTION.get();
                }
                Connection c = DbUpgrade.connectOrUpgrade(url, info);
                if (c != null) {
                    return c;
                }
                return new JdbcConnection(url, info);
            } catch (Exception e) {
                throw DbException.toSQLException(e);
            }
        }

        综上,Driver主要有两个作用,一是将Driver本身册注到DriverManager;另外一个是担任获取到数据库的连接。

    文章结束给大家分享下程序员的一些笑话语录: 看新闻说中国输入法全球第一!领先了又如何?西方文字根本不需要输入法。一点可比性都没有。

  • 相关阅读:
    Hibernate Validator
    RocketMQ之八:重试队列,死信队列,消息轨迹
    使用hibernate validator出现
    Hibernate Validator--创建自己的约束规则
    Java应用中使用ShutdownHook友好地清理现场、退出JVM的2种方法
    笔者带你剖析轻量级Sharding中间件——Kratos1.x
    [caffe]深度学习之图像分类模型VGG解读
    类的载入机制
    机器人api(图灵机器人)
    回文串问题总结
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3028611.html
Copyright © 2011-2022 走看看