JDBC

  下面贴出一段规规矩矩的Java连接数据库的代码:

       Class.forName("com.mysql.jdbc.Driver");
        Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
        Statement st=conn.createStatement();
        ResultSet rs=st.executeQuery("select * from student");while(rs.next()){
            Object o1=rs.getObject(1);
            Object o2=rs.getObject(2);
            p(o1+","+o2);
        }
        rs.close();
        st.close();
        conn.close();

  这是Java连接数据库的一整套代码,大家都不会陌生,我曾经以为背过这些就算会连接数据库了,我发现自己很错。

  其实我只是在背别人的API而已,没有丝毫长进。毛主席说过一句话,在战略上要藐视敌人,在战术上要重视敌人,在“战略”上,我要藐视它,我在背API,毫无用处,而我却以此为荣。在“战术”上重视它,存在即有它的道理,我背过了熟练了,只是提高了我的开发速度,和我的成长没有半毛钱关系,我如果数年如一日的只会熟练地掌握它,那我就废啦。

  而我要真正学习的是它背后的思想,背后的架构设计,它是如何做到可扩展性的?它的架构设计到底是咋样的?。

 

加载驱动程序

  先给出硬件上驱动的含义,驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。

  所以,这里将MySQL数据库比作硬件设备,Java Application要和它进行通信,MySQL数据库厂商必须要编写满足Java定义的规范的“驱动程序”,到时Java会调用驱动程序运行程序,两者正常工作。

  而Java定义的规范就是java.sql.Driver接口,而MySQL数据库厂商提供的驱动程序com.mysql.jdbc.Driver实现了该接口。总的来说,Java提供规范,也就是接口,MySQL数据库厂商提供具体针对MySQL的实现,这样,利用面向对象的三大特性之一多态,实现了系统了可扩展性。如果客户要求使用Oracle数据库,这样系统架构也不会改变。

 

对static静态变量的认识

   com.mysql.jdbc.Driver里面的静态代码块的具体实现:

java.sql.DriverManager.registerDriver(new Driver());

   而我们得到连接时,直接使用DriverManager.getConnection(参数)得到了。这是为啥呢?

  因为static静态变量被该类的所有对象所共享,所以我们在任何地方调用DriverManager.getConnection(参数)都可以得到原来注册的Driver。

  所谓的注册不过就是添加到驱动管理类中的静态成员变量,注册之后,在任何地方使用类名或者对象就能获得该变量中的Driver,然后在进行操作。

  总结,这里利用了static静态变量的全局共享的特点。

 

Java接口及MySQL实现类





 

posted @ 2016-09-05 20:48  欲戴王冠.必承其重  阅读(276)  评论(0编辑  收藏  举报