万能的JDBC工具类。通过反射机制直接简单处理数据库操作

通过学习其它大神的经验,从而自己研究这套代码,感谢那些分享知识的大神,因此我也将自己整理的内容贡献出来,以供大家共同进步。谢谢。
这两个类,可以做好后直接生成一个jar文件,从而下次项目直接导入jar文件就可以调用了。
MyJDBC.properties 这个文件放在项目文件的src文件下,里面的配置内容如下:
conURL=jdbc:sqlserver://192.168.1.1:1433;databaseName=数据库名称
cname=com.microsoft.sqlserver.jdbc.SQLServerDriver
dbA=登录名
dbpassword=密码

其他的数据库也是一样的配置,只需要更改上面的配置信息就行了。

package com.YY.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class BaseConnection {
	private static String conURL = "";
	private static String cname = "";

	private static String dbA = "";
	private static String dbpassword = "";

	static
	{
		try {
			//获取外部配置的数据库链接信息
			InputStream ips =BaseConnection.class.getClassLoader().getResourceAsStream("MyJDBC.properties");
			Properties props = new Properties();
			try {
				props.load(ips);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				ips.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			conURL = props.getProperty("conURL");
			cname =	props.getProperty("cname");
			dbA = props.getProperty("dbA");
			dbpassword = props.getProperty("dbpassword");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//
	public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName(cname);
            conn = DriverManager.getConnection(conURL, dbA, dbpassword);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
	public static void closeRes(Connection conn, PreparedStatement ps){
		try {
			if ( conn != null ) {
				conn.close();
			}

			if ( ps != null ) {
				ps.close();
			}
		} catch ( Exception e ) {
			e.printStackTrace();
		}
	}
	public static void closeRes(Connection conn, PreparedStatement ps,ResultSet rs){
		try {
			if ( conn != null ) {
				conn.close();
			}

			if ( ps != null ) {
				ps.close();
			}

			if ( rs != null ) {
				rs.close();
			}
		} catch ( Exception e ) {
			e.printStackTrace();
		}
	}

}

package com.YY.util;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

public class BaseDAO {

	//万能的获取全部内容
	public static ArrayList getList(Class c1){
		ArrayList ar = new ArrayList();
		Connection conn = BaseConnection.getConnection();
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = "Select * from "+ c1.getSimpleName();
		Field[] fi = c1.getDeclaredFields();
		try{
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			while(rs.next()){
				Object ob = c1.newInstance();//实例化类对象
				for(Field ff :fi){
					ff.setAccessible(true);
					ff.set(ob, rs.getObject(ff.getName()));
				}
				ar.add(ob);
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			BaseConnection.closeRes(conn, ps, rs);
		}
		return ar;
	}

	//万能的获取ID主键的一条数据。
	public static Object getObById(Class c1,int id){
		Object ob = null;
		Connection conn = BaseConnection.getConnection();
		PreparedStatement ps = null;
		ResultSet rs = null;
		Field[] fi = c1.getDeclaredFields();
		String sql = "Select * from "+ c1.getSimpleName()+" where "+ fi[0].getName()+" = "+id;
		try{
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			while(rs.next()){
				ob = c1.newInstance();//实例化类对象
				for(Field ff :fi){
					ff.setAccessible(true);
					ff.set(ob, rs.getObject(ff.getName()));
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			BaseConnection.closeRes(conn, ps, rs);
		}
		return ob;
	}

	//万能的获取Where 条件后 的数据。
	public static ArrayList getList(Class c1,String whereSql){
		ArrayList ar = new ArrayList();
		Connection conn = BaseConnection.getConnection();
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = "Select * from "+ c1.getSimpleName() +" "+ whereSql;
		Field[] fi = c1.getDeclaredFields();
		try{
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			while(rs.next()){
				Object ob = c1.newInstance();//实例化类对象
				for(Field ff :fi){
					ff.setAccessible(true);
					ff.set(ob, rs.getObject(ff.getName()));
				}
				ar.add(ob);
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			BaseConnection.closeRes(conn, ps, rs);
		}
		return ar;
	}

	//插入的万能方法。
	public static boolean Insert(Object ob){
		boolean f = false;
		Connection conn = BaseConnection.getConnection();
		PreparedStatement ps = null;
		Class c1 = ob.getClass();
		Field[] fi = c1.getDeclaredFields();
		StringBuffer Sql = new StringBuffer();
		StringBuffer Sql1 = new StringBuffer();
		Sql.append("insert into ").append(c1.getSimpleName()).append(" (");
		for(int i =1 ;i<fi.length;i++){
			fi[i].setAccessible(true);
			Sql.append(fi[i].getName());
			Sql1.append("?");
			if(i!= fi.length -1){
				Sql.append(",");
				Sql1.append(",");
			}
		}
		Sql.append(") ").append("values (").append(Sql1).append(");");
		try{
			System.out.println(Sql.toString());
			ps = conn.prepareStatement(Sql.toString());
			for(int i =1;i<fi.length;i++){
				fi[i].setAccessible(true);
				ps.setObject(i, fi[i].get(ob));
			}
			int a = ps.executeUpdate();
			if(a>0){
				f = true;
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			BaseConnection.closeRes(conn, ps);
		}
		return f;
	}

	//万能更新
	public static boolean update(Object ob){
		boolean b = false;
		Connection conn = BaseConnection.getConnection();
		PreparedStatement ps = null;
		Class c1 = ob.getClass();
		Field[] fi = c1.getDeclaredFields();
		StringBuffer sb = new StringBuffer();
		sb.append("update ").append(c1.getSimpleName()).append(" set ");
		for(int i = 1; i<fi.length;i++){
			sb.append(fi[i].getName());
			sb.append(" = ? ");
			if(i!= fi.length -1){
				sb.append(" , ");
			}
		}
		sb.append(" where ");
		sb.append(fi[0].getName()).append(" =?");
		try{
			System.out.println(sb.toString());
			ps = conn.prepareStatement(sb.toString());
			for(int i=1;i<fi.length ; i++){
				fi[i].setAccessible(true);
				ps.setObject(i, fi[i].get(ob));
			}
			fi[0].setAccessible(true);
			ps.setObject(fi.length, fi[0].get(ob));
			int a = ps.executeUpdate();
			if(a>0){
				b=true;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		return b;
	}

	//万能删除
	public static boolean delete(Class c1 ,int id){
		boolean b = false;
		Connection conn = BaseConnection.getConnection();
		PreparedStatement ps = null;
		Field[] fi = c1.getDeclaredFields();
		String Sql = "Delete from "+c1.getSimpleName()+" Where "+fi[0].getName()+" = ?";
		try{
			ps = conn.prepareStatement(Sql);
			ps.setObject(1, id);
			int a = ps.executeUpdate();
			if(a>0){
				b=true;
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			BaseConnection.closeRes(conn, ps);
		}
		return b;
	}

	//万能删除
	public static boolean delete(Class c1 ,String WhereSql){
		boolean b = false;
		Connection conn = BaseConnection.getConnection();
		PreparedStatement ps = null;
		Field[] fi = c1.getDeclaredFields();
		String Sql = "Delete from "+c1.getSimpleName()+" "+WhereSql;
		try{
			ps = conn.prepareStatement(Sql);
			int a = ps.executeUpdate();
			if(a>0){
				b=true;
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			BaseConnection.closeRes(conn, ps);
		}
		return b;
	}

}



时间: 2024-09-29 18:00:53

万能的JDBC工具类。通过反射机制直接简单处理数据库操作的相关文章

JDBC工具类

在java中经常会用到JDBC工具类去连接数据库,今天说一下JDBC工具类 package com.test.util; //该工具类所在包的包名 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement

开源JDBC工具类DbUtils

本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUtils,而在这过程中很多都是借鉴和参考了DbUtils的代码,因此通过上一篇的学习,会让我们在对DbUtils进行更快速简单的认识. 俗话说学习一个开源的工具最好的方法就是看其官方文档,是的,在Apache官网中对DbUtils进行了详细的介绍:http://commons.apache.org/pr

DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据库资源中间. DAO模式实际上是两个模式的组合,即Data Accessor (数据访问者)模式和 Active Domain Object(领域对象)模式.Data Accessor 模式实现了数据访问和业务逻辑的分离:Active Domain Object 模式实现了业务数据的对象化封装. 需要注意的是,DAO设计模式是Java EE中的设计模式,而非Ja

MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

首先需要回顾一下上一篇文章中的内容:MySQL数据库学习笔记(九)----JDBC的PreparedStatement接口重构增删改查 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit.Rollback命令进行事务的提交与回滚.实际上在JDBC中也存在事务处理,如果要想进行事务处理的话,则必须按照以下的步骤完成. JDBC中事务处理的步骤: 1.要取消掉JDBC的自动提交:void setAutoCommit(boolea

java工厂类与反射机制

java 简单工厂类 2012-04-22 15:44:07|  分类: java |  标签:java工厂类  简单工厂类  |举报|字号 订阅 简单工厂模式需要由以下角色组成: 接口                        接口的实现类(简单工厂模式里面的具体产品角色)                        工厂注意对比以下三个实例的不同实例1: package org.jzkangta.factorydemo01;//定义接口interface Car{    public 

JDBC 工具类

package util; import java.sql.*; /** * JDBC的工具类 */ final public class JdbcUtil { private static String user = "root"; // 数据库用户名 private static String password = ""; // 数据库登录密码 private static String url = "jdbc:mysql://127.0.0.1:33

MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4059514.html 联系方式:[email protected] [正文] 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据库资源中间. DAO模式实际上是两个模式的组合,即Data Accessor (数据

JDBC【事务、元数据、改造JDBC工具类】

1.事务 一个SESSION所进行的所有更新操作要么一起成功,要么一起失败 举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样[A账户的钱没变,B账户的钱也没变]. 事例说明: /* * 我们来模拟A向B账号转账的场景 * A和B账户都有1000块,现在我让A账户向B账号转500块钱 * * */ //JDBC默认的情况下是关闭事务的,下面我们看看关闭事务去操作转账操作有什么问题 //A账户减去500块 String sql = "UPDATE a SET money

jdbc工具类1.0

package cn.zhouzhou; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /* * 一.jdbc工具类 * 1.是啥? * 在增删改查的时候 ,发现很多代码都是重复的.为了简化代码,将其封装成一个类