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;
}
}
分享到:
相关推荐
数据库底层操作与配置是一个由个人开发的代码自编译工具,用来生成支持特定框架的数据字段数据集,可以将数据库完全封装,使用工具后,不用再考虑数据库,也不用写Sql语句,可以极大的提高工作效率,完全通过一些...
对于"增删改查"的数据库底层操作,C#代码会执行SQL语句来实现。例如,创建一条新记录可能需要执行INSERT INTO语句,查询数据则是SELECT语句,更新记录用UPDATE,删除记录则用DELETE。在Entity Framework中,这些操作...
数据库底层操作组件,同时支持MSSQL\ORACLE 数据库 操作,根据配置文件自适应数据库,统一接口,无需改变代码,同时集成了众多优秀函数,例如 批量插入,可以把datagrid\datagridview\datatable 等数据一次性插入到...
数据库底层操作,调用相当简单,可以完成Sql、Oracle数据的增、删、改、执行存储过程功能,所有封装的方法请看文件"ConcSoft.Database.TXT",调用事例请看"调用ConcSoft.Database.dll事例.TXT",带日志追踪
一、查询 1、可选择字段查询 2、可进行字段描述 3、可连接其它数据库、数据表,进行复杂的查询 4、可写复杂的条件 二、插入、修改、删除 较好地完成了插入、修改、删除操作,...
本主题将深入探讨"C#.Net底层操作数据库及常用功能封装类"的相关知识点,包括如何封装数据库操作、消息处理、加密解密、邮件发送以及数据字符串处理等功能。 首先,我们来关注数据库操作。在C#中,可以使用ADO.NET...
本资料包“C#操作各种数据库底层源码 连接数据库代码”正是针对这一主题,涵盖了C#与Access、MySQL和SQLServer数据库的交互实现,提供了完整的底层源码,对于开发者来说,无论是学习还是实际项目开发,都具有极高的...
在IT行业中,数据底层操作是核心任务之一,它涉及到如何高效、安全地访问和管理存储在数据库中的数据。"简易操作数据底层"这个主题聚焦于简化数据库的增删改查(CRUD)操作,适用于Oracle和SQL Server等多种主流...
本文将深入探讨如何使用C#语言设计优秀的数据库操作底层,并利用工厂模式来实现高效且灵活的数据库接口。C#作为.NET框架的主要编程语言,拥有丰富的库和工具支持数据库连接与操作。 首先,我们关注的是“接口”。在...
"数据库底层开闭封装"是一个最佳实践,旨在优化数据库访问,提高代码的可维护性和可重用性。本篇文章将深入探讨这一概念,并结合Java和MySQL环境进行详细阐述。 首先,"数据库底层开闭封装"是指将数据库连接的创建...
标题中的“一款封装java访问数据库的底层数据库操作的jar”指的是一个Java库,它将数据库交互的底层细节进行了抽象和封装,使得开发者可以更高效、更便捷地在Java应用程序中进行数据库操作。这样的库通常会包含一...
教程从基础的数据库驱动程序开始,引导读者逐步理解数据库编程的核心概念,通过丰富的代码实例和实践项目,帮助读者掌握数据库底层操作的技巧与乐趣。 在VC++数据库编程中,主要涉及以下几个关键知识点: 1. **...
ORM技术在现代软件开发中广泛应用,因为它能够减少开发者对数据库底层操作的关注,让他们更专注于业务逻辑。 EasyDBO v0.1.0测试版可能包含以下关键特性: 1. **对象映射**:EasyDBO会自动将数据库表结构映射为类...
DotNet数据库底层配置是一个由个人开发的代码自编译工具,用来生成支持.NET框架的数据字段数据集,可以将数据库完全封装,使用工具后,不用再考虑数据库,也不用写Sql语句,可以极大的提高工作效率,完全通过一些...
在.NET框架中,连接MySQL数据库通常涉及到使用MySQL的数据提供者——`MySql.Data.dll`库。这个库由Oracle公司提供,允许.NET开发者通过C#等...使用这样的助手类,你可以专注于业务逻辑,而不是数据库连接的底层细节。
在本Java大作业中,我们将深入探讨如何使用Java语言实现数据库的底层逻辑,进而封装成易于使用的实体类,以支持创建表、查询等常见的数据库操作。这个项目旨在帮助开发者理解数据库的基本工作原理,并掌握Java与...
标题中的“通用数据库操作类库”是指一种设计用于跨多种数据库系统工作的类库,它允许开发者通过统一的接口进行数据存取,而无需关注底层数据库的具体实现。这个类库通常包含了对各种数据库如Oracle、SQL Server、...
### 面向SAP的Oracle数据库应用底层架构 #### 概述 本文将深入探讨在SAP环境下Oracle数据库的应用底层架构。SAP系统作为全球领先的企业资源规划(ERP)解决方案之一,在诸多企业中得到了广泛的应用。而Oracle数据库...
数据库操作简易工具是一种高效便捷的解决方案,专为简化SQL...通过它,用户可以专注于数据本身,而无需过多关注底层的数据库管理系统。这对于小型企业、开发者以及数据库管理员来说,无疑是一个高效且实用的工具。
本文将深入探讨ASP.NET数据库操作的底层代码精华,帮助新手快速理解和掌握这一关键技能。 1. **ADO.NET架构** ADO.NET由几个核心组件构成,包括Connection(连接)、Command(命令)、DataAdapter(数据适配器)、...