`
23号
  • 浏览: 136839 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

My DAL Util Class

    博客分类:
  • Java
阅读更多
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.RowSet;
import javax.sql.rowset.CachedRowSet;

import com.sun.rowset.CachedRowSetImpl;

public class DALUtils {
	/*
	 * Data Access Layer Util Class.
	 */
	public static RowSet query(Connection conn, String sql) {		
		try {
			ResultSet rset = null;
			Statement stmt = conn.createStatement();
			rset = stmt.executeQuery(sql);
			CachedRowSet crs = new CachedRowSetImpl();
			crs.populate(rset);
			stmt.close();
			return crs;
		} catch (SQLException ex) {ex.printStackTrace();}
		return null;
	}
	
	public static int exec(Connection conn, String sql) {		
		try {
			int rt = 0;
			Statement stmt = conn.createStatement();
			rt = stmt.executeUpdate(sql);
			stmt.close();
			return rt;
		} catch (SQLException ex) {ex.printStackTrace();}
		return 0;
	}

	public static List<Object> resultSetToList(ResultSet rs, String className) {
		List<Object> list = new ArrayList<Object>();
		try {
			ResultSetMetaData meta = rs.getMetaData();  
			Object obj = null;  
			while (rs.next()) {  
				obj = Class.forName(className).newInstance();  
			    for(int i = 1; i <= meta.getColumnCount(); i++)  {  
			        String colName = meta.getColumnName(i);
			        String methodName = "set" + new String(colName.charAt(0)+"").toUpperCase() + colName.substring(1);
			        Object value = rs.getObject(i);  
			        Method method = obj.getClass().getMethod(methodName, value.getClass());  
			        method.invoke(obj, value);  
			    }  
			    list.add(obj);  
			}  
		} catch(Exception ex) {ex.printStackTrace();}
		return list;
	}
	
	public static List<Map<String, Object>> resultSetToList(ResultSet rset) {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		
		try {
			ResultSetMetaData meta = rset.getMetaData();  
			while (rset.next()) {  
				Map<String, Object> m = new HashMap<String, Object>();  
			    for(int i = 1; i <= meta.getColumnCount(); i++)			    	
			        m.put(meta.getColumnName(i), rset.getObject(i));
			    list.add(m);  
			}  
		} catch(SQLException ex) {ex.printStackTrace();}
		return list;
	}
	
	public static List<String> getColumnLabelList(ResultSet rset) {
		List<String> list = new ArrayList<String>();
		try {
			ResultSetMetaData meta = rset.getMetaData();  
			for (int i = 1; i <= meta.getColumnCount(); i++) 
				list.add(meta.getColumnLabel(i));
		} catch(SQLException ex) {ex.printStackTrace();}
		return list;
	}
	
	public static int getTableMaxCount(Connection conn, String tableName) {
		
		int cnt = 0;
		String sql = "select count(*) from " + tableName;
		try {
			Statement stmt = null;
			stmt = conn.createStatement();
			ResultSet rset = stmt.executeQuery(sql);
            while(rset.next()) {
                cnt = rset.getInt(1);
            }
            stmt.close();
		} catch (SQLException ex) {ex.printStackTrace(); } 
		return cnt;
	}
	
	public static Map<String, Integer> getPagerData(Connection conn, String tableName, int pageSize, int pageCnt) {
		int maxCnt = getTableMaxCount(conn, tableName);
		int totalPageCnt = (maxCnt + pageSize -1) / pageSize;
//		int pageCnt = 1;
//		if (page != null && page.length() > 0) pageCnt = Integer.valueOf(page);
		if (pageCnt > totalPageCnt) pageCnt = totalPageCnt;
		if (pageCnt <= 0) pageCnt = 1;
		int offset = (pageCnt -1) * pageSize;
		
		Map<String, Integer> m = new HashMap<String, Integer>();
		m.put("maxCnt", maxCnt);
		m.put("pageCnt", pageCnt);
		m.put("totalPageCnt", totalPageCnt);
		m.put("offset", offset);
		m.put("pageSize", pageSize);
		return m;
	}
	
	public static String getTableData(Connection conn, String sql) {
		/*
		 *  return table head and body
		 */
		StringBuffer sb = new StringBuffer();
		if (sql.toUpperCase().contains("SELECT"))
			sql = "select * from (" + sql + ") a limit 0, 1000";
		
		RowSet rs = query(conn, sql);
		sb.append("<thead>");
		sb.append("<tr>");
		List<String> LabelList = getColumnLabelList(rs);
		for (String s: LabelList) {
			sb.append("<th>");
			sb.append(s);
			sb.append("</th>");
		}
		sb.append("</tr>");
		sb.append("</thead>");
		
		List<Map<String, Object>> dataList = resultSetToList(rs);
		sb.append("<tbody>");		
		for(Map<String, Object> m: dataList) {
			sb.append("<tr>");
			for (String s: LabelList) {
				sb.append("<td>");
				sb.append(m.get(s).toString());
				sb.append("&nbsp;</td>");
			}
			sb.append("</tr>");
		}
		sb.append("<tbody>");
		
		return sb.toString();
	}
	
	public static String getTableData(Connection conn, String tableName, Map<String, Integer> pagerData) {
		int offset = pagerData.get("offset");
		int pageSize = pagerData.get("pageSize");	
		String sql = "select * from " + tableName + " limit " + offset + ", " + pageSize;
		
		return getTableData(conn, sql);
	}
	
	public static void main(String args[]) {
		Connection conn = null;
		RowSet rs = query(conn, "select * from plantMapping");
		resultSetToList(rs, "");
	}
	
}

 

各位给评一下?

2
0
分享到:
评论
2 楼 23号 2009-03-30  
1. 我觉得传className比较好,如果传进来的是Object,要修改Object的值感觉不好。
2. 是的,直接用Connection,所有的方法都是static的。
1 楼 ukinglli 2009-03-30  
写的很好. 两点建议:
1.resultSetToList 的想法很好,但是方法写的不太优雅,手动加set前缀看起来有点难过,不过倒是很直白,反射里面有方法可以直接取到一个属性的setter. 而且与其费劲的Class.forName(className) 还不如直接传递一个Class的参数进来...

2.这util没有连接池......

相关推荐

    本软件可根据表字段,生成Model层的Class.及DAL,BLL.还可以生成文件.

    标题中的“本软件可根据表字段,生成Model层的Class.及DAL,BLL.还可以生成文件”指的是一个自动化代码生成工具,这种工具在IT行业中通常用于提高开发效率,尤其是在基于数据库驱动的应用程序开发中。让我们详细了解...

    DAL.zip_E9A_SQLHelper_dal库_dbhelper_oracle

    《ASP.NET程序与Oracle数据库交互:SQLHelper与DAL库的深度解析》 在现代Web应用程序开发中,数据库的高效管理是至关重要的。本资源“DAL.zip_E9A_SQLHelper_dal库_dbhelper_oracle”提供了一种针对Oracle数据库的...

    通用Bll 通用Dal

    在.NET框架中,通用BLL(Business Logic Layer)和通用DAL(Data Access Layer)是软件设计模式中的重要组成部分,它们是构建可复用、可扩展的业务应用的基础。本项目利用.NET的反射功能,实现了BLL和DAL层的通用化...

    Linq to sql DAL通用操作类

    Linq to sql DAL通用操作类 使用方便,不必每个表都写一个DAL

    C#DAL代码生成器

    **C# DAL(数据访问层)代码生成器** 在软件开发中,数据访问层(DAL)是应用程序架构的重要组成部分,负责处理与数据库的交互。它为业务逻辑层提供了一个抽象接口,屏蔽了底层数据存储的具体细节。手动编写DAL层...

    后台存储过程及DAL代码模板

    在IT行业中,数据库管理和数据访问层(DAL)的设计是系统架构中的重要组成部分。本文将深入探讨后台存储过程和DAL代码模板的相关知识点。 首先,我们来理解什么是存储过程。存储过程是预编译的SQL语句集合,存储在...

    C# 生成多种DAL层次代码

    在IT行业中,DAL(Data Access Layer,数据访问层)是应用程序与数据库交互的关键部分,它封装了所有关于数据库操作的代码,确保业务逻辑与数据存储的分离,提高代码的可维护性和可重用性。本资源"**C# 生成多种DAL...

    代码自动生成器 本软件可根据表字段,生成Model层的Class.及DAL,BLL.还可以生成文件.

    本软件可根据表字段,生成Model层的Class.及DAL,BLL.还可以生成文件.

    DAL.rar_DAL

    数据访问层(DAL)是软件开发中的一个关键组件,主要负责与数据库进行交互,处理数据的读取、写入和更新等操作。在C#编程中,构建一个高效且易于维护的数据访问层对于任何应用程序都是至关重要的。在这个名为"DAL....

    java 通用数据访问层dal

    java dal 封装的通用dao 数据访问层,如果你不喜欢用Hibernate、Mybaits这类ORM框架,喜欢Spring JdbcTemplate或DbUtils,那么可以试试这个封装的通用dal

    生成C#中的Model,BLL,DAL文件

    本工具正是针对这种架构,帮助开发者快速生成C#代码中的关键组件:Model、BLL和DAL。 **Model层**(模型层)是业务对象的定义,包含了应用程序中使用的数据结构和实体。在C#中,Model通常包含一系列的类,这些类...

    自动生成DAL. 和Model层的代码工具,源码,CodeGen

    《CodeGen:自动生成DAL与Model层代码的利器》 在软件开发过程中,数据访问层(DAL)和模型层(Model)的代码编写是一项基础且耗时的工作。为提高开发效率,许多开发者会采用代码生成工具,例如我们今天讨论的...

    携程开源DAL代码生成器

    携程开源DAL框架 Ctrip DAL支持流行的分库分表操作,支持Java和C#,支持Mysql和MS SqlServer。使用该框架可以在有效地保护企业已有数据库投资的同时,迅速,可靠的为企业提供数据库访问层的横向扩展能力。整个框架...

    CodeSmith Dal、Model模版

    CodeSmith是一款强大的代码生成工具,尤其在快速构建数据访问层(DAL)和模型(Model)时,能够极大地提高开发效率。这款工具通过使用模板语言,允许开发者自定义生成的代码结构,适应各种项目需求。 首先,让我们...

    三层架构入门讲解(c#)UIL、BLL、DAL

    ### 三层架构入门讲解(C#):UIL、BLL、DAL #### 一、什么是三层架构? 在软件开发领域,三层架构是一种常见的设计模式,它将应用程序分为三个不同的层次,每个层次负责不同的任务,从而使得整个系统更加模块化、...

    很有用的DAL文件(C#方面的)

    在IT行业中,DAL,全称为Data Access Layer,是软件架构中的一个重要组成部分,主要负责处理应用程序与数据库之间的数据交互。在C#编程环境下,构建一个高效、可维护的DAL层是提高软件质量的关键步骤之一。本资源...

    携程数据库访问框架dal

    dal-client-2.0.13-release javax.servlet-3.0.0.v201103241009.jar mssql-jdbc-6.4.0.jre7.ctrip.jar 合集

    Model/BLL/DAL 三层小例子

    它将应用程序分为三个主要的逻辑层次:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer),简称MVC(Model-View-Controller)中的M、BLL和DAL。这个“Model/BLL/...

    DAL层(三层架构中的)

    在这种架构中,DAL(Data Access Layer,数据访问层)是核心组件之一,它负责处理所有与数据库相关的操作。下面将详细探讨DAL层、三层架构以及与数据库的交互。 **数据访问层(DAL)** DAL是三层架构中的一层,主要...

    数据访问层DAL设计框架_Demo.rar

    数据访问层(Data Access Layer, DAL)是软件架构中的一个重要组成部分,主要负责处理应用程序与数据库之间的交互。在C#编程中,设计一个高效且可扩展的DAL框架对于任何基于数据库的应用程序都至关重要。本框架...

Global site tag (gtag.js) - Google Analytics