一、JDBC
java原生的jdbc是很简单的,就是以下这么点东西。
package org.rathan.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.rathan.entity.Atom; public class JDBCDemo { // 1.Connection; // 2.DriverManager; // 3.Statement; // 4。PreparedStatement; // 5.ResultSet; public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e1) { } Connection conn = null; Statement stmt = null; ResultSet rs = null; PreparedStatement preStmt = null; try { conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "username", "123456"); stmt = conn.createStatement(); // rs = stmt.executeQuery("select * from atom_dim"); preStmt = conn.prepareStatement("select * from atom_dim where atom_id = ?"); preStmt.setInt(1, 100001); rs = preStmt.executeQuery(); while (rs.next()) { System.out.println(rs.getString(2)); } rs.close(); preStmt.close(); conn.close(); } catch (SQLException e) { } finally { if (preStmt != null) { try { preStmt.close(); } catch (SQLException e) { } } try { if (conn != null) { conn.close(); } } catch (SQLException e) { } } } }
二、DbUtils:
DbUtils是apache下的一个开源项目,其目的是为了简化JDBC的使用。
三个优点:
1. 不用担心资源泄露(resource leak);
2. 代码更简洁;
3. 自动填充JavaBean。
其中最主要的3个class是DbUtils、QueryRunner、ResultSetHandler。对于执行时间很长的query还可以调用AsyncQueryRunner。
DbUtils可以安静地关掉conn:
DbUtils.closeQuietly(conn);
等价于
if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } }
QueryRuner有2个常用构造器,一个为默认构造器,另一个需要接口javax.sql.DataSource作为参数。
DataSource是DriverManager的首选替代项,这货貌似可以被Spring托管。
Context initcontext = new InitialContext(); Context context = (Context) initcontext.lookup("java:comp/env"); DataSource ds = (DataSource) context.lookup("jdbc/XE");
以上的class都是出自javax.naming包下的。
QueryRunner常用的query方法一般需要2个参数:
1、java.sql.Connection:作为数据库连接信息;
2、接口ResultSetHandler:将ResultSet处理成指定的指定的类型,常用的如下:
1. ListHandler;
2. MapHandler,MapListHandler;
3. BeanHandler,BeanListHandler;
例子如下:
List<Map<String, Object>> atoms = queryRunner.query(conn, "select * from atom_dim", new MapListHandler()); List<Atom> atoms = queryRunner.query(conn, "select * from atom_dim", new BeanListHandler<Atom>(Atom.class));