网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.java性能优化-之三.
.关于J2EE层次设计架构实例分析详.
.实用工具类库java.util.
.Java:并发使一切变得简单.
.方便的HQL: Hibernate查询语言.
.每个Java初学者都应该搞懂的六个.
.Java IO 包中的Decorator模式.
.网友杂谈各种appServer.
.在JDK 6.0中基于StAX分析XML数据.
.JAVA程序员必读:基础篇(2.d)语言.
.开源嵌入式数据库-Perst 发.
.java写文件.
.深入了解J2ME的几个重要概念.
.dimensions 方法.
.Hibernate 3.0 beta版本已经发布.
.由基本概念开始全面认识JAVA.
.Eclipse入门使用指南及开发Eclip.
.经典java问题,你能答出几个?.
.一道华为JAVA比武大赛试题,你能.
.转-类的深入研究.

Java连结数据库内幕

发表日期:2008-1-5



  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 结构图:
  Java连结数据库内幕
上一篇:选择合适的JDBC驱动程序 人气:1203
下一篇:如何测定JDBC的性能(上) 人气:956
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐