JDBC(Java Database Connectivity)是最常用的持久化方法,它能够把数据保存进关系型数据库,并且高效的将数据从数据库中查询出来。JDBC作为一种成熟的持久化方法,与序列化技术相比,其优势有是相当明显的。它能快速的读写大量的数据、支持事务性、保证数据的完整性、支持数据的并发读取等。也正式因为如此,JDBC作为Java的持久化技术,广泛用在各种商业程序中。
但美中不足的是,JDBC并不支持对Java对象的持久化。由于数据库大多数是二维的关系型数据库,因此持久化Java对象的时候,需要将Java对象变成相应SQL语句;还原Java对象的时候,需要从数据库结果集中取出各列的值,然后通过setter方法设置到Java对象上。
例如,使用JDBC技术,持久化Person对象时可能需要使用以下的SQL代码,将数据保存到数据库中,例如以下所示。
PersonDAO.java
public void persist(Person person) throws Exception {
//获得数据库连接
Connection conn = DbManager.getConnection();
PreparedStatement preStmt = null;
try {
//创建预编译对象
preStmt = conn.prepareStatement(" "
+ " INSERT INTO tb_person ( name ) values (?) ");
preStmt.setString(1, person.getName());
//插入一条人员数据
preStmt.executeUpdate();
//分别插入爱好数据
for (String hobby : person.getHobby()) {
preStmt = conn.prepareStatement(" INSERT INTO tb_hoby "
+ " ( person_name, hoby ) " + " values (?, ?) ");
preStmt.setString(1, person.getName());
preStmt.setString(2, hobby);
//执行插入操作
preStmt.executeUpdate();
}
} catch (Exception e) {
preStmt.close();
conn.close();
}
}
通过以上代码可以看出,使用JDBC持久化Java对象时需要写大量的SQL语句,当数据表结构或者Java对象属性发生变化的时候,JDBC的缺点就更加明显了。