Java连结数据库内幕

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
 {
  ...
 }

时间: 2025-01-03 07:50:40

Java连结数据库内幕的相关文章

(初学者)eclipse编写java 对数据库的操作问题,不知道问题出在哪里,无法入库

问题描述 (初学者)eclipse编写java 对数据库的操作问题,不知道问题出在哪里,无法入库 代码如下:QueryRunner queryRunner = new QueryRunner(); String sql = ""delete from customers where id = ?""; Connection connection = null; try { connection = JDBCTools.getConnection(); System.

Java的数据库应用

数据|数据库 利用Java开发数据库应用系统时,经常需要在用户界面上显示查询结果.由于SUN公司提供的JDK1.x开发工具包不是可视化的集成开发环境(IDE),不能象Delphi.VB那样方便地把查询结果在DBGrid等表格中显示出来.因此,只能靠自己编写代码来实现. 在实际应用中,我们可以利用Vector.JTable.AbstractTableModel等三个类较好地解决这一问题.以下,详细介绍一下实现方法. 一. 类Vector.类JTable及类AbstractTableModel简介:

我的连结数据库的类

数据|数据库 using System;using System.Data;using System.Data.SqlClient;using System.Configuration; namespace admin.CommonClass{ /// <summary> /// 连结数据库的类--OpenDB /// </summary> public class OpenDB { //获得连结数据库的字符串 private string strJet = Configurati

创建一个Java应用数据库的桌面应用程序

本教程将展示如何创建一个 Java 的桌面应用程序,用来访问以及更新数据库.本教程利用 NetBeans IDE 6.0 支持的以下技术: Java 持久化 API (JPA),帮助你使用Java 代码来与数据库接合 Beans 绑定技术 (JSR 295) ,为不同的JavaBeans 控件提供一种方式来相互同步属性值.举一个例子, 你可以使用 Beans 绑定技术来保持 JTable 可视化控件中各单元的值与实体类中各域的值同步.(在这里,实体类表示数据表) Swing 应用程序框架 (JS

java 创建数据库的问题

问题描述 java 创建数据库的问题 用Java创建数据库 启用执行与句 boolean b=ps.execute(); 将执行结果赋值给一个布尔变量 为什么返回值是false? 求解释.. 解决方案 该方法返回值不同,使用方式也不同:返回值为true时,表示执行的查询语句,使用getResultSet方法获取结果:返回值为false时,表示执行更新或DDL语句,使用getUpdateCount获取结果. 解决方案二: 回答的很好,支持楼上的.

java-关于Java接数据库所出现的问题及解决办法

问题描述 关于Java接数据库所出现的问题及解决办法 小白一个,Java链接数据库过程中经常会出错,想问一下各位有遇到的什么问题以及解决办法吗? 解决方案 你自己写一个连接数据库的 如果正确的话就保留下来 以后如果还需要就可以直接用 当然如果报错的话 你就需要改代码 直到你的代码正确就可以 百度 谷歌 解决方案二: 开发时间长了,就总结出来了! 解决方案三: java链接数据库:http://blog.csdn.net/qq_19558705/article/details/49947317 遇

php 数据采集-php如何连结数据库,怎么写代码

问题描述 php如何连结数据库,怎么写代码 php mysql如何连结数据库,怎么写代码,坐等高手,搞了好久都不成功 解决方案 http://www.cnblogs.com/JamyWong/archive/2009/06/03/1495499.html 解决方案二: PHP数据库连接代码 解决方案三: PHP数据库连接代码 解决方案四: mysql_select("localhost","root","root"); mysql_selectd

二进制数据-java从数据库中读取二进制文件并....

问题描述 java从数据库中读取二进制文件并.... java从postgresql数据库中读取bytea二进制并且生成文件(如word,pdf文件等)!在jsp页面上显示附件(如邮件形式那样的附件)并且可以下载!请问怎么实现啊?求解!谢谢了! 解决方案 首先你需要确定附件的类型及名称.然后下载很简单的,根据下载的请求返回 response.addHeader ("content-type", "application/RFC822"); response.addH

java 从数据库取数据并存入本地文本中

问题描述 java 从数据库取数据并存入本地文本中 已经解决了!!!!大家可以不用来围观啦 要求如下: 1.连接数据库,取数据,weibo表中取出 uid和text 2.判断 uid是否相同,如果相同,则把其对应的text存入路径为D:data1的同一文件中,并且以此uid命名文件.格式如下: 3.表的样式如下: 4.我自己已经写了连接数据库,取数据,weibo表中取出 uid和text这部分了,我用的是Map暂存数据,如下: public HashMap<String, String> se