Java回调机制,利用回调写的JDBC访问例子(二)

2014-11-24 01:45:28 · 作者: · 浏览: 1
lose();

}catch(Exception e){

e.printStackTrace();

}

}

}

}

这个Template定义了2个方法, excute用来执行增加,修改,删除等,query用来执行查询,在这2个方法里,封装参数,封装result都不确定,所以用了上面定义的回调函数来实行,具体实现交给具体的实现类去做.(MessageProperties 是我写的一个资源引用类,可以参考我的另一篇blog:利用多例模式编写配置文件读取器)

下面我们看看具体的实现,

BaseDAO里实例化一个jdbcCallbackTemplate

Java代码

package com.balance.easycalendar.dao;

import com.balance.easycalendar.dao.template.JdbcCallbackTemplate;

import com.balance.easycalendar.util.MessageProperties;

public abstract class BaseDAO {

protected JdbcCallbackTemplate jdbcCallbackTemplate = new JdbcCallbackTemplate();

public String getSql(String sqlId){

MessageProperties pro = MessageProperties.getInstance("sqls.properties");

return pro.getValue(sqlId);

}

}

定义一个TaskDAO,用来执行具体的数据库访问.首先给jdbcCallbackTemplate注入实例化的JdbcCallback(实现具体的回调函数),然后就可以调用Template里的query和excute方法了.

Java代码

package com.balance.easycalendar.dao;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import com.balance.easycalendar.dao.exception.DAOException;

import com.balance.easycalendar.dao.template.JdbcCallback;

import com.balance.easycalendar.dao.template.JdbcCallbackAdapter;

import com.balance.easycalendar.to.BaseTO;

import com.balance.easycalendar.to.TaskTO;

public class TaskDAO extends BaseDAO{

public TaskTO getTask(final String taskId) throws DAOException {

jdbcCallbackTemplate.setTemp(new JdbcCallback(){

@Override

public void packParams(PreparedStatement stmt) throws SQLException {

stmt.setString(1, taskId);

}

@Override

public List packResult(ResultSet rs) throws SQLException {

List tasks = new ArrayList();

while (rs.next()) {

TaskTO taskTO = new TaskTO();

taskTO.setTaskId(rs.getString("TASK_ID"));

taskTO.setTaskName(rs.getString("TASK_NAME"));

taskTO.setTaskDesc(rs.getString("TASK_DESC"));

tasks.add(taskTO);

}

return tasks;

}

});

List tasks = jdbcCallbackTemplate.query(getSql("task.search.bytaskid"));

return (TaskTO)tasks.get(0);

}

public boolean insertTask(final String taskId, final String taskName, final String taskDesc) throws DAOException {

jdbcCallbackTemplate.setTemp(new JdbcCallbackAdapter(){

@Override

public void packParams(PreparedStatement stmt) throws SQLException {

stmt.setString(1, taskId);

stmt.setString(2, taskName);

stmt.setString(3, taskDesc);

}

});

return jdbcCallbackTemplate.excute(getSql("task.insert"));

}

public boolean delTask(final String taskId) throws DAOException {

j