`

封装java访问数据库的代码

    博客分类:
  • jdbc
 
阅读更多
package com.yc.dao;

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

import com.yc.sun.Log;

public class DBHleper {
	private static Connection con=null;
	private PreparedStatement pstmt=null;
	private ResultSet rs=null;
	//加载驱动
	static {
		
		
			try {
				Class.forName(Mypro.getInstance().getProperty("sql.driver"));
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
	}
	
	//获得连接
	public Connection getConnection(){
		try {
			con=DriverManager.getConnection(Mypro.getInstance().getProperty("sql.url"),
					Mypro.getInstance().getProperty("sql.username"),Mypro.getInstance().getProperty("sql.password"));
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return con;
	
	}
	//关闭的方法
	public void close(Connection con,PreparedStatement pstmt,ResultSet rs){
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {				
				Log.log.info(toString());
			}
		}
		if(pstmt!=null){
			try {
				pstmt.close();
			} catch (SQLException e) {
				Log.log.info(toString());
			}
		}
		if(con!=null){
			try {
				con.close();
			} catch (SQLException e) {
				Log.log.info(toString());
			}
		}
		
		
		
		
		
	}
	
	
	//设置?的参数
	public void setValues(PreparedStatement pstmt,List<String> params){
		if(pstmt!=null&&params!=null&&params.size()>0){
			for(int i=0;i<params.size();i++){
				try {
					pstmt.setString(i+1, params.get(i));
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
	}
	
	
	//更新的方法
	public int update(String sql,List<String> params){
		int r=0;
		getConnection();
		try {
			pstmt=con.prepareStatement(sql);
			this.setValues(pstmt, params);
			r=pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			this.close(con, pstmt, rs);
		}
		return r;
		
	}
	//求只有一个值的聚合函数的值
	public String uniqueResult(String sql,List<String> params){
		
		String result="";
		try {
			con=this.getConnection();
			pstmt=con.prepareStatement(sql);
			this.setValues(pstmt, params);
			rs=pstmt.executeQuery();
			if(rs.next()){
				result=rs.getString(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			this.close(con, pstmt, rs);
		}
		return result;
		
	}
	
	//求多个聚合的值
	public List<String> Results(String sql,List<String>params){
		List<String> result=new ArrayList<String>();
		
		try {
			con=this.getConnection();
			pstmt=con.prepareStatement(sql);
			rs=pstmt.executeQuery();
			int mdc=rs.getMetaData().getColumnCount();
			//System.out.println(mdc);
			while(rs.next()){
				for(int i=0;i<mdc;i++){
				result.add(rs.getString(i+1));
				//i++;
				}
			}
		} catch (SQLException e) {
			Log.log.error(e.getMessage());
		}
		return result;
	}
	
/**
	 * 查询单表的数据,返回一个List类型的集合
	 * 用到的技术:反射,泛型
	 * @param <T>泛型,即你要得到的集合中存的对象的类型
	 * @param sql :查询语句,可以包含?
	 * @param params :?所对应的参数值集合
	 * @param c :泛型类型所对应的反射对象 Product =》 Class.forname(XXX.XXX)
	 * @return	:返回存储了对象的集合  如果查询product表则返回List<Product>
	 */
	
	public <T> List<T> findSignalTables(String sql ,List<String>params,Class<T> c){
		List<T> list=new ArrayList<T>();
		con=this.getCon();			//获取连接
		try {
			pstmt=con.prepareStatement(sql);  //语句对象
			this.setValues(pstmt, params);	//设置占位符
			ResultSet rs=pstmt.executeQuery();
			//获取方法名
			Method[] ms=c.getMethods();
			
			//获取数据中表的列名
			ResultSetMetaData rsmd=rs.getMetaData();
			String[] columnames=new String[rsmd.getColumnCount()];
			for(int i=0 ;i<columnames.length;i++){
				columnames[i]=rsmd.getColumnName(i+1);
			}
			while(rs.next()){
				T t=(T)c.newInstance();
				for(Method m:ms){
					String mname=m.getName();
					for(int i=0;i<columnames.length;i++){
						String cname=columnames[i];
						if(mname.equalsIgnoreCase("set"+cname)){
							String ctypename=rs.getObject(columnames[i]).getClass().getName();//得到列的数据类型
						//	System.out.println(ctypename);
							//进行数据匹配
							if("java.lang.Integer".equals(ctypename)){
								m.invoke(t, rs.getInt(columnames[i]));
							}else if("java.lang.String".equals(ctypename)){
								m.invoke(t, rs.getString(columnames[i]));
							}else if("java.math.BigDecimal".equals(ctypename)){
								m.invoke(t, rs.getDouble(columnames[i]));
							}//如果还有其他的数据类型直接在这里加代码
							//m.invoke(t, rs.getString(columnames[i]));
						}
					}
					
				}
				list.add(t);
			}
		} catch (SecurityException e) {
			LogUtil.log.error(e.getMessage());
		} catch (IllegalArgumentException e) {
			LogUtil.log.error(e.getMessage());
		} catch (SQLException e) {
			LogUtil.log.error(e.getMessage());
		} catch (InstantiationException e) {
			LogUtil.log.error(e.getMessage());
		} catch (IllegalAccessException e) {
			LogUtil.log.error(e.getMessage());
		} catch (InvocationTargetException e) {
			LogUtil.log.error(e.getMessage());
		}
		return list;
		
	}
	/**
	 * 查询多表的数据,先将数据存在一个map中,在将这个map存到list中
	 * @param sql
	 * @param params
	 * @return
	 * @throws SQLException 
	 */
	public List<String> findMutilTable(String sql,List<String> params) throws SQLException{
		Map<String,String> map=new HashMap<String,String>();
		//List<Map<String,String>> list=new ArrayList<Map<String,String>>();
		List<String> list=new ArrayList<String>();
		con=this.getCon();
		pstmt=con.prepareStatement(sql);
		this.setValues(pstmt, params);
		ResultSet rs=pstmt.executeQuery();
		ResultSetMetaData rsmd=rs.getMetaData();
		String[] columname=new String[rsmd.getColumnCount()];
		for(int i=0;i<columname.length;i++){
		columname[i]=rsmd.getColumnName(i+1);
		//System.out.println(columname[i]);
		}
		while(rs.next()){
			
			for(int i=0;i<columname.length;i++){
				map.put(columname[i], rs.getString(i+1));
				String e=map.get(columname[i]);
				list.add(e);
				
			}
		}
		return list;
	}
		
	
	
	
	
	
	
	

}
分享到:
评论

相关推荐

    一款封装java访问数据库的底层数据库操作的jar

    标题中的“一款封装java访问数据库的底层数据库操作的jar”指的是一个Java库,它将数据库交互的底层细节进行了抽象和封装,使得开发者可以更高效、更便捷地在Java应用程序中进行数据库操作。这样的库通常会包含一...

    数据库小知识用java访问数据库

    ### 数据库小知识:用Java访问数据库 #### 概述 在软件开发过程中,数据库连接是至关重要的一环。尤其对于Java开发者来说,掌握如何高效、稳定地与数据库交互是非常重要的技能之一。然而,许多Java初学者在尝试...

    Java访问数据库java类必看

    Java访问数据库是开发Java应用程序时常见的任务,尤其是在构建企业级应用时。Java通过Java Database Connectivity (JDBC) API与各种数据库进行交互。本篇将详细解释如何使用Java连接和操作数据库,以及如何优化代码...

    JAVA操作数据库模板代码

    在Java编程语言中,JDBC(Java Database Connectivity)是一个用于访问和操作数据库的标准接口。它允许程序员使用SQL语句来与各种类型的数据库进行交互。在这个名为"JAVA操作数据库模板代码"的压缩包中,我们有两个...

    对数据库操作进行封装的java代码

    通过jdbc的方式访问数据库: 1.程序是整理的韩顺平oracle教学视频中的一个例子。 2.假设本机安装了oracle数据库,并在orcl的数据库中建立了基于scott用户的emp表。 3.把数据库的驱动信息、用户、密码、url写到外部...

    实用数据库访问类,封装常见的数据库访问类助手

    本资源"实用数据库访问类,封装常见的数据库访问类助手"提供了一个方便的工具,可以简化数据库操作,提高代码的可维护性和复用性。 首先,我们要理解什么是数据库访问类。数据库访问类是面向对象编程中的一种设计...

    java访问数据库集合

    总的来说,Java访问数据库的方式多样,从基础的JDBC到高级的ORM框架,每种都有其适用场景。选择哪种方式取决于项目需求,例如对性能的要求、开发效率、数据库操作的复杂度等。了解并掌握这些技术,对于Java开发人员...

    Java数据库操作封装类

    JDBC是Java中标准的数据库访问接口,它提供了与各种数据库通信的能力,但其API较为底层,使用时需要编写大量的重复代码。因此,封装类可以对JDBC进行抽象和简化,提供更友好的API。 首先,封装类可能会包含一个`...

    提高Java访问数据库效率的探讨

    综上所述,通过采用数据库连接池技术、选择合适的JDBC驱动程序以及利用JavaBean技术封装数据库操作等方式,可以在很大程度上提高Java访问数据库的效率,进而提升整个系统的性能表现。这些方法不仅有助于优化资源利用...

    JAVA访问数据库帮助类

    封装了常用的数据库访问的模式化操作,可以大大简化程序的复杂性,和提高代码的利用率!

    S2北大青鸟 使用Java实现数据库编程(包含项目).zip

    2. **JDBC(Java Database Connectivity)**:JDBC是Java访问数据库的标准API,通过它,开发者可以编写代码来连接数据库、发送SQL语句、处理结果集。学习者需要理解DriverManager类、Connection接口、Statement和...

    JAVA:数据库操作封装

    ### JAVA:数据库操作封装 #### 概述 在Java开发中,进行数据库操作是一项非常常见的任务。为了提高代码的可维护性、复用性和降低出错率,通常会将常用的数据库操作方法进行封装,形成一个统一的操作接口。这种...

    java连接各种数据库 以及封装sql

    首先,JDBC是Java中用于与关系型数据库交互的一组接口和类,它为开发者提供了一种标准的、平台无关的方式来访问数据库。要连接到数据库,你需要以下步骤: 1. **加载驱动**:使用`Class.forName()`方法加载数据库...

    java访问数据库SQL

    在Java编程中,访问数据库通常涉及到JDBC(Java Database Connectivity),这是一个Java API,用于与各种数据库系统交互。在给定的文件中,我们看到一个简单的示例,展示了如何使用JDBC连接到SQL Server 2005数据库...

    基于Java的数据库访问

    8. DAO(Data Access Object)模式:DAO是设计模式之一,用于封装数据库操作,使业务逻辑和数据访问逻辑分离,提高代码的可维护性和可测试性。 9. ORM(Object-Relational Mapping)框架:如Hibernate、MyBatis等,...

    Java封装hibernate操作数据库.rar

    本资料包"Java封装hibernate操作数据库.rar"主要涉及了如何使用Hibernate进行数据库操作,并通过DAO(Data Access Object)层的封装来实现更加高效、简洁的代码结构。 首先,让我们深入了解Hibernate。Hibernate是一...

    JAVA MVC三层架构 代码生成器.JAVA根据数据库表反向工程生成 MVC三层架构 代码的生成器

    在Java中,通常使用DAO(数据访问对象)设计模式来实现这一层,将数据库操作封装起来。 2. **视图(View)**:视图层主要负责显示数据,它是用户看到并与其交互的界面。在Java MVC中,视图通常由JSP(JavaServer ...

    JDBC与Java数据库编程

    JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,它可以为多种关系数据库提供统一的访问接口。JDBC的目标是允许开发人员能够编写数据库独立的应用程序,即应用程序无需依赖于底层数据库的具体...

    java操作mysql数据库,不写sql语句版

    总结起来,不直接写SQL语句的Java MySQL数据库操作通常依赖于ORM框架或Spring提供的数据访问工具,这些工具通过映射机制和高级API,使得开发者可以更加专注于业务逻辑,而不是数据库细节。在实际项目中,`DataAccess...

    Java封装ibatis操作数据库.rar

    总的来说,这个压缩包提供的内容有助于理解和学习如何在Java项目中有效地利用Ibatis进行数据库操作,同时通过DAO层封装,可以使得业务逻辑和数据访问层分离,提高代码的复用性和模块化。对于想要深入理解Ibatis或者...

Global site tag (gtag.js) - Google Analytics