`
cntaizi
  • 浏览: 14878 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

自己写的Jdbc BaseDao 的简单封装

阅读更多

这是一个简单的jdbcBaseDao的封装。

自己写的。

面前能完成的一些功能,自己还算满意。正想搞个通用分页的。

坛子里找了下,发现有个可以,但是还是被人说出了很多缺点。。。。

所以,自己也有点信心不足了,特意发出来求虐!!!

希望大家把缺点说下,我改正!!谢谢

package com.demo.dao;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public  class BaseDao {
	/**
	 * 获得连接
	 * @return
	 * @throws Exception
	 */
	public Connection getConn()throws Exception{
		
		/*			-***********************-mysql数据库-************************/
		Class.forName("com.mysql.jdbc.Driver");
		String uri="jdbc:mysql://localhost:3306/test?&useUnicode=true&characterEncoding=UTF-8";
		return DriverManager.getConnection(uri,"root","123");
		
		
		/*		   -***********************sqlserver2005数据库-*******************
		Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
		String uri="jdbc:sqlserver://127.0.0.1:1433;DataBaseName=master";
		return DriverManager.getConnection(uri,"sa","123");*/
	}
	
	/**
	 * 关闭连接
	 * @param rs
	 * @param sm
	 * @param conn
	 */
	public void closeAll(ResultSet rs,Statement sm,Connection conn)throws Exception{
		if(rs!=null) rs.close();
		if(sm!=null) sm.close();
		if(conn!=null) conn.close();
	}
	
	/**
	 * 增加,删除,修改
	 * @param sql
	 * @param args
	 * @return
	 */
	public boolean executeUpdate(String sql,Object[] args){
		boolean flag=false;
		Connection conn=null;
		PreparedStatement sm=null;
		try {
			conn=this.getConn();
			sm=conn.prepareStatement(sql);
			if(conn != null){
				for (int i = 0; i < args.length; i++) {
					sm.setObject(i+1, args[i]);
				}
			}
			
			if(sm.executeUpdate() > 0){
				flag = true;
			}
		} catch (Exception e) {
			// TODO: handle exception
		}finally{
			try {
				this.closeAll(null, sm, conn);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return flag;
	}
	
	/**
	 * 查询方法
	 * @param sql
	 * @param args
	 * @return
	 */
	public List executeQuery(String sql,Object[] args,Class clazz){
		
		List list=new ArrayList();
		Connection conn = null;
		PreparedStatement sm = null;
		ResultSet rs = null;
		try {
			conn = this.getConn();
			sm = conn.prepareStatement(sql);
			if(args != null){
				for (int i = 0; i < args.length; i++) {
					sm.setObject(i+1, args[i]);
				}
			}
			rs=sm.executeQuery();
			while(rs.next()){
			//通过反射得到一个对象
				list.add(this.getObj(clazz, rs));
			}
			
			
		} catch (Exception e) {
			// TODO: handle exception
		}finally{
			try {
				this.closeAll(null, sm, conn);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return list;
	}

	public static Object getObj(Class clazz,ResultSet rs)throws Exception{
		//所有的属性
		Field[] field= clazz.getDeclaredFields();
		Object info= clazz.newInstance();
		for (int i = 0; i < field.length; i++) {
			String name=field[i].getName().toUpperCase();
			//得到方法名
				name="set"+name.charAt(0)+name.substring(1).toLowerCase();
			//得到类型
			Class  c=field[i].getType();
			//得到方法
		    Method method= clazz.getMethod(name, c);
		    //实现方法
		    method.invoke(info, rs.getObject(i+1));
		}
		return info;
	}
	

}
 



 

分享到:
评论
2 楼 cntaizi 2011-01-20  
chenjunxt 写道
public static Object getObj(Class clazz,ResultSet rs)throws Exception{   
        //所有的属性   
        Field[] field= clazz.getDeclaredFields();   
        Object info= clazz.newInstance();   
        for (int i = 0; i < field.length; i++) {   
            String name=field[i].getName().toUpperCase();   
            //得到方法名   
                name="set"+name.charAt(0)+name.substring(1).toLowerCase();   
            //得到类型   
            Class  c=field[i].getType();   
            //得到方法   
            Method method= clazz.getMethod(name, c);   
            //实现方法   
            method.invoke(info, rs.getObject(i+1));   
        }   
        return info;   
    }   


这个方法漏洞太多,属于偷懒型写法,仔细看看哦.

求解·

我以前只发现转型的时候出错。还有就是查找单个 字段的时候·

其他的还真没发现·水平有限·
1 楼 chenjunxt 2011-01-20  
public static Object getObj(Class clazz,ResultSet rs)throws Exception{   
        //所有的属性   
        Field[] field= clazz.getDeclaredFields();   
        Object info= clazz.newInstance();   
        for (int i = 0; i < field.length; i++) {   
            String name=field[i].getName().toUpperCase();   
            //得到方法名   
                name="set"+name.charAt(0)+name.substring(1).toLowerCase();   
            //得到类型   
            Class  c=field[i].getType();   
            //得到方法   
            Method method= clazz.getMethod(name, c);   
            //实现方法   
            method.invoke(info, rs.getObject(i+1));   
        }   
        return info;   
    }   


这个方法漏洞太多,属于偷懒型写法,仔细看看哦.

相关推荐

    基于SpringJDBC的BaseDAO

    本文将详细介绍如何基于Spring JDBC模块创建一个通用的数据访问对象(BaseDAO)类,实现简单的对象关系映射(ORM)功能,包括增删改查等基本操作。 #### Spring JDBC简介 Spring JDBC是Spring框架的一部分,它简化了...

    最全的javaJDBC--BaseDao

    最全的javaJDBC技术的BaseDao,相当于框架封装了,引用之后直接调用其中的方法传递参数以及sql语句就可以使用了。

    jdbcBaseDao

    `jdbcBaseDao` 是一个基于Java的数据库访问层基础类,它封装了JDBC(Java Database Connectivity)的一些常见操作,如增、删、改、查等,旨在简化数据库交互过程,提高代码的可读性和可维护性。对于初学者来说,理解...

    基于JDBC封装的BaseDao(实例代码)

    本篇文章将介绍一个基于JDBC封装的`BaseDao`实例,该实例提供了一个通用的DAO(Data Access Object)模板,可以应用于多种实体类的操作。 首先,`BaseDao`泛型类被定义为`&lt;T&gt;`,表示它可以处理任何类型的对象。类中...

    BaseDao的封装

    例如,一个简单的`BaseDao`可能包含如下方法: 1. `save(T entity)`: 保存实体对象到数据库。 2. `update(T entity)`: 更新指定实体对象的信息。 3. `deleteById(ID id)`: 根据主键ID删除对应的记录。 4. `findById...

    JDBC连接数据库BaseDao通用类(可以调用存储过程)

    ### JDBC与BaseDao通用类 #### JDBC(Java Database Connectivity) JDBC是一种用于执行SQL语句的Java API,它可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC定义了一系列的API,...

    spring4+hibernate4 封装BaseDao增删改查以及分页,,支持jdk1.7,不支持jdk1.8

    3. **BaseDao封装**:BaseDao是一般用于数据访问层的基类,它包含了通用的CRUD操作。在这个项目中,BaseDao可能已经定义了如`save()`, `update()`, `delete()`, `findById()`, `findAll()`等方法,以供其他特定的DAO...

    JDBC通用封装类

    本资源是对JDBC的封装,方便在项目中使用,其中BaseDao.java是对JDBC操作的封装,使用时让自己的Dao类继承即可,然后调用其中的executeQuery和executeOthe分别执行DQL和DML操作。dbinfo.properties属性文件存储基本...

    基于JDBC封装的BaseDao(实例代码).rar_java编程

    "基于JDBC封装的BaseDao实例"是一个常见的设计模式,用于简化数据库操作,提高代码复用性,降低耦合度。BaseDao通常作为基类,提供通用的数据库操作方法,比如增删查改(CRUD)等。 首先,我们需要了解JDBC的基本...

    BaseDao.java

    简单的JDBC封装类

    basedao_basedao数据库_

    例如,一个简单的基于JDBC的BaseDao实现可能如下: ```java public abstract class BaseDao&lt;T&gt; { private DataSource dataSource; public BaseDao(DataSource dataSource) { this.dataSource = dataSource; } ...

    封装过的jdbc包

    对jdbc简单封装,实现基本增删改查,使用时请用编译器导入继承BaseDao类即可

    封装jdbc,采用Map方式快速增删改数据库例子

    本文将深入探讨如何通过封装JDBC来提高数据库操作的效率,特别是使用Map数据结构实现快速的增删改操作。我们将以`BaseDao`类为例,位于项目的`util`包下。 首先,理解JDBC的基础知识是必要的。JDBC提供了一组接口和...

    Mybatis通用DAO设计封装(mybatis)

    Mybatis是一款轻量级的持久层框架,它避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。通过提供自定义SQL、存储过程以及高级映射,Mybatis使得开发者能够专注于编写高质量的代码,而无需关心底层数据库交互...

    精简封装Basedao.pdf

    `BaseDao`接口的实现类(如`BaseDaoImpl`)通常会处理实际的数据库交互逻辑,比如使用JDBC API来执行SQL语句,处理结果集,以及处理异常。此外,为了提高代码的可读性和可维护性,还可以考虑使用预编译的SQL语句...

    BaseDao.java,DaoUtil.java

    通过继承或实现`BaseDao`,其他具体的DAO类可以复用这些通用方法,减少代码重复,并保持良好的封装和单一职责原则。 例如,`BaseDao`可能包含以下方法: ```java public interface BaseDao&lt;T&gt; { void insert(T ...

    Spring声明式事务及BaseDao完整版

    3. **实现方式**:BaseDao通常基于JDBC或ORM框架(如Hibernate、MyBatis)实现,提供基本的SQL执行和结果映射功能。 4. **扩展性**:子类可以继承BaseDao,并根据业务需求添加特定的数据库操作方法。 四、Spring...

    java mysql baseDao

    总的来说,Java MySQL BaseDAO模式是Java开发中常用的一种设计模式,通过封装数据库连接和基本的SQL操作,降低了代码的复杂性,提高了开发效率。在使用时,需要结合实际的数据库结构和业务需求进行扩展和定制。

    baseDAO及其实现案例、jdbcUtil工具类、数据池c3p0、dbcp、druid驱动及实现方式

    首先,`BaseDAO`是一个设计模式,用于封装数据库的基本操作,如增、删、改、查。它的出现是为了减少代码的重复性,提高代码的可复用性和可维护性。`BaseDAO`通常会定义一些通用的方法,比如获取单个对象、获取集合、...

Global site tag (gtag.js) - Google Analytics