`
yun342173024
  • 浏览: 73831 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jdbc封装

    博客分类:
  • java
 
阅读更多
以前项目写的jdbc代码很烂,今天重新封装一下代码如下:
这个是主要用的类

  
 package com.own.db;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.own.util.ReflectHelper;

public class MyJdbcTemplate {
 
	/**
	 * 
	 * @param sql  传入的sql语句
	 * @param params 要设置的参数
	 * @return
	 */
	public int update(String sql,Object[] params){
		
		Connection con = null;
		PreparedStatement pst = null;
		int result = 0;
		
		try{
			con = DBHelper.getConnection();
			pst = con.prepareStatement(sql);
		    setValues(pst, params);
			result = pst.executeUpdate();
			
		}catch(SQLException e){
			e.printStackTrace();
		}finally{
			DBHelper.close(con, null,pst);
		}
		
		return result;
		
		
	}
	
	
	/** 
	 * 
	 * @param sql  传入sql语句
	 * @param pstSetter给参数赋值
	 * @return
	 */
	public int update(String sql,PreparedStatementSetter pstSetter)throws DataAccessException {
		
		Connection con = null;
		PreparedStatement pst = null;
		int result = 0;
		
		try{
			con = DBHelper.getConnection();
			pst = con.prepareStatement(sql);
		    pstSetter.setValues(pst);
			result = pst.executeUpdate();
			
		}catch(SQLException e){
			throw new DataAccessException(e.getMessage());
		}finally{
			DBHelper.close(con, null,pst);
		}
		
		return result;
		
	}
	
	public <T>  List<T> queryForList(String sql,Object[] params,RowMapper<T> rowMapper) throws DataAccessException{
		
		List<T> list = new ArrayList<T>();

		Connection con = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
	
		
		try{
			con = DBHelper.getConnection();
			pst = con.prepareStatement(sql);
		    setValues(pst,params);	
		    rs = pst.executeQuery();
		    if(rs != null){
		    	while(rs.next()){
		    	 T t =	rowMapper.rowMap(rs);
		    	 list.add(t);
		    	}
		    }
		 }catch(SQLException e){
			throw new DataAccessException(e.getMessage());
		}finally{
			DBHelper.close(con, null,pst);
		}
		
		
		
		return list;
		
	}


	private void setValues(PreparedStatement pst, Object[] params) throws SQLException {
		// TODO Auto-generated method stub
		
		if(params == null){
			throw new IllegalArgumentException("params 为空");
		}
		
		for(int i = 0;i < params.length;i++){
			pst.setObject(i + 1, params[i]);
		}
	}

	/** note that 调用这个方法时,数据库字段的名字要和对象的属性名字相同,否则会报错
	 * 
	 * @param <T>
	 * @param sql
	 * @param params
	 * @param myClass 
	 * @return
	 * @throws DataAccessException
	 */
	
	public <T>  List<T> queryForList(String sql,Object[] params,Class<T> myClass) throws DataAccessException{
		
		
		List<T> list = new ArrayList<T>();

		Connection con = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
	
		
		try{
			con = DBHelper.getConnection();
			pst = con.prepareStatement(sql);
		    setValues(pst,params);	
		    rs = pst.executeQuery();
		    if(rs != null){
		    	while(rs.next()){
		    		T t = ReflectHelper.setproperties(myClass, rs);
		    		list.add(t);
		    	}
		    }
		 }catch(SQLException e){
			throw new DataAccessException(e.getMessage());
		}finally{
			DBHelper.close(con, null,pst);
		}
		
		
		
		return list;
		
		
		
	}
	
	
	
	
	
	
}




数据库帮助类

  package com.own.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.own.config.DBConfig;
import com.own.util.LoadDBConfig;

public class DBHelper {
 
	public static DBConfig dbConfig = LoadDBConfig.getDBConfig();
	
	
	public static Connection  getConnection() throws SQLException{
		
		
		 Connection con = null;
		 
		 try {
			Class.forName(dbConfig.getDriverClassName());
			con = DriverManager.getConnection(dbConfig.getUrl(),dbConfig.getUsername(),dbConfig.getPassword()
					);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (SQLException e) {
			// TODO Auto-generated catch block
			
		}
		
		return con;
	}
	
	
	public static void close(Connection con,ResultSet rs ,Statement smt){
		
		if(con != null){
	         try {
				con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}		
		}
		
		
		if(smt != null){
	         try {
				smt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}		
		}
		
		
		if(rs != null){
	         try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}		
		}
		
	}
	
}




用来给PreparedStatement 设置参数的借口,有具体的类去实现
  package com.own.db;

import java.sql.PreparedStatement;

public interface PreparedStatementSetter {
  
	void setValues(PreparedStatement pst); 
	
}



把数据中的一行数据映射到一个对象,同样是一个接口,有具体的dao类实现

    package com.own.db;

import java.sql.ResultSet;

public interface RowMapper<T> {
  
	T rowMap(ResultSet rs);
}





自定义一个异常类

  package com.own.db;

@SuppressWarnings("serial")
public class DataAccessException extends Exception {
   
	public DataAccessException(String message){
		super(message);
	}
	
}



用来读数据库配置文件的类
package com.own.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import com.own.config.DBConfig;

public class LoadDBConfig {
  
	private static Properties p = new Properties();
	
	static{
		InputStream is = LoadDBConfig.class.getClassLoader().getResourceAsStream("dbConfig.properties");
		try {
			p.load(is);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	public static DBConfig  getDBConfig(){
		
		DBConfig dbConfig = new DBConfig();
		dbConfig.setPassword(p.getProperty("password"));
		dbConfig.setUsername(p.getProperty("username"));
		dbConfig.setUrl(p.getProperty("url"));
		dbConfig.setDriverClassName(p.getProperty("driverClassName"));
		return dbConfig;
	}
	
}



反射操作辅助类

  package com.own.util;

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ReflectHelper {
  
	public  static <T>  T setproperties(Class<T> myClass,ResultSet rs){
		T t = null; 
		try {
			t = myClass.newInstance();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		Field[] fields = myClass.getDeclaredFields(); 
	    
		for(Field field : fields){
			String methodName = field.getName();
			field.setAccessible(true);
			try {
				field.set(t,rs.getObject(methodName));
				
			} catch (IllegalArgumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
		return t;
	}
	
	
	
	
}




以前每个dao都要用try catch 现在好了,只写一次就可以了
分享到:
评论

相关推荐

    JDBC封装的工具类

    JDBC封装的工具类,将所有共同的代码提取过来,形成工具类

    jdbc封装(实现对实体的增删改查[分页]).zip

    jdbc封装(实现对实体的增删改查[分页]),辅助学习Hibernate 包含三个文件夹,分别是: code-access实现 是用access实现的,本意是access方便,就一个文件,方便部署。但access有好多不支持,就写成这样.主要是可参考Dao...

    JDBC封装步骤

    文档脉络清楚的详述了实现JDBC封装所需要进行的步骤。

    JDBC封装类

    标题:JDBC封装类 描述:此文章将详细介绍一个用于简化Java中JDBC操作的封装类,该类通过提供一系列方法来加速数据库编程任务,包括建立数据库连接、执行查询、处理结果集以及执行更新操作。 ### 一、JDBC封装类...

    jdbc封装工具类

    jdbc封装工具类,此类事封装成list,Object&gt;&gt;格式,可直接把转换为jsonArray格式传输数据。

    jdbc封装包

    【标题】:JDBC封装包 【描述】:JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。这个封装包是我个人制作的,旨在简化...

    JDBC封装.rar

    "JDBC封装"是指将常见的数据库操作,如增删改查(CRUD:Create, Read, Update, Delete),进行模块化和抽象化的过程,以便于在代码中重复使用和简化数据库交互。下面将详细介绍JDBC封装的原理、步骤以及它带来的好处...

    JDBC封装类升级版,支持DBCP、C3P0连接池,Java连接数据库带例子

    Java JDBC封装类升级版,带增删改查例子,支持oracle,MySql,hsqldb 等,支持事务,返回数据格式 支持二维数组,MAP格式,以及javabean对象。有利于初学者DbDemo.java为demo,Connect为jdbc封装类,可以作为项目共通类...

    自己写个JDBC封装

    **标题:“自己写个JDBC封装”** 在Java开发中,JDBC(Java Database Connectivity)是连接Java应用程序和关系数据库的标准接口。然而,原始的JDBC API使用起来相对繁琐,需要编写大量的重复代码,例如建立数据库...

    java增删改查JDBC封装类(泛型封装)

    "java增删改查JDBC封装类(泛型封装)"这个主题是关于如何利用泛型来优化JDBC操作,以提高代码的可读性、安全性和复用性。以下将详细讲解这个主题涉及的知识点。 1. **JDBC基础**: - JDBC是Java中连接数据库的标准...

    jdbc-utils.rar_Utils_jdbc_jdbc封装

    "jdbc-utils.rar_Utils_jdbc_jdbc封装"这个压缩包提供了一些工具类,用于简化JDBC操作,提高代码的可读性和可维护性。下面我们将详细探讨JDBC封装处理类的原理和实现。 1. **JDBC基础** - JDBC API包括一组Java...

    Scala的JDBC封装包Scweery.zip

    Scweery 是 Scala 一个封装了 JDBC 操作用来从 SQL 中创建 Scala 对象的工具包。 示例代码: using(petsDB) { connection =&gt; val findHogsQuery = "select name, gender from pets where family='erinaceidae' ...

    DB.rar_jdbc封装

    本压缩包“DB.rar_jdbc封装”显然是一个关于如何使用Java JDBC进行数据库连接封装的示例或教程。下面我们将详细探讨JDBC以及如何进行封装。 首先,JDBC是Java平台上的一个接口,它允许Java应用程序与各种数据库进行...

    原创的JDBC封装可支持各种数据库

    在实际应用中,这些步骤往往重复且繁琐,因此进行JDBC封装是提高代码复用性和减少错误的有效方式。 1. **加载驱动**: 在Java程序中,我们需要通过Class.forName()方法加载对应的数据库驱动。封装时,我们可以将...

    类似hibernate的jdbc封装

    标题提到的"类似hibernate的jdbc封装"就是这样的一个实践,它试图在不引入庞大框架的情况下,提供类似Hibernate的便捷性。 首先,我们来了解JDBC(Java Database Connectivity),它是Java中用于连接数据库的标准...

    Java连接数据库 JDBC封装类 带使用例子

    Java JDBC封装类,带增删改查例子,支持oracle,MySql,hsqldb 等,支持事务,返回数据格式 支持二维数组,MAP格式,以及javabean对象。有利于初学者DbDemo.java为demo,Connect为jdbc封装类,可以作为项目共通类使用。

    自己封装的小框架--JDBC封装 Action层封装 手动事务管理

    本项目中,"自己封装的小框架--JDBC封装 Action层封装 手动事务管理"是一个实用的实践案例,旨在提高开发效率,优化代码结构,并确保数据操作的完整性。下面我们将深入探讨这个框架中的主要组成部分及其相关知识点。...

    java注解、java反射机制 jdbc 封装

    在JDBC封装中,反射非常有用,因为它允许在运行时创建和执行SQL语句,而不必在代码中硬编码具体的数据库操作。例如,你可以使用反射来获取类的字段信息,然后动态生成对应的SET和WHERE子句,以此实现通用的CRUD...

    jdbc 封装例子 servlet

    总之,JDBC封装是Java Web开发中的常见实践,它提高了代码的可读性和可维护性,减少了错误发生的可能性。在实际项目中,我们还应该结合使用数据库连接池、DAO模式以及事务管理等技术,以实现更高效、安全的数据库...

Global site tag (gtag.js) - Google Analytics