Java.sql包中的 java.sql.Driver, jdbc.sql.Connection等提供给程序开发人员统一的开发接口,数据库提供商提供相应的实现,对程序开发人员来讲只要知道这些接口都有哪些方法就可以了。但我们可以深入一些看看到底这里面都做了那些事, 同时也可以学习其中的编程模式(如Interface模式等)。
1、 Class.forName(String classname) 的源码为:
public final class Class implements java.io.Serializable { ... public static Class forName(String className) throws ClassNotFoundException { return forName0(className, true, ClassLoader.getCallerClassLoader()); } ... } |
关于forName0 请自己查看jdk source.
的是把指定的Class装载到JVM中来。(注意class的装载、初始化过程)在装载过程中将执行被装载类的static块(如下)
2 sun的JdbcOdbcDriver 源码:
public class JdbcOdbcDriver extends JdbcOdbcObject implements JdbcOdbcDriverInterface { ... /** * connect to DB */ public synchronized Connection connect(String s, Properties properties) throws SQLException { if(JdbcOdbcObject.isTracing()) JdbcOdbcObject.trace("*Driver.connect (" + s + ")"); if(!acceptsURL(s)) return null; if(hDbc != 0) { disconnect(hDbc); closeConnection(hDbc); hDbc = 0; } if(!initialize()) { return null; } else { JdbcOdbcConnection jdbcodbcconnection = new JdbcOdbcConnection(OdbcApi, hEnv, this); jdbcodbcconnection.initialize(getSubName(s), properties, DriverManager.getLoginTimeout()); jdbcodbcconnection.setURL(s); return jdbcodbcconnection; } }
static { if(JdbcOdbcObject.isTracing()) JdbcOdbcObject.trace("JdbcOdbcDriver class loaded"); JdbcOdbcDriver jdbcodbcdriver = new JdbcOdbcDriver(); try { DriverManager.registerDriver(jdbcodbcdriver); } catch(SQLException sqlexception) { if(JdbcOdbcObject.isTracing()) JdbcOdbcObject.trace("Unable to register driver"); } } } public interface JdbcOdbcDriverInterface extends Driver { ... } |
3 连接过程
jdbc.sql.Connection con = DriverManager.getConnection("jdbc:odbc:pubs","sa","");
public class DriverManager { public static synchronized Connection getConnection(String url, String user, String password) throws SQLException { java.util.Properties info = new java.util.Properties();
// Gets the classloader of the code that called this method, may // be null. ClassLoader callerCL = DriverManager.getCallerClassLoader();
if (user != null) { info.put("user", user); } if (password != null) { info.put("password", password); } return (getConnection(url, info, callerCL)); } private static synchronized Connection getConnection(String url,java.util.Properties info, ClassLoader callerCL) throws SQLException { ... Connection result = di.driver.connect(url, info); ... } } |
4 结构图:
分享到:
相关推荐
Jsp连结数据库大全 Jsp连结数据库大全 Jsp连结数据库大全 Jsp连结数据库大全 Jsp连结数据库大全
jsp连结数据库大全
JSP连结数据库大全,包括的大部分数据库连接
jsp连结数据库大全,包含所有各种类型数据库的链接
Jsp连结数据库大全(各数据库都有)
手把手教你如何在JSP里连接数据库,有代码
jdbc连接各种数据库方式列表
基于JAVA的mysql数据库管理软件,可以做毕业设计,有专门论文,如果需要另行联系,实现可视化的mysql数据库操作,以及对数据库服务器的监控,界面友好
现在有好多初学jsp的网友经常会问数据库怎么连接啊,怎么老出错啊?所以我集中的在这写篇文章供大家参考,其实这种把数据库逻辑全部放在jsp里未必是好的做法,但是有利于初学者学习,所以我就这样做了,当大家学到...
Tomcat 4.0如何配置数据库连结缓冲池
jsp j2ee 数据库连接宝典 word文档介绍
Delphi是一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面为开发环境,透过IDE、VCL工具与编译器,配合连结数据库的功能,构成一个以面向对象程序设计为中心的应用...
演示了使用FMDB通过多线程来读和...现在ios里使用的数据库一般都是Sqlite,但是使用Sqlite有个不太好的地方就是在多线程的时候,会出现问题,sqlite只能打开一个读或者写连结。这样的话多线程就会碰到资源占用的问题。
数据库安装FireBird及FBControl、FlameRobin等工具....一个firebird数据库服务器能够管理多个独立的数据库,每一个数据库同时可支持多个客户端连结。总之:它是一个开源的,强大的,可以自由使用的数据库(即使是商业上
命名最好望文生义,避免使用数据库关键词 命名一律为大写字母(或小写,不要大下写混合) 英文单词单数命名.例:FACTORY 英文单词缩写命名.例:DEPT 英文单词之间用下划线连结,且每个单词皆为单数. ...
ADO.net访问数据库的技术,包括数据连结,数据库查询、修改、更新和删除常规操作,是微软的系列课程。
专题六:怎样进行数据绑定---将数据库中的属性数据与地图进行动态连结 专题七:怎样实现GPS监控 专题八:怎样调用空间数据库中的地图 专题九:怎样快速响应多并发用户远程数据库数据请求 专题十:怎样将影像图与矢量...
C#编写的OleDb数据库连接通用类库.关于数据库连结的
本系统在数据库连结时可与Access、SQL等数据库连结. 本系统由Java纯代码开发.