JDBC的封装
持久化是将程序中数据在瞬时状态和持久状态间转换的机制。JDBC是一种持久化机制,将程序直接保存成文本文件也是持久化机制的一种实现。
DAO(DataAccessObjects,数据存取对象)位于业务逻辑和持久化数据之间,实现对持久化数据的访问。通俗来讲,就是将数据库操作都封装起来,对外提供相应的接口。
在面向对象设计过程中,有一些"套路"用于解决特定问题,称为模式。DAO模式提供了访问关系型数据系统所需操作的接口,将数据访问和业务逻辑分离,对上层提供面向对象的数据访问接口。DAO模式的优势就在于它实现了两次隔离。DAO模式的优势:隔离了数据访问代码和业务逻辑代码;隔离了不同数据库实现。
一个典型的DAO模式主要组成部分:
DAO接口:把对数据库的所有操作定义成抽象方法,可以提供多种实现。
DAO实现类:针对不同数据库给出DAO接口定义方法的具体实现 。
实体类:用于存放与传输对象数据。
数据库连接和关闭数据类:避免了数据库连接和关闭代码的重复使用,方便修改。
企业分层架构:客户层、显示层、业务层、数据层、资源层。
使用Properties类读取配置文件:
优势:能够脱离程序本身去修改相关的变量设置Properties配置文件:由键—值对组成组成
读取配置文件:使用Properties类相应方法
Properties类的常用方法:
JDBC封装类代码:
public class JdbcDao {
private Connection conn = null;
private PreparedStatement stmt = null;
private ResultSet rs = null;
private static String driver = "com.mysql.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/Pet";
private String user = "root";
private String password = "root";
static {
}
public Connection getCon() {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn = (Connection) DriverManager
.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public int update(String sql, Object... obj) {
int count = 0;
conn = getCon();
try {
stmt = conn.prepareStatement(sql);
if (obj != null) {
for (int i = 0; i < obj.length; i++) {
stmt.setObject(i + 1, obj[i]);
}
}
count = stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close();
}
return count;
}
public ResultSet Query(String sql, Object... obj) {
conn = getCon();
try {
stmt = conn.prepareStatement(sql);
while (obj != null) {
for (int i = 0; i < obj.length; i++) {
stmt.setObject(i + 1, obj[i]);
}
}
rs = stmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close();
}
return rs;
}
public void close() {
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
}