`
南山忍者
  • 浏览: 85577 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

与数据库连接的封装

阅读更多

前几天的时候一直在做与数据库的连接,虽然也是用到了数据库连接池进行连接,但是与数据库连接这方面很混乱,所以在这儿学习一下。如何将数据库的链接做的更加简洁和清楚。

 

1,首先先定义一个Exception。建立一个package(org.hrs.report.Exception)。

package org.hrs.report.Exception;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hrs.report.listener.AppListener;


public class DAOException extends Exception {
	private static Log log = LogFactory.getLog(AppListener.class.getName());
	public String toSting(){
		String string = "��ݿ�t�ӻ�sql����쳣";
		log.info(string);
		return string;
	}

}

 

2,建立一个package(org.hrs.report.common.inf)和一个接口。

package org.hrs.report.common.inf;

import java.sql.Connection;
import org.hrs.report.Exception.DAOException;


public interface DAO {

	public Connection getConnection() throws DAOException;
}

 

 

3,定义数据库连接池

package org.hrs.report.common;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;


public class Cache {
private static Cache instance;
private DataSource dataSource;

  static {
	  try {
		instance=new Cache();
	} catch (NamingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	  
  }
  private Cache() throws NamingException{
	 Context context=null; 
	 

		try {
			context = new InitialContext();
			dataSource = (DataSource) context
					.lookup("java:/comp/env/HRS");
		} catch (NamingException e) {
			e.printStackTrace();
		}		
		
	
  }
  public static Cache getInstance(){
	  
	  return instance;
  }
  
  public DataSource getDataSource(){
	  
	  return dataSource;
  }
	
}

 

4,将第二步的接口,实现它。

package org.hrs.report.common;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.hrs.report.Exception.DAOException;
import org.hrs.report.common.inf.DAO;


public class DAOBASE implements DAO {

	public Connection getConnection() throws DAOException {
		Connection connection=null;
		DataSource dataSource=Cache.getInstance().getDataSource();
		if(dataSource!=null)
		{
			try {
				connection=dataSource.getConnection();
			} catch (SQLException e) {
				 e.printStackTrace();
			}
		}
		
		return connection;
	}

}

 

5,定义一些数据库的操作方法。

package org.hrs.report.common;
import java.sql.CallableStatement;
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.sql.PreparedStatement;

import org.hrs.report.Exception.DAOException;

public final class DBoperator extends DAOBASE{
    
	private Connection connection = null;
	private Statement cstmt = null;
	private ResultSet rstRet = null;
   
   
	public void Execute(String sql) throws SQLException {
		try {
			connection = getConnection();
			cstmt = connection.createStatement();

			cstmt.executeQuery(sql);
//			dbclose();

		} catch (DAOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} finally {
			dbclose();
		}

	}
	
	
	
	
    public ArrayList sqlExecute(String sql) throws SQLException {

		ArrayList alResult = new ArrayList();
		try {
			connection = getConnection();
			cstmt = connection.createStatement();
			rstRet = (ResultSet) cstmt.executeQuery(sql);
			ResultSetMetaData rsmd = rstRet.getMetaData();
			int numCols = rsmd.getColumnCount();

			while (rstRet.next()) {
				String strTempArray[] = new String[numCols];
				for (int i = 1; i <= numCols; i++) {
					strTempArray[i - 1] = rstRet.getString(i) == null ? " " : rstRet.getString(i);
				}
				alResult.add(strTempArray);
			}
//			dbclose();

		} catch (DAOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}  finally {
			dbclose();
		}
		return alResult;

	}
    public int getCount(String sql) throws SQLException {

		int counts = 0;
		try {
			connection = getConnection();
			cstmt = connection.createStatement();
			rstRet = (ResultSet) cstmt.executeQuery(sql);
			while (rstRet.next()) {
				counts = Integer.parseInt(rstRet.getString(1));
			}
//			dbclose();

		} catch (DAOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} finally {
			dbclose();
		}
		return counts;

	}   
    public void procedureCall(String REPORTID, String reportdate,
			String reporttype, String sendtime) throws SQLException {

		try {
			String precedure = "{call reportSend(?,?,?,?)}";
			connection = getConnection();
			CallableStatement castmt = connection.prepareCall(precedure);
			castmt.setString(1, REPORTID);
			castmt.setString(2, reportdate);
			castmt.setString(3, reporttype);
			castmt.setString(4, sendtime);
			castmt.executeUpdate();
			dbclose();
			System.out.print("<script language='javascript'>alert('�洢�ɹ���');</script>");
		} catch (DAOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} finally {
			dbclose();
		}

	}
    
    public void dbclose() throws SQLException {
		if (rstRet != null) {
			try {
				rstRet.close();
			} catch (SQLException e) {
				// TODO �Զ���� catch ��
				e.printStackTrace();
			}
		}
		try {
			if (cstmt != null)
				cstmt.close();
		} catch (SQLException e) {
			// TODO �Զ���� catch ��
			e.printStackTrace();
		}
		if (connection != null) {
			connection.close();
		}

	}
    
    /**
     * @功能介绍: 返回门诊科室的收费的统计信息
     * @param sql
     * @return
     * @author 郑林
     */
    public double getOutserviceMoney(String sql){
    	
    	double totleMoney=0.0;
    	double registerFree=0.0;
    	double clinicFree=0.0;
    	double accountFree=0.0;
    	
    	try{
    		connection=getConnection();
    		cstmt=connection.createStatement();
    		rstRet=cstmt.executeQuery(sql);
    		
    		while(rstRet.next()){
    			if(rstRet.getString(1)==null||rstRet.getString(1).equals("")){
    				registerFree=0.0;
    			}else{
    				registerFree=Double.parseDouble(rstRet.getString(1));
    			}
    			if(rstRet.getString(2)==null||rstRet.getString(2).equals("")||rstRet.getString(2).equals("null")){
    				clinicFree=0.0;
    			}else{
    				clinicFree = Double.parseDouble(rstRet.getString(2));
    			}
    			if(rstRet.getString(3)==null||rstRet.getString(3).equals("")||rstRet.getString(3).equals("null")){
    				accountFree=0.0;
    			}else{
    				accountFree = Double.parseDouble(rstRet.getString(3));
    			}
    			totleMoney=registerFree+clinicFree-accountFree;
    		}
    		
    	}catch(DAOException e){
    		e.printStackTrace();
    	}catch(SQLException e){
    		e.printStackTrace();
    	}finally{
    		try {
				dbclose();
			} catch (SQLException e) {
				e.printStackTrace();
			}
    	}
    	return totleMoney;
    } 
}

 

 

剩下的就是一些自己的业务层的操作了

分享到:
评论

相关推荐

    MySql数据库连接封装类

    `MySql数据库连接封装类`就是一种高效、便捷的方式来管理和操作数据库连接。它将连接的创建、关闭以及执行SQL语句等常见操作进行了抽象和封装,以便开发者能够更简单地进行数据库操作,无需每次都手动处理复杂的连接...

    Oracle数据库连接封装类

    总的来说,Oracle数据库连接封装类是Java开发中一个实用的工具,它简化了与Oracle数据库的交互,让开发者能更专注于业务逻辑,而不是数据库操作的细节。在学习和使用时,理解JDBC的基本原理以及封装类的设计思路,将...

    一个连接多种数据库的连接池封装包

    总的来说,这个连接池封装包提供了一种跨数据库的解决方案,简化了数据库连接的管理和优化,同时提供了示例和配置文件以帮助开发者快速上手。对于任何需要处理多数据库的Java应用来说,它都是一个值得考虑的工具。

    用于实习jdbc的数据库连接封装类

    java用于jdbc的连接的实现类,在数据库连接的时候直接new出来就OK了!DAO层自己加写...

    C#中oracle连接数据库的封装类

    这种封装可以提高代码的可读性和复用性,减少直接处理数据库连接和命令时可能出现的错误。 首先,`DbHelperOra.cs`文件很可能是包含以下关键组件的C#类: 1. **连接字符串**:封装类通常会有一个私有字段来存储...

    php数据库连接mysql封装类

    php数据库连接mysql封装类,改类能让初学着更好的实用php连接mysql

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

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

    jsp数据库连接大全和数据库操作封装到Javabean

    本教程将详细阐述如何在JSP中建立数据库连接以及如何将数据库操作封装到JavaBean中,以便实现更高效、更可维护的代码。 首先,我们要了解JSP的基础。JSP是一种服务器端脚本语言,用于创建动态网页。它允许开发者在...

    数据库连接池封装【Java源码】

    这个类就是利用了DBCP包写数据库连接池。 4.ISqlHelper.java 其实这个接口也很简单,定义了那么几个方法,说白了就是操作数据库的,为什么要写成泛型的接口,为了就是后面大家的业务有针对性,一个实体一个业务...

    windows关于qt的数据库操作封装类以及用例,c++代码

    自动与sqlite3数据库做连接 数据的插入,查询,删除、更新操作 数据库建立与表建立 支持关于where语句查询的自动拼接。 支持text的模糊查询 windows 关于qt的数据库操作封装类 以及用例: SQLite,是一款轻型的...

    php数据库访问封装类集合

    1. **数据库连接**:封装类通常会包含一个`connect()`方法,用于建立到MySQL服务器的连接。这个方法可能需要主机名、用户名、密码和数据库名称作为参数。连接成功后,类会返回一个数据库连接资源。 2. **错误处理**...

    C# 数据库操作封装类

    通过这样的封装,开发者无需直接处理数据库连接字符串、命令对象或数据适配器,从而降低了出错的可能性。 例如,COleDbOperate类可能有以下方法: 1. `OpenConnection(string connectionString)`: 打开指定连接...

    c#几种常用数据库封装

    总结来说,C#中的数据库封装涉及到了多种技术,包括SQLite和BerkeleyDB这样的数据库系统,数据库连接池以提高性能,以及序列化和通信机制来处理数据的存储和传输。理解并掌握这些知识点对于C#开发者来说至关重要,...

    C#操作mysql数据库的封装类

    C#操作mysql数据库的封装类,带注释,代码完整,适合企业级开发

    Qt 数据库访问封装类

    封装了常用的mysql,sqlserver,sqllite,access数据库的连接,数据访问等方法,原作者链接:http://www.qtcn.org/bbs/read-htm-tid-62347.html

    php数据库操作封装类.zip

    封装类通常包含一个用于建立数据库连接的方法,如`connect()`。这个方法可能包含配置参数,如数据库类型(如MySQL)、主机名、用户名、密码和数据库名。使用此类时,开发者只需调用此方法并传递相应的参数即可建立...

    ASP 数据库类封装

    标题“ASP 数据库类封装”指的是一种优化的数据库处理方式,它不再依赖于传统的conn.asp文件,而是通过创建一个数据库类来封装数据库连接和操作。这种方式的优点在于提高了代码的可维护性和复用性,同时能更有效地...

    c#.NET万能数据库访问封装类(ACCESS、SQLServer、Oracle)

    1. **`ConnectionString`**:用于存储数据库连接字符串,该属性可以被读取和设置,允许外部根据实际情况配置数据库连接信息。 2. **`DbType`**:表示当前使用的数据库类型(Access、SQLServer、Oracle)。此属性同样...

    java连接数据库(工具类的封装)

    为了提高代码的复用性和可维护性,通常会将数据库连接操作封装到一个工具类中。本篇文章将详细讲解如何创建一个用于连接MySQL数据库的Java工具类。 首先,确保你的项目中已经包含了JDBC驱动,对于MySQL,这通常是`...

    很好用的数据库访问封装类

    1. **连接管理**:`DataBaseLayer`类可能会有一个`Connect`方法,用于打开和关闭数据库连接。在数据库操作完成后,及时关闭连接对于提高性能和防止资源泄漏至关重要。它可能还会包含一个连接字符串管理机制,根据...

Global site tag (gtag.js) - Google Analytics