`
mumian0417
  • 浏览: 1035 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

数据库底层操作

阅读更多
package com.ytu.imanager.common;

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

import javax.sql.DataSource;

import org.springframework.jdbc.datasource.DataSourceUtils;

public class DaoOperateTemplate
{

    /**
     * <p>Discription:[获取DataSource连接]</p>
     */
    private DataSource dataSource;

    /**
     * <p>Discription:[获取DataSource连接,使用Set方法注入]</p>
     * @param dataSource
     * @author:陈晓东
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public void setDataSource(DataSource dataSource)
    {
        this.dataSource = dataSource;
    }

    /**
     * <p>Discription:[数据库连接]</p>
     */
    private Connection conn = null;

    /**
     * <p>Discription:[预处理]</p>
     */
    private PreparedStatement pstmt = null;
    /**
     * <p>Discription:[调用存储过程]</p>
     */
    private CallableStatement proc = null;
    /**
     * <p>Discription:[返回结果集]</p>
     */
    private ResultSet rs = null;
 
    /**
     * <p>Discription:[单个信息查询]</p>
     * @param sql   查询的SQL语句
     * @param args 条件参数
     * @param rowMapper VO层
     * @return  Object类型的类对象,需要强制转换成VO
     * @throws DaoException
     * @author:[陈晓东]
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public Object find(String sql, Object[] args, RowMapper rowMapper)
            throws DaoException
    {
        conn = DataSourceUtils.getConnection(dataSource);
        if (conn ==null)
        {
            return null;
        }
        try
        {
            pstmt = conn.prepareStatement(sql);
            for (int i = 0; i < args.length; i++)
                pstmt.setObject(i + 1, args[i]);
            rs = pstmt.executeQuery();
            Object obj = null;
            if (rs.next())
            {
                obj = rowMapper.mapRow(rs);
            }
            return obj;
        }
        catch (SQLException e)
        {
            throw new DaoException(e.getMessage(), e);
        }
        finally
        {
            ConnectionUtil.close(rs, pstmt, conn, dataSource);
        }
    }

    /**
     * <p>Discription:[方法功能中文描述]</p>
     * @param sql   查询的SQL语句
     * @param args 条件参数
     * @param rowMapper VO层
     * @return  List集,
     * @throws DaoException
     * @author:[陈晓东]
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public List<Object> doQuery(String sql, Object[] args, RowMapper rowMapper)
            throws DaoException
    {
        List<Object> results = new ArrayList<Object>();
        conn = DataSourceUtils.getConnection(dataSource);
        if (conn ==null)
        {
            return null;
        }
        try
        {
            pstmt = conn.prepareStatement(sql);
            for (int i = 0; i < args.length; i++)
                pstmt.setObject(i + 1, args[i]);
            rs = pstmt.executeQuery();
            Object obj = null;
            while (rs.next())
            {
                obj = rowMapper.mapRow(rs);
                results.add(obj);
            }
            return results;
        }
        catch (SQLException e)
        {
            throw new DaoException(e.getMessage(), e);
        }
        finally
        {
            ConnectionUtil.close(rs, pstmt, conn, dataSource);
        }
    }

    /**
     * <p>Discription:[通过存储过程进行分页查询]</p>
     * @param sql   查询的SQL语句
     * @param args 条件参数
     * @param rowMapper VO层
     * @return  List集,
     * @throws DaoException
     * @author:[陈晓东]
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public List<Object> doQueryByCall(String sql, Object[] args, RowMapper rowMapper)
            throws DaoException
    {
        List<Object> results = new ArrayList<Object>();
        conn = DataSourceUtils.getConnection(dataSource);
        if (conn ==null)
        {
            return null;
        }
        try
        {
           
            proc = conn.prepareCall(sql);//sql = "{ call scott.prc_page(?,?,?,?,?,?,?,?,?) }";
            proc.setString(1, String.valueOf(args[0])); //--表名
            proc.setString(2, String.valueOf(args[1])); //--查询条件
            proc.setString(3, String.valueOf(args[2])); //--要排序的列名
            proc.setString(4, String.valueOf(args[3])); //--排序方式
            proc.setString(5, String.valueOf(args[4])); //--当前页
            proc.setString(6, String.valueOf(args[5])); //--每页显示的记录数

            proc.registerOutParameter(7, Types.INTEGER); //--总记录数
            proc.registerOutParameter(8, Types.INTEGER); //--总页数
            proc.registerOutParameter(9, oracle.jdbc.OracleTypes.CURSOR); //--返回的结果集

            proc.execute();
           
            //总记录数
            int totaRecords = proc.getInt(7);
            //总页数
            int totalPages = proc.getInt(8);
            results.add(totaRecords);
            results.add(totalPages);
           
            rs = (ResultSet) proc.getObject(9);
           
            Object obj = null;
            while (rs.next())
            {
                obj = rowMapper.mapRow(rs);
                results.add(obj);
            }
            return results;
        }
        catch (SQLException e)
        {
            throw new DaoException(e.getMessage(), e);
        }
        finally
        {
            ConnectionUtil.close(rs, proc, conn, dataSource);
        }
    }
  
    /**
     * <p>Discription:[update/insert/delete]</p>
     * @param sql   查询的SQL语句
     * @param args 条件参数
     * @param isGeneralKey
     * @return 是否成功
     * @throws DaoException
     * @author:[陈晓东]
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public boolean doUpdate(String sql, Object[] args, boolean isGeneralKey)
            throws DaoException
    {
        boolean result = false;
        conn = DataSourceUtils.getConnection(dataSource);
        if (conn ==null)
        {
            return result;
        }
        try
        {
            pstmt = (isGeneralKey ? conn.prepareStatement(sql,
                    Statement.RETURN_GENERATED_KEYS) : conn
                    .prepareStatement(sql));
            for (int i = 0; i < args.length; i++)
            {
                pstmt.setObject(i + 1, args[i]);
            }
            if (pstmt.executeUpdate() > 0)
            {
                pstmt.close();
                conn.close();
                result = true;
            }
            else
            {
                result = false;
            }

        }
        catch (SQLException e)
        {
            throw new DaoException(e.getMessage(), e);
        }
        finally
        {
            ConnectionUtil.close(rs, pstmt, conn, dataSource);
        }
        return result;
    }
   
}
分享到:
评论

相关推荐

    数据库底层操作与配置V2.1

    数据库底层操作与配置是一个由个人开发的代码自编译工具,用来生成支持特定框架的数据字段数据集,可以将数据库完全封装,使用工具后,不用再考虑数据库,也不用写Sql语句,可以极大的提高工作效率,完全通过一些...

    简单的列表查询网站,含增删改查的数据库底层操作。

    对于"增删改查"的数据库底层操作,C#代码会执行SQL语句来实现。例如,创建一条新记录可能需要执行INSERT INTO语句,查询数据则是SELECT语句,更新记录用UPDATE,删除记录则用DELETE。在Entity Framework中,这些操作...

    数据库底层操作组件,同时支持MSSQL\ORACLE

    数据库底层操作组件,同时支持MSSQL\ORACLE 数据库 操作,根据配置文件自适应数据库,统一接口,无需改变代码,同时集成了众多优秀函数,例如 批量插入,可以把datagrid\datagridview\datatable 等数据一次性插入到...

    数据库底层操作(增删改)asp.net1.1

    数据库底层操作,调用相当简单,可以完成Sql、Oracle数据的增、删、改、执行存储过程功能,所有封装的方法请看文件"ConcSoft.Database.TXT",调用事例请看"调用ConcSoft.Database.dll事例.TXT",带日志追踪

    数据库底层操作与配置V2.0.rar

    一、查询 1、可选择字段查询 2、可进行字段描述 3、可连接其它数据库、数据表,进行复杂的查询 4、可写复杂的条件 二、插入、修改、删除 较好地完成了插入、修改、删除操作,...

    C#.Net底层操作数据库及常用功能封装类

    本主题将深入探讨"C#.Net底层操作数据库及常用功能封装类"的相关知识点,包括如何封装数据库操作、消息处理、加密解密、邮件发送以及数据字符串处理等功能。 首先,我们来关注数据库操作。在C#中,可以使用ADO.NET...

    C#操作各种数据库底层源码 连接数据库代码

    本资料包“C#操作各种数据库底层源码 连接数据库代码”正是针对这一主题,涵盖了C#与Access、MySQL和SQLServer数据库的交互实现,提供了完整的底层源码,对于开发者来说,无论是学习还是实际项目开发,都具有极高的...

    简易操作数据底层

    在IT行业中,数据底层操作是核心任务之一,它涉及到如何高效、安全地访问和管理存储在数据库中的数据。"简易操作数据底层"这个主题聚焦于简化数据库的增删改查(CRUD)操作,适用于Oracle和SQL Server等多种主流...

    C#优秀数据库操作底层,用工厂实现

    本文将深入探讨如何使用C#语言设计优秀的数据库操作底层,并利用工厂模式来实现高效且灵活的数据库接口。C#作为.NET框架的主要编程语言,拥有丰富的库和工具支持数据库连接与操作。 首先,我们关注的是“接口”。在...

    数据库底层开闭封装

    "数据库底层开闭封装"是一个最佳实践,旨在优化数据库访问,提高代码的可维护性和可重用性。本篇文章将深入探讨这一概念,并结合Java和MySQL环境进行详细阐述。 首先,"数据库底层开闭封装"是指将数据库连接的创建...

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

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

    VC++ 数据库编程详解

    教程从基础的数据库驱动程序开始,引导读者逐步理解数据库编程的核心概念,通过丰富的代码实例和实践项目,帮助读者掌握数据库底层操作的技巧与乐趣。 在VC++数据库编程中,主要涉及以下几个关键知识点: 1. **...

    简易数据库关系映射框架EasyDBO v0.1.0 测试版

    ORM技术在现代软件开发中广泛应用,因为它能够减少开发者对数据库底层操作的关注,让他们更专注于业务逻辑。 EasyDBO v0.1.0测试版可能包含以下关键特性: 1. **对象映射**:EasyDBO会自动将数据库表结构映射为类...

    DotNet数据库底层配置V3.0

    DotNet数据库底层配置是一个由个人开发的代码自编译工具,用来生成支持.NET框架的数据字段数据集,可以将数据库完全封装,使用工具后,不用再考虑数据库,也不用写Sql语句,可以极大的提高工作效率,完全通过一些...

    关于.NET连接Mysql数据库的底层类实例和MySql.Data.dll

    在.NET框架中,连接MySQL数据库通常涉及到使用MySQL的数据提供者——`MySql.Data.dll`库。这个库由Oracle公司提供,允许.NET开发者通过C#等...使用这样的助手类,你可以专注于业务逻辑,而不是数据库连接的底层细节。

    java大作业:用java语言实现数据库的底层实现

    在本Java大作业中,我们将深入探讨如何使用Java语言实现数据库的底层逻辑,进而封装成易于使用的实体类,以支持创建表、查询等常见的数据库操作。这个项目旨在帮助开发者理解数据库的基本工作原理,并掌握Java与...

    通用数据库操作类库

    标题中的“通用数据库操作类库”是指一种设计用于跨多种数据库系统工作的类库,它允许开发者通过统一的接口进行数据存取,而无需关注底层数据库的具体实现。这个类库通常包含了对各种数据库如Oracle、SQL Server、...

    面向SAP的Oracle数据库应用底层架构

    ### 面向SAP的Oracle数据库应用底层架构 #### 概述 本文将深入探讨在SAP环境下Oracle数据库的应用底层架构。SAP系统作为全球领先的企业资源规划(ERP)解决方案之一,在诸多企业中得到了广泛的应用。而Oracle数据库...

    数据库操作简易工具

    数据库操作简易工具是一种高效便捷的解决方案,专为简化SQL...通过它,用户可以专注于数据本身,而无需过多关注底层的数据库管理系统。这对于小型企业、开发者以及数据库管理员来说,无疑是一个高效且实用的工具。

    ASP.NET数据库操作底层代码精华

    本文将深入探讨ASP.NET数据库操作的底层代码精华,帮助新手快速理解和掌握这一关键技能。 1. **ADO.NET架构** ADO.NET由几个核心组件构成,包括Connection(连接)、Command(命令)、DataAdapter(数据适配器)、...

Global site tag (gtag.js) - Google Analytics