采用数据库连接池,提供tomcat、weblogic等容器连接池接口,统一的DaoFactory管理,扩展开发容易
AbstractDao类说明:
数据操作类(tot.dao.AbstractDao),作为数据库操作的基础类,本系统中所有的数据库业务对象均扩展此类,通过其提供的一系统方法,
只要构造相应的sql查询语句就可以获取相应的记录对象。无需再写专门的处理程序。
以下函数为部分方法说明:
public Collection getData(String sqlStr,String fieldArr){}
函数说明:获取数据记录
参数:
* @paramsqlStr 用于查询数据库的标准sql语句
* @paramfieldArr 用于返回字段的名称映射
* @返回类型 Collection.
public Collection getDataList_mysqlLimit(String sqlStr,String fieldArr,int rowsNum, int offset){}
函数说明:数据显示分页函数,专用于mysql数据库
参数:
* @param sqlStr 数据库查询SQL语句.
* @param fieldArr 需要返回的字段.
* @param rowsNum 每页显示数据行数.
* @param offset 当前回溯位置.
* @返回类型 Collection.
public Collection getDataList_Limit_Normal(String sqlStr,String fieldArr,int rowsNum,int offset){}
函数说明:数据显示分页函数,适用于支持记录回滚的数据库。
参数:
* @param sqlStr 数据库查询SQL语句.
* @param fieldArr 需要返回的字段.
* @param rowsNum 每页显示数据行数.
* @param offset 当前回溯位置.
* @返回类型 Collection.
public DataField getFirstData(String sqlStr,String fieldArr){}
函数说明:据SQL语句查询获得第一条记录
参数:
* @param sqlStr SQL查询语句
* @param fieldArr 需要返回的字段名称
* @返回类型 DataFild
*/
public int getDataCount(String sqlStr){}
函数说明:获取记录个数,如:getDataCount("select count(*) from 表")
返回类型:int
public boolean exe(String sqlStr) throws ObjectNotFoundException,DatabaseException{}
函数说明:执行sql更新语句 如:exe("update table set field=1 where id=1")
返回类型:boolean
public void bat(String sqlStr,String[] fieldvalue){ }
函数说明:批量执行sql更新语句 如:bat("update table set field=1 where id=?",String对象)
备注:
以上函数中均包含sqlStr和fieldArr两个参数,他们分别是要执行的sql语句和要返回的字段名称,注意字段个数
要和你查询的字段字数相同比如:
sqlStr设置如下:"select id,Title,Content from t_article"
因为上面sql查询语句返回3个字段,因此fieldArr要设置如下:
"id,Title,Content",因为这三个字段是数据库bean中的字段设置、取值所用的字段名称,其名字是随意的,只要字段个数
与sqlStr查询语句中返回的字段个数一致就可以了。因此fieldArr你也以设置如:
"a1,a2,a3"
因此根据设置的bean字段名称不同,我们取字段值所采用的字段名称也是不同的。
如:
df.getFieldValue("id"),df.getFieldValue("Title")等是根据fieldArr="id,Title,Content"时的取值。
df.getFieldValue("a1"),df.getFieldValue("a2")等是根据fieldArr="a1,a2,a3"时的取值。
以下例子是一个完整的二次开发数据库类的例子(一个广告操作的数据库类):
package tot.dao.jdbc;
import tot.dao.AbstractDao;
import tot.db.DBUtils;
import tot.bean.*;
import tot.exception.ObjectNotFoundException;
import tot.exception.DatabaseException;
import java.sql.*;
import java.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
*
* @author tot
*/
public class AdDaoImplJDBC extends AbstractDao{
private static Log log = LogFactory.getLog(AdDaoImplJDBC.class);
/** Creates a new instance of AdDaoImplJDBC */
public AdDaoImplJDBC() {
}
/** 广告添加 */
public boolean add(String title,String content,Timestamp moditime){
Connection conn = null;
PreparedStatement ps = null;
boolean returnValue=true;
String sql="insert into t_ad(Title,Content,ModiTime) values(?,?,?)";
try{
conn = DBUtils.getConnection();
ps=conn.prepareStatement(sql);
ps.setString(1,title);
ps.setString(2,content);
ps.setTimestamp(3,moditime);
if(ps.executeUpdate()!=1) returnValue=false;
} catch(SQLException e){
log.error("add error",e);
} finally{
DBUtils.closePrepareStatement(ps);
DBUtils.closeConnection(conn);
}
return returnValue;
}
/*
* 广告修改
*/
public boolean mod(int id,String title,String content,Timestamp moditime){
Connection conn = null;
PreparedStatement ps = null;
boolean returnValue=true;
String sql="update t_ad set Title=?,Content=?,ModiTime=? where id=?";
try{
conn = DBUtils.getConnection();
ps=conn.prepareStatement(sql);
ps.setString(1,title);
ps.setString(2,content);
ps.setTimestamp(3,moditime);
ps.setInt(4,id);
if(ps.executeUpdate()!=1) returnValue=false;
} catch(SQLException e){
log.error("mod error",e);
} finally{
DBUtils.closePrepareStatement(ps);
DBUtils.closeConnection(conn);
}
return returnValue;
}
/* 广告删除 */
public boolean del(int id) throws ObjectNotFoundException,DatabaseException{
return exe("delete from t_ad where id="+id);
}
/*
* 广告分页调用
* @param currentpage 当前页数
* @param pagesize 每页记录数
*/
public Collection getAdList_Limit(int currentpage,int pagesize){
if(DBUtils.getDatabaseType() == DBUtils.DATABASE_MYSQL){
StringBuffer sql=new StringBuffer(512);
sql.append("select id,Title,ModiTime from t_ad");
return getDataList_mysqlLimit(sql.toString(),"id,Title,ModiTime",pagesize,(currentpage-1)*pagesize);
} else if (DBUtils.getDatabaseType() == DBUtils.DATABASE_SQLSERVER) {
StringBuffer sql=new StringBuffer(512);
sql.append("SELECT TOP ");
sql.append(pagesize);
sql.append(" id,Title,ModiTime FROM t_ad WHERE (id <=(SELECT MIN(id) FROM (SELECT TOP ");
sql.append((currentpage-1)*pagesize+1);
sql.append(" id FROM t_ad");
sql.append(" ORDER BY id DESC) AS t))");
sql.append(" ORDER BY id DESC");
return getData(sql.toString(),"id,Title,ModiTime");
} else{
StringBuffer sql=new StringBuffer(512);
sql.append("select id,Title,ModiTime from t_ad");
return getDataList_Limit_Normal(sql.toString(),"id,Title,ModiTime",pagesize,(currentpage-1)*pagesize);
}
}
/** 获取某一条广告记录 ,并以DataField类结果存放,读取时采用DataField.getFieldValue("字段名称")方法*/
public DataField getGuestBook(int id){
return getFirstData("select id,Title,ModiTime from t_ad where id="+id,"id,Title,ModiTime");
}
/*记录个数*/
public int getTotalCount(){
StringBuffer sql=new StringBuffer(512);
sql.append("select count(*) from t_ad");
return(this.getDataCount(sql.toString()));
}
}
常见的前台分页调用部分代码:
开始要import系统常用的包
<%@ page import="tot.exception.*"%>
<%@ page import="tot.util.*" %>
<%@ page import="tot.bean.*" %>
<%@ page import="tot.dao.DaoFactory" %>
..............
<%
int CurrentPage=RequestUtil.getInt(request,"page");//当前页数
int PageSize=20;//每页显示个数
TotalNum=DaoFactory.getAdDAO().getTotalCount(categoryid);//总记录个数
PageNum=(TotalNum-1+PageSize)/PageSize;//计算总页数
ArrayList list=(ArrayList)DaoFactory.getAdDAO().getAdList_Limit(CurrentPage,PageSize);//获取记录
for (Iterator iter = list.iterator(); iter.hasNext(); ) {//遍历记录
DataField df=(DataField)iter.next();//一行记录
String id=df.getFieldValue("id");//读取字段id
int AdType=Integer.parseInt(df.getFieldValue("AdType"));//读取字段AdType
}
%>