1.1 传统的 JDBC 编程
Java 程序都是通过 JDBC(Java Data Base Connectivity)连接数据库的,这样我们就可以通过 SQL 对数据库编程。JDBC 是由 SUN 公司(SUN 公司后被 Oracle 公司收购)提出的一系列规范,但是它只定义了接口规范,而具体的实现是交由各个数据库厂商去实现的,因为每个数据库都有其特殊性,这些是 Java 规范没有办法确定的,所以 JDBC 就是一种典型的桥接模式。
传统的 JDBC 编程的使用给我们带来了连接数据库的功能,但是也引发了巨大的问题。代码清单 1-1 是用 JDBC 编程的一个例子。我们将从 MySQL 数据库中查询一个角色的名称,假设我们已经知道角色编号为 1。
代码清单 1-1:JdbcExample.java
public class JdbcExample { private Connection getConnection() { Connection connection = null; try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mybatis?zeroDateTime Behavior=convertToNull"; String user = "root"; String password = "learn"; connection = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException | SQLException ex) { Logger.getLogger(JdbcExample.class.getName()).log(Level.SEVERE, null, ex); return null; } return connection; } public Role getRole(Long id) { Connection connection = getConnection(); PreparedStatement ps = null; ResultSet rs = null; try { ps = connection.prepareStatement("select id, role_name, note from t_role where id = ?"); ps.setLong(1, id); rs = ps.executeQuery(); while(rs.next()) { Long roleId = rs.getLong("id"); String userName = rs.getString("role_name"); String note = rs.getString("note"); Role role = new Role(); role.setId(id); role.setRoleName(userName); role.setNote(note); return role; } } catch (SQLException ex) { Logger.getLogger(JdbcExample.class.getName()).log(Level.SEVERE, null, ex); } finally { this.close(rs, ps, connection); } return null; } private void close(ResultSet rs, Statement stmt, Connection connection) { try { if (rs != null && !rs.isClosed()) { rs.close(); } } catch (SQLException ex) { Logger.getLogger(JdbcExample.class.getName()).log(Level.SEVERE, null, ex); } try { if (stmt != null && !stmt.isClosed()) { stmt.close(); } } catch (SQLException ex) { Logger.getLogger(JdbcExample.class.getName()).log(Level.SEVERE, null, ex); } try { if (connection != null && !connection.isClosed()) { connection.close(); } } catch (SQLException ex) { Logger.getLogger(JdbcExample.class.getName()).log(Level.SEVERE, null, ex); } } public static void main(String[] args) { JdbcExample example = new JdbcExample(); Role role = example.getRole(1L); System.err.println("role_name => " + role.getRoleName()); } }
从代码中我们可以看出整个过程大致分为以下几步:
使用 JDBC 编程需要连接数据库,注册驱动和数据库信息。
操作 Connection,打开 Statement 对象。
通过 Statement 执行 SQL,返回结果到 ResultSet 对象。
使用 ResultSet 读取数据,然后通过代码转化为具体的 POJO 对象。
关闭数据库相关资源。
使用传统的 JDBC 方式存在一些弊端。其一,工作量相对较大。我们需要先连接,然后处理 JDBC 底层事务,处理数据类型。我们还需要操作 Connection 对象、Statement 对象和 ResultSet 对象去拿到数据,并准确关闭它们。其二,我们要对 JDBC 编程可能产生的异常进行捕捉处理并正确关闭资源。对于一个简单的 SQL 在 JDBC 中尚且如此复杂,何况是更为复杂的应用呢?很快这种模式就被一些新的方法取代,于是 ORM 模型就出现了。不过所有的 ORM 模型都是基于 JDBC 进行封装的,不同的 ORM 模型对 JDBC 封装的强度是不一样的。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论