⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basedao.java

📁 固定资产管理系统 资产的增删改查 借出 管理 自动报废 统计功能等等
💻 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 + -