一、通过JDBC API来访问数据库
Java程序通过JDBC API访问数据库
1、JDBC的实现包括3个部分。
- JDBC驱动管理器:java.sql.DriverManager类,由SUN公司实现,负责注册特定JDBC驱动器,以及根据特定驱动器建立与数据库的连接。
- JDBC驱动器API:由SUN公司制定,其中最主要的接口是java.sql.Driver接口
- JDBC驱动器:由数据库供应商或者其他第三方工具提供商创建,也陈伟JDBC驱动程序。JDBC驱动器实现了JDBC驱动器API,负责与特定的数据库连接,以及处理通信细节,它可以注册到JDBC驱动管理器中。
2、SUN公司制定了两套API。
JDBC API:java应用程序通过它来访问各种数据库。
JDBC驱动器API:当数据库供应商或者其他第三方工具提供商为特定数据库创建JDBC驱动器时,该驱动器必须实现JDBC驱动器API.
3、java.sql包中的接口和类
JDBC API主要位于java.sql包中,关键的接口与类包括以下几种:
Driver接口和DriverManager类:前者表示驱动器,后者表示驱动管理器
Connection接口:表示数据库连接
Statement接口:负责执行SQL语句
PreparedStatement接口:负责执行SQL语句
CallableStatement接口:负责执行SQL存储过程
ResultSet接口:表示SQL查询语句返回的结果集
二、从数据源中获得与数据库的连接
1、数据源简介:
在数据源中事先建立了多个数据库连接,这些数据库连接保存在连接池中。java程序通过JNDI技术获得Servlet容器提供的DataSource对象的引用。
在javax.naming包中提供了Context接口
2、配置数据源
在context.xml文件中定义数据源的<Resource>元素,在web.xml中加入<resource-ref>元素,该元素声明Web应用引用了特定数据源。
三、两个版本的具体区别:
1、构造方法的实现不一样
构造方法加载MySQL的JDBC Driver:
public BookDB () throws Exception{
//加载 MySQL Driver类
Class.forName("com.mysql.jdbc.Driver");
//注册MySQL Driver类
java.sql.DriverManager.registerDriver("com.mysql.jdbc.Driver");//不是必要的步骤
}
构造方法获得JNDI DataSource:
public BookDB () throws Exception{
Context ctx = new InitialContext ();
if(ctx == null)
throws new Exception("No Context");
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/BookDB");
}
2、getConnection()方法的实现不一样
getConnection()方法直接和数据库建立连接,然后返回连接对象
public Connection getConnection() throws Exception {
return java.sql.DriverManager.getConnection(dbUrl,dbUser,dbPwd);
}
getConnection()方法从DataSource中获得空闲状态的连接
public Connection getConnection() throws Excepion{
return ds.getConnection();
}
3、closeConnection方法的作用不一样
两个BookDB类的closeConnection()方法的代码相同:
public void closeConnection(){
try{
if(con!=null) con.close();
}catch(Exception e){
e.printStackTrace();
}
}
在JDBC API中con.close()方法会真正关闭和数据库的连接,而在DataSource中,con.close()方法仅仅是把数据库的连接对象返回到数据库连接池中,使连接对象恢复到空闲状态。