您的位置:首页 > 数据库

黑马总结 三 : jdbc链接数据库

2011-03-21 19:26 363 查看
这个方面的总结,可能对于很多工作有5年以上的程序员来说,十分的没有必要。甚至一些刚刚工作的人也会这样的感觉。但是我觉得,还是有必要做个总结的。因为很多简单的程序是不会使用到各种持久层的框架的。hibernate 或者 ~~~~~各种包括每个公司内部的jdbchelper类也是一样的。

在jdbchelper类中需要使用到策论模式。然后还需要面向接口来进行编程,最后我们可以通过动态代理。来实现mvc层相互之间的代码侵入。

下面是一个基本jdbc实现,但是这样写代码有侵入。可以根据具体情况使用接口来编写。以后进一步完善

package cn.itcast.jdbc.dao.refactor;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import cn.itcast.jdbc.JdbcUtil;
import cn.itcast.jdbc.dao.exception.DaoException;

public abstract class AbstractDao {
//自己编写集体的jdbc操作数据库的时候,可以直接继承这个类。
public int update(String sql, Object... args) {
Connection conn = null;
PreparedStatement ps = null;
try {
//JdbcUtil.getConnection(),是一个数据源获取链接的方法。可以各种数据源,也可以自定义的数据源
conn = JdbcUtil.getConnection();
ps = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++)
ps.setObject(i + 1, args[i]);
return ps.executeUpdate();
} catch (SQLException e) {
throw new DaoException(e);
} finally {
JdbcUtil.release(null, ps, conn);
}
}

public Object query(String sql, Object... args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConnection();
ps = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++)
ps.setObject(i + 1, args[i]);
rs = ps.executeQuery();
if (rs.next())
return mapRow(rs);// 这里需要一个方法, 这个方法能将结果集转换成对象, 但这个方法还没想好怎么写.
return null;
} catch (SQLException e) {
throw new DaoException(e);
} finally {
JdbcUtil.release(rs, ps, conn);
}
}

public List queryForList(String sql, Object... args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConnection();
ps = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++)
ps.setObject(i + 1, args[i]);
rs = ps.executeQuery();
List<Object> list = new ArrayList<Object>();
while (rs.next())
list.add(mapRow(rs));
return list;
} catch (SQLException e) {
throw new DaoException(e);
} finally {
JdbcUtil.release(rs, ps, conn);
}
}
//這樣的方法,就是封裝特定對象的方法,具體哪個对象要根据情况来自己写
public abstract Object mapRow(ResultSet rs) throws SQLException;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: