`

JDBC操作的封装

    博客分类:
  • java
阅读更多
package com.xu.test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/** 
 * 数据库连接类 
 * 说明:封装了 无参,有参,存储过程的调用 
 * @author iflytek 
 * 
 */  
public class ConnectionDB {  
  
    /** 
     * 数据库驱动类名称 
     */  
    private static final String DRIVER = "com.mysql.jdbc.Driver";  
  
    /** 
     * 连接字符串 
     */  
    private static final String URLSTR = "jdbc:mysql://localhost:3306/website";  
  
    /** 
     * 用户名 
     */  
    private static final String USERNAME = "root";  
  
    /** 
     * 密码 
     */  
    private static final String USERPASSWORD = "123456";  
  
    /** 
     * 创建数据库连接对象 
     */  
    private Connection connnection = null;  
  
    /** 
     * 创建PreparedStatement对象 
     */  
    private PreparedStatement preparedStatement = null;  
    /** 
     * 创建CallableStatement对象 
     */  
    private CallableStatement callableStatement = null;  
  
    /** 
     * 创建结果集对象 
     */  
    private ResultSet resultSet = null;  
  
    static {  
        try {  
            // 加载数据库驱动程序  
            Class.forName(DRIVER);  
        } catch (ClassNotFoundException e) {  
            System.out.println("加载驱动错误");  
            System.out.println(e.getMessage());  
        }  
    }  
  
    /** 
     * 建立数据库连接 
     * @return 数据库连接 
     */  
    public Connection getConnection() {  
        try {  
            // 获取连接  
            connnection = DriverManager.getConnection(URLSTR, USERNAME,  
                    USERPASSWORD);  
        } catch (SQLException e) {  
            System.out.println(e.getMessage());  
        }  
        return connnection;  
    }  
  
    /** 
     * insert update delete SQL语句的执行的统一方法 
     * @param sql SQL语句 
     * @param params 参数数组,若没有参数则为null 
     * @return 受影响的行数 
     */  
    public int executeUpdate(String sql, List<Object> params) {  
        // 受影响的行数  
        int affectedLine = 0;  
          
        try {  
            // 获得连接  
            connnection = this.getConnection();  
            // 调用SQL   
            preparedStatement = connnection.prepareStatement(sql);  
              
            // 参数赋值  
            if (params != null) {  
                for (int i = 0; i < params.size(); i++) {  
                    preparedStatement.setObject(i + 1, params.get(i));  
                }  
            }  
              
            // 执行  
            affectedLine = preparedStatement.executeUpdate();  
  
        } catch (SQLException e) {  
            System.out.println(e.getMessage());  
        } finally {  
            // 释放资源  
            closeAll();  
        }  
        return affectedLine;  
    }  
  
    /** 
     * SQL 查询将查询结果直接放入ResultSet中 
     * @param sql SQL语句 
     * @param params 参数数组,若没有参数则为null 
     * @return 结果集 
     */  
    public ResultSet executeQueryRS(String sql, List<Object> params) {  
        try {  
            // 获得连接  
            connnection = this.getConnection();  
              
            // 调用SQL  
            preparedStatement = connnection.prepareStatement(sql);  
              
            // 参数赋值  
            if (params != null) {  
                for (int i = 0; i < params.size(); i++) {  
                    preparedStatement.setObject(i + 1, params.get(i));  
                }  
            }  
              
            // 执行  
            resultSet = preparedStatement.executeQuery();  
  
        } catch (SQLException e) {  
            System.out.println(e.getMessage());  
        }   
  
        return resultSet;  
    }  
      
    /** 
     * SQL 查询将查询结果:一行一列 
     * @param sql SQL语句 
     * @param params 参数数组,若没有参数则为null 
     * @return 结果集 
     */  
    public Object executeQuerySingle(String sql, Object[] params) {  
        Object object = null;  
        try {  
            // 获得连接  
            connnection = this.getConnection();  
              
            // 调用SQL  
            preparedStatement = connnection.prepareStatement(sql);  
              
            // 参数赋值  
            if (params != null) {  
                for (int i = 0; i < params.length; i++) {  
                    preparedStatement.setObject(i + 1, params[i]);  
                }  
            }  
              
            // 执行  
            resultSet = preparedStatement.executeQuery();  
  
            if(resultSet.next()) {  
                object = resultSet.getObject(1);  
            }  
              
        } catch (SQLException e) {  
            System.out.println(e.getMessage());  
        } finally {  
            closeAll();  
        }  
  
        return object;  
    }  
  
    /** 
     * 获取结果集,并将结果放在List中 
     *  
     * @param sql 
     *            SQL语句 
     * @return List 
     *                       结果集 
     */  
    public List<Object> excuteQuery(String sql, List<Object> params) {  
        // 执行SQL获得结果集  
        ResultSet rs = executeQueryRS(sql, params);  
          
        // 创建ResultSetMetaData对象  
        ResultSetMetaData rsmd = null;  
          
        // 结果集列数  
        int columnCount = 0;  
        try {  
            rsmd = rs.getMetaData();  
              
            // 获得结果集列数  
            columnCount = rsmd.getColumnCount();  
        } catch (SQLException e1) {  
            System.out.println(e1.getMessage());  
        }  
  
        // 创建List  
        List<Object> list = new ArrayList<Object>();  
  
        try {  
            // 将ResultSet的结果保存到List中  
            while (rs.next()) {  
                Map<String, Object> map = new HashMap<String, Object>();  
                for (int i = 1; i <= columnCount; i++) {  
                    map.put(rsmd.getColumnLabel(i), rs.getObject(i));  
                }  
                list.add(map);  
            }  
        } catch (SQLException e) {  
            System.out.println(e.getMessage());  
        } finally {  
            // 关闭所有资源  
            closeAll();  
        }  
  
        return list;  
    }  
      
    /** 
     * 存储过程带有一个输出参数的方法 
     * @param sql 存储过程语句 
     * @param params 参数数组 
     * @param outParamPos 输出参数位置 
     * @param SqlType 输出参数类型 
     * @return 输出参数的值 
     */  
    public Object excuteQuery(String sql, List<Object> params,int outParamPos, int SqlType) {  
        Object object = null;  
        connnection = this.getConnection();  
        try {  
            // 调用存储过程  
            callableStatement = connnection.prepareCall(sql);  
              
            // 给参数赋值  
            if(params != null) {  
                for(int i = 0; i < params.size(); i++) {  
                    callableStatement.setObject(i + 1, params.get(i));  
                }  
            }  
              
            // 注册输出参数  
            callableStatement.registerOutParameter(outParamPos, SqlType);  
              
            // 执行  
            callableStatement.execute();  
              
            // 得到输出参数  
            object = callableStatement.getObject(outParamPos);  
              
        } catch (SQLException e) {  
            System.out.println(e.getMessage());  
        } finally {  
            // 释放资源  
            closeAll();  
        }  
          
        return object;  
    }  
  
    /** 
     * 关闭所有资源 
     */  
    private void closeAll() {  
        // 关闭结果集对象  
        if (resultSet != null) {  
            try {  
                resultSet.close();  
            } catch (SQLException e) {  
                System.out.println(e.getMessage());  
            }  
        }  
  
        // 关闭PreparedStatement对象  
        if (preparedStatement != null) {  
            try {  
                preparedStatement.close();  
            } catch (SQLException e) {  
                System.out.println(e.getMessage());  
            }  
        }  
          
        // 关闭CallableStatement 对象  
        if (callableStatement != null) {  
            try {  
                callableStatement.close();  
            } catch (SQLException e) {  
                System.out.println(e.getMessage());  
            }  
        }  
  
        // 关闭Connection 对象  
        if (connnection != null) {  
            try {  
                connnection.close();  
            } catch (SQLException e) {  
                System.out.println(e.getMessage());  
            }  
        }     
    }  
}  

 

分享到:
评论

相关推荐

    基于Java语言的JDBC操作封装与简化数据查询的commons-dbutils设计源码

    本项目为基于Java语言的JDBC操作封装工具,旨在简化数据查询和记录读取过程,并采用commons-dbutils设计源码。该工具集包含135个文件,其中Java源文件95个,XML配置文件16个,其他包括txt、yml、md等多种文件类型。...

    JDBC操作封装 IO流操作封装 CRC效验码生成

    连接池的初始化、创建等仔细看构造函数的doc文档,就知道如何操作。我自己用着很方便。 有两个初始化方法,分别用于初始化多个数据库对象,或者单个数据库对象。 String[] dbPoolName = { "default", "sec" }; ...

    jdbc完全封装实现增删改查

    实现完全的对jdbc对象的封装,只需调用则可对数据库进行CRUD操作

    对jdbc的封装的总结

    本文将深入探讨对JDBC的封装,旨在提高数据库操作的效率、易用性和可维护性。 首先,理解JDBC的基本流程至关重要。通常包括以下步骤: 1. 加载驱动:使用`Class.forName()`方法加载数据库驱动,使得Java程序能够与...

    JDBC操作 简单封装

    标题"JDBC操作 简单封装"指出,我们要讨论的是如何通过编写自定义的Java类或者方法来包装基础的JDBC操作,使其更易于使用。这样的封装通常会涉及以下几个关键点: 1. 数据库连接管理:封装类会包含初始化和关闭...

    JDBC数据操作封装

    本篇文章将详细讲解如何利用JDBC进行数据操作封装,包括增删查改(CRUD)的基本操作,以及如何对多条数据进行事务处理,并将结果返回到对象集合和List中。 首先,我们需要理解JDBC的基本步骤: 1. **加载驱动**:...

    游戏服务器 数据库连接池 jdbc 简单封装

    对于“游戏服务器数据库连接池JDBC简单封装”,这通常指的是开发者为了便于管理和优化数据库操作,对JDBC API进行的一层抽象和封装。封装的主要目标有: 1. **配置管理**:将数据库连接池的配置信息(如最大连接数...

    JDBC通用封装类

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

    JDBC简单封装类

    每个方法内部都会包含上述的JDBC操作,并且通过注释详细解释每一步的作用,使得其他开发者可以更容易地理解和使用这个工具类。 封装的好处在于提高了代码的可读性和可维护性,减少出错的可能性,同时也使得代码更加...

    通用JDBC基本操作封装源代码

    简单易用的数据库封装操作,包含数据库连接池的基本实现,数据库连接可重用,所有的操作都脱离源生JDBC操作,开发人员只需要熟悉Java集合的用法,会写Sql即可轻松的使用该封装好的JDBC API写出合理的代码。...

    java封装jdbc的操作代码

    封装JDBC操作代码是为了提高代码的复用性,减少重复工作,并且能够更好地管理和控制数据库连接,避免资源泄露。下面我们将详细探讨这个主题。 1. **JDBC基础概念** JDBC是Java API的一部分,它提供了连接数据库、...

    MVC模式写的投票系统 值得学习 封装了JDBC的方法

    为了提高代码的可复用性和可维护性,开发者通常会将JDBC操作封装到独立的类或模块中。在本项目中,提到的"封装了JDBC的方法"意味着开发者创建了一个或多个类来简化数据库连接、查询、更新等操作。例如,可能会有一个...

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

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

    java JDBC封装库

    自己封装好的,基于commons的DBBase,DBCP的数据库工具。支持线程池,支持直接对象化操作。即无需任何映射,只要是java标准类,属性带标准set、get,属性名称与查询结果集中字段名称相同,就可以直接查询出对象链表...

    jdbc封装包

    - DAO(Data Access Object)设计模式:将数据库操作封装到单独的对象中,使业务逻辑与数据访问分离。 - SQL语句的预处理和参数化,提高安全性和效率。 - 异常处理机制,确保错误时能正确回滚事务并记录日志。 6...

    JDBC封装.rar

    在未封装前,JDBC操作通常包括以下步骤: - 加载数据库驱动 - 建立数据库连接 - 创建Statement或PreparedStatement对象 - 执行SQL语句 - 处理结果集(ResultSet) - 关闭资源(Connection、Statement、...

    SpringBoot中封装jdbc工具类

    现在的数据层的开发,大多会使用...但是在一些极端的场景下往往原生的jdbc方式操作数据库更灵活,性能更高。由于部分场景下MyBatis或JPA之类无法满足我的需求,所以我打算自己封装一套查数据库的工具类。 文章地址: ...

    JDBC封装类

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

    自己写个JDBC封装

    本项目就是一个自定义的JDBC封装,旨在实现跨数据库的持久化操作,并采用XML配置方式来灵活配置数据库连接信息。 **描述:“JDBC的封装,跨数据库的持久化小组件,XML配置方式,包含doc,大家学习交流”** 1. **...

    Jdbc经典案例之图书管理系统

    此外,为了提高代码复用性和可维护性,通常会将JDBC操作封装在DAO(Data Access Object)层,使得业务逻辑与数据访问逻辑分离。这样,我们可以创建一个`BookDAO`类,包含添加、修改、删除和查询图书的方法。 总的来...

Global site tag (gtag.js) - Google Analytics