JDBC的接口分为两个层次:一个是面向程序开发人员的JDBC API;另外一个是底层的JDBC Driver API。JDBC API 被描述成为一组抽象的Java接口,应用程序可以对某个数据库打开连接,执行SQL语句并且处理结果。最重要的接口如下:
java.sql.DriverManager:处理驱动的调入并且对产生新的数据库连接提供支持。
java.sql.Connection:代表对特定数据库的连接。
java.sql.Statement:代表一个特定的容器,以对一个特定的数据库执行SQL语句。
java.sql.ResultSet:控制对一个特定语句的行数据的存取。
其中java.sql.Statement又有两个子类型:
(1) java.sql.PreparedStatement:用于执行预编译的SQL语句。
(2) java.sql.CallableStatement:用于执行对一个数据库内嵌过程的调用。
JDBC Driver API是指java.sql.Driver接口,封装了不同数据库的驱动程序(像Access、Foxpro、SQL Server等)。由于它是数据库底层处理,所以必须提供对java.sql.Connection、java.sql. Statement、java.sql.PreparedStatement和java.sql.ResultSet的实现。
如果目标DBMS提供有OUT参数的内嵌过程,那么还必须提供java.sql.CallableStatement 接口。在java.sql.Driver接口中每个数据库驱动程序必须提供一个类,使得系统可以由 java.sql.DriverManager来管理。一个比较好用的驱动程序是在ODBC之上提供对JDBC的实现,从而提供与ODBC接口的JDBC-ODBC桥。所谓JDBC-ODBC桥,是一个JDBC驱动程序,通过将JDBC操作转换为ODBC操作来实现JDBC操作。它由sun.jdbc.odbc包实现,包含一个用来访问ODBC的本地库,对所有ODBC可用的数据库实现JDBC。 通过ODBC子协议,可以使用下面一行代码进行显示加载。
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
加载时,ODBC驱动程序将创建自己的实例,同时在JDBC驱动程序管理器中进行注册。由于JDBC放在ODBC之后,所以实现起来简单且高效。
Driver :
Driver接口是每个驱动器类都需要完成的。JavaSQL框架允许有多个数据库驱动器,每个驱动器应该提供一个类来实现驱动器接口,而驱动器的装载通过DriverManager实例实现。
DriverManager将装载尽量多的驱动器,对每个给定的连接请求,将所有的驱动器依次连接到目标数据库上。当驱动器类装载后,Driver应该创建一个实例,然后注册到DriverManager上。
DriverManager :
DriverManager管理一系列JDBC驱动器的基本服务。应用程序可以显式加载JDBC驱动器。例如下面代码显式加载my.sql.Driver。
Class.forName("my.sql.Driver");
显式加载JDBC-ODBC桥:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
它的较为重要的方法有:
public static Connection getConnection(String url) throws SQLException
public static Connection getConnection(String url, Properties info) throws SQLException
public static Connection getConnection(String url, String user, String password) throws
SQLException
这些方法的功能都是建立一个到给定数据库url的连接。DriverManager试图从注册的JDBC驱动器序列中选择合适的驱动器,返回到url的连接。
其中:
(1) url为数据库url,格式为 jdbc:subprotocol:subname。
(2) info以“标记/数值对”作为连接参数,至少应该包括user和password属性对。
(3) user指数据库用户(连接以什么身份建立)。
(4) password 是用户的密码。
例如:使用JDBC-ODBC桥建立到ODBC配置的数据库CallCenter的连接,访问CallCenter数据库的用户名为sa,密码无。语句行如下:
Connection con = DriverManager.getConnection("jdbc:odbc:CallCenter","sa","");
|