📄 basedao.java
字号:
/*
* @(#)BaseDAO.java Mar 25, 2009
* Copyright 2009 qrsx organization, Inc. All rights reserved
*/
package com.qrsx.asset.dao;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.beanutils.BeanUtils;
import com.qrsx.asset.model.Page;
/**
*
* Author : 马利永
* Company : qrsx software
* Version : 1.0<br>
* Date : Mar 25, 2009<br>
*/
public class BaseDAO {
protected Connection conn = null;
protected PreparedStatement ps = null;
public BaseDAO(){
try{
//conn = JdbcUtils.getCurrentConnection(true);
conn = JdbcUtils.getCurrentConnection();
}catch( Exception e ){
e.printStackTrace();
}
}
//set设置预备语句(二班方法)
public int exec(String sql, Object... params)throws Exception {// 后面有0个到多个object参数
int rows = 0;
PreparedStatement preparedStatement = conn
.prepareStatement(sql);
if (params.length > 0) {// 说明有参数
for (int i = 0; i < params.length; i++) {
preparedStatement.setObject(i + 1, params[i]);
}
}
rows = preparedStatement.executeUpdate();
preparedStatement.close();
return rows;
}
//设置预备语句,组装实体对象(二班方法)
@SuppressWarnings("unchecked")
public List exec(String sql, RowParser p, Object... params) throws Exception{
List list = new ArrayList();
PreparedStatement preparedStatement = conn.prepareStatement(sql);
if (params.length > 0) {// 说明有参数
for (int i = 0; i < params.length; i++) {
preparedStatement.setObject(i + 1, params[i]);
}
}
ResultSet rs = preparedStatement.executeQuery();
// rs中的每一行组装为一个对象
while (rs.next()) {
Object obj = p.parse(rs);// 只处理当前行
list.add(obj);
}
return list;
}
/**
* 结果集组装实体对象
* @param obj
* @param rs
* @return Object对象,增加通用性
* @throws Exception
*/
public void processResultset(Object obj,ResultSet rs)throws Exception{
Map map= new HashMap();
ResultSetMetaData rsmd =rs.getMetaData();
for(int i=1; i<=rsmd.getColumnCount();i++){
String columnName=rsmd.getColumnName(i);
map.put(columnName,rs.getObject(columnName));
}
BeanUtils.populate(obj,map);
}
/**
* 组装预备语句,方法一(要求 字段之间的","后必须加空格)
* @param obj
* @param ps
* @param sql
* @throws Exception
*/
public void processStatement(Object obj, PreparedStatement ps,String sql)throws Exception{
String[] str = null;
if(sql.matches("^.*Insert.*")){
String [] s=sql.split("\\(");
String string=s[1];
s=string.split("\\)");
string=s[0];
s=string.split("\\,");
str = s;
}else {
String [] s=sql.split("\\=");
for(int i=0;i<s.length-1;i++){
String string=s[i];
String[] s1=string.split(" ");
String string2= s1[s1.length-1];
s[i]=string2;
System.out.println(string2);
}
str = s;
}
//实例化一个Map集合
HashMap map = new HashMap();
map = (HashMap) BeanUtils.describe(obj);
ParameterMetaData rsmd = ps.getParameterMetaData();
for(int i=0; i<rsmd.getParameterCount();i++){
ps.setObject(i+1, map.get(str[i].trim()));
}
}
/**
* 组装预备语句,方法二
* @param obj
* @param ps
* @param sql
* @throws Exception
*/
public void processStatement1(Object obj, PreparedStatement ps,String sql)throws Exception{
Map map=new HashMap();
map=BeanUtils.describe(obj);
String regEx="[a-zA-Z\\d]+[ ]*=";
List list=new ArrayList();
char[] ma=sql.toCharArray();
//正则表达式
Pattern pattern=Pattern.compile(regEx);
Matcher m=pattern.matcher(sql);
while(m.find()){
System.out.println(m.start()+" "+m.end());//打印字符串其实与终止号,测试
String a="";
for(int i=m.start();i<m.end()-1;i++){
a+=ma[i]; //取出匹配的字符串
}
a=a.trim(); //清除可能夹杂的空格
list.add(a); //保存到list中
}
if(list.size()==0){
String regaa="[a-zA-Z\\d]+[ ]*[\\,\\)]";
Pattern pattern1=Pattern.compile(regaa);
Matcher m1=pattern1.matcher(sql);
while(m1.find()){
System.out.println(m1.start()+" "+m1.end());
String a="";
for(int i=m1.start();i<m1.end()-1;i++){
a+=ma[i];
}
a=a.trim();
list.add(a);
}
}
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));//打印测试结果值是否准确
System.out.println(map.get(list.get(i)));
ps.setObject(i+1, map.get(list.get(i)));
}
}
/**
* 功能:将结果集指针移动到指定记录前,组装Page对象
* @param page
* @param rs
* @param currentpage
* @throws Exception
*/
public void pageIndex (Page page, ResultSet rs,Integer currentpage)throws Exception{
rs.last(); //将记录指针移动到最后一条记录
int total=rs.getRow();//获取总记录数
//计算出总页数
int totalpage = ((total%page.getSize()==0)?(total/page.getSize()):(total/page.getSize()+1));
if(currentpage<1){
//如果由参数传递过来的当前页数值小于1,则将当前页数设置为1
currentpage=1;
}
//如果有参数传递过来的参数大于总页数,则将当前页数设为最后一页
if(currentpage>totalpage){
currentpage=totalpage;
}
//组装page对象
page.setCurrentpage(currentpage);
page.setTotal(total);
page.setTotalpage(totalpage);
if(currentpage==1){
rs.beforeFirst();
//将记录指针定位到待显示页的第一条记录前
}else{
rs.absolute((currentpage-1)*page.getSize());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -