JDBC基础
一、概述
JDBC(Java Database Connectivity),是sun提出的一套访问各种数据库系统的API,它是一套规范,标准化了连接,查询和事务处理的语法,以及查询结果的数据结构。利用JDBC,你可以对数据库执行SQL语句,来完成和数据库的交互。无论是Hibernate也好,iBatis也好,其实现的基础,都是JDBC。
下面这幅图展示了Java Application是如何通过JDBC来和数据库进行交互的:
首先,Application调用JDBC接口,而JDBC则导入JDBC驱动(Driver),最终和数据库交互的是各种驱动。
二、JDBC驱动分类
JDBC的驱动分成四类:
1. JDBC-ODBC桥驱动
通过驱动调用ODBC来访问数据库。
2. 本地API部分JAVA驱动
利用开发商提供的本地库直接与数据库通信。
3. JDBC-NET纯JAVA驱动
与DBMS协议无关,不安装本地库。
4. 本地协议纯JDBC驱动
将JDBC调用直接转换为DBMS所用的网络协议。
三、JDBC体系结构
我们来看看JDBC访问数据库的步骤:
具体每个接口就不详细介绍了。我们来看一下示例代码吧
Connection conn = null;
Statement stmt = null;
// PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// 1. 注册Driver
// DriverManager.registerDriver(new oracle.jdbc.Driver());
Class.forName("oracle.jdbc.OracleDriver");
// 2. 建立连接
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:TESTDB", "user", "pwd");
// 设置事务方式
conn.setAutoCommit(false);
// 3. 创建Statement对象
stmt = conn.createStatement();
// 4. 执行操作
// 4.1 read
rs = stmt.executeQuery("select * from user u");
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
// print it
}
// 4.2 create
stmt.executeUpdate("insert into user values (5, 'xx', 'xxx')");
// 4.3 update
stmt.execute("update user u set u.name = 'bbb' where u.id = 5");
// 4.4 delete
stmt.execute("delete from user u where u.id = 2");
// 5. 提交事务
conn.commit();
rs.close();
stmt.close();
conn.close();
} catch (ClassNotFoundException ce) {
// log.error("xxx" + ce.getMessage());
try {
// only for cud operations
conn.rollback();
} catch (SQLException e) {
// log.error("xxx" + e.getMessage());
}
} catch (SQLException se) {
// log.error("xxx" + se.getMessage());
try {
conn.rollback();
} catch (SQLException e) {
// log.error("xxx" + e.getMessage());
}
} catch (Exception e) {
// log.error("xxx" + e.getMessage());
} finally {
try {
if(rs != null) {
rs.close();
}
if(stmt != null) {
stmt.close();
}
if(conn != null) {
conn.close();
}
} catch (SQLException e) {
// log.error('xxx');
}
}
写得非常简单,因为现在基本上接触不到JDBC的具体代码了。写这篇文章的目的,主要就是让自己在忘了JDBC的时候,能在两分钟之内回想起来。