`
huibin
  • 浏览: 757133 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

java中Oracle数据库访问不完全封装代码(仿.net的SQLHelper,)

    博客分类:
  • JDBC
阅读更多

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import oracle.jdbc.OracleTypes;
import oracle.jdbc.rowset.OracleCachedRowSet;

/**
 * @author hucl
 *
 *
 */
public abstract class OracleHelper {

  /**
   * @param String cmdtext,SQL语句
   * @param OracleParameter[] parms,参数集合
   * @return int,SQL语句影响的行数
   */
  public static int executeSql(String cmdtext, OracleParameter[] parms)
      throws Exception {
    PreparedStatement pstmt = null;
    Connection conn = null;

    try {
      conn = ConnectMgr.getConnect();

      pstmt = conn.prepareStatement(cmdtext);
      prepareCommand(pstmt, parms);

      return pstmt.executeUpdate();

    }
    catch (Exception e) {
      throw new Exception("executeNonQuery方法出错:" + e.getMessage());
    }
    finally {
      try {
        if (pstmt != null)
          pstmt.close();
        if (conn != null)
          conn.close();
      }
      catch (Exception e) {
        throw new Exception("执行executeNonQuery方法出错:" + e.getMessage());
      }
    }
  }

  /**
   *
   * @param cmdtext
   * @param parms
   * @return int[] 多条SQL的影响行数
   * @throws Exception
   */
  public static int[] executeSqlBatch(String cmdtext, Object[] parms)
      throws Exception {
    PreparedStatement pstmt = null;
    Connection conn = null;

    try {
      conn = ConnectMgr.getConnect();
      conn.setAutoCommit(false);
      pstmt = conn.prepareStatement(cmdtext);
      prepareCommand(pstmt, parms);

      int[] ret = pstmt.executeBatch();
      conn.commit();
      return ret;
    }
    catch (Exception e) {
      conn.rollback();
      throw new Exception("执行executeSqlBatch方法出错:" + e.getMessage());
    }
    finally {
      try {
        if (pstmt != null)
          pstmt.close();
        if (conn != null)
          conn.close();
      }
      catch (Exception e) {
        throw new Exception("执行executeSqlBatch方法出错:" + e.getMessage());
      }
    }
  }

  /**
   *
   * @param cmdtext
   * @param parms
   * @return ResultSet
   * @throws Exception
   */
  public static ResultSet executeSqlResultSet(String cmdtext,
      OracleParameter[] parms) throws Exception {
    PreparedStatement pstmt = null;
    Connection conn = null;

    try {
      conn = ConnectMgr.getConnect();

      pstmt = conn.prepareStatement(cmdtext);
      prepareCommand(pstmt, parms);
      return pstmt.executeQuery();

    }
    catch (Exception e) {
      throw new Exception("executeSqlResultSet方法出错:" + e.getMessage());
    }
    finally {
      try {
        if (pstmt != null)
          pstmt.close();
        if (conn != null)
          conn.close();
      }
      catch (Exception e) {
        throw new Exception("executeSqlResultSet方法出错:" + e.getMessage());
      }
    }
  }

  /**
   *
   * @param sptext 存储过程语句
   * @param parms OracleParameter[]
   * @return boolean 成功为true,失败为false
   * @throws Exception
   */
  public static boolean executeProcedure(String sptext, OracleParameter[] parms)
      throws Exception {
    Connection conn = null;
    CallableStatement cstmt = null;

    try {
      conn = ConnectMgr.getConnect();
      conn.setAutoCommit(true);

      cstmt = conn.prepareCall(sptext);
      prepareCommand(cstmt, parms);

      return cstmt.execute();

    }
    catch (Exception e) {
      throw new Exception("executeProcedure方法出错:" + e.getMessage());
    }
    finally {
      try {
        if (cstmt != null)
          cstmt.close();
        if (conn != null)
          conn.close();
      }
      catch (Exception e) {
        throw new Exception("执行executeProcedure方法出错:" + e.getMessage());
      }
    }
  }

  /**
   *
   * @param sptext 存储过程语句
   * @param parms OracleParameter[]
   * @return Object[] 出参的结果
   * @throws Exception
   */
  public static Object[] executeProcedureObject(String sptext,
      OracleParameter[] parms) throws Exception {
    Connection conn = null;
    CallableStatement cstmt = null;

    try {
      conn = ConnectMgr.getConnect();
      cstmt = conn.prepareCall(sptext);

      //应用参数
      prepareCommand(cstmt, parms);

      cstmt.execute();
      int count = parms.length;
      Object[] result = new Object[count];

      for (int i = 0; i < count; i++) {
        //判断是否有出参
        if (parms[i].getInorout().compareToIgnoreCase("OUT") >= 0) {
          /*判断是否是结果集,如果不是结果集,直接加到数组中;
           *如果是结果集执行else下的语句,把结果集写到OracleCachedRowSet中,ResultSet的关闭不会受到影响
           *原因:如果直接传ResultSet,
           *在执行finally语句时会连同ResultSet一同关闭,
           *在其他地方没法正确读出结果集
           */
          if (parms[i].getType() != OracleTypes.CURSOR) {
            result[i] = cstmt.getObject(parms[i].getIndex());
          }
          else {           
            OracleCachedRowSet ocrs = new OracleCachedRowSet();
            ResultSet rs = null;
            //取出ResutltSet对象
            rs = (ResultSet)(cstmt.getObject(parms[i].getIndex()));
            //写到OracleCachedRowSet对象
            ocrs.populate(rs);
            //关闭ResultSet
            rs.close();
            //把对象添加到数组
            result[i] = (Object)ocrs;
          }
          //判断结束
        }
        else {
          ;  //如果不是出参,执行下次循环
        }
      }

      return result;
    }
    catch (Exception e) {
      throw new Exception("executeProcedureObject方法出错:" + e.getMessage());
    }
    finally {
      try {       
        if (cstmt != null)
          cstmt.close();
        if (conn != null)
          conn.close();
      }
      catch (Exception e) {
        throw new Exception("executeProcedureObject方法出错:" + e.getMessage());
      }
    }
  }

  /**
   *
   * @param cmdtext SQL语句
   * @param name 列名
   * @param parms OracleParameter[]
   * @return Object
   * @throws Exception
   */
  public static Object executeSqlObject(String cmdtext, String name,
      OracleParameter[] parms) throws Exception {
    PreparedStatement pstmt = null;
    Connection conn = null;
    ResultSet rs = null;

    try {
      conn = ConnectMgr.getConnect();

      pstmt = conn.prepareStatement(cmdtext);
      prepareCommand(pstmt, parms);

      rs = pstmt.executeQuery();
      if (rs.next()) {
        return rs.getObject(name);
      }
      else {
        return null;
      }
    }
    catch (Exception e) {
      throw new Exception("executeSqlObject方法出错:" + e.getMessage());
    }
    finally {
      try {
        if (rs != null)
          rs.close();
        if (pstmt != null)
          pstmt.close();
        if (conn != null)
          conn.close();
      }
      catch (Exception e) {
        throw new Exception("executeSqlObject方法出错:" + e.getMessage());
      }
    }
  }

  /**
   *
   * @param cmdtext SQL语句
   * @param index 列名索引
   * @param parms OracleParameter[]
   * @return Object
   * @throws Exception
   */
  public static Object executeSqlObject(String cmdtext, int index,
      OracleParameter[] parms) throws Exception {
    PreparedStatement pstmt = null;
    Connection conn = null;
    ResultSet rs = null;

    try {
      conn = ConnectMgr.getConnect();

      pstmt = conn.prepareStatement(cmdtext);
      prepareCommand(pstmt, parms);

      rs = pstmt.executeQuery();
      if (rs.next()) {
        return rs.getObject(index);
      }
      else {
        return null;
      }
    }
    catch (Exception e) {
      throw new Exception("executeSqlObject方法出错:" + e.getMessage());
    }
    finally {
      try {
        if (rs != null)
          rs.close();
        if (pstmt != null)
          pstmt.close();
        if (conn != null)
          conn.close();
      }
      catch (Exception e) {
        throw new Exception("executeSqlObject方法出错:" + e.getMessage());
      }
    }
  }

  /**
   * @param pstmt
   * @param cmdtext
   * @param parms Object[]
   * @throws Exception
   */
  private static void prepareCommand(PreparedStatement pstmt, Object[] parms)
      throws Exception {
    int count = parms.length;
    for (int i = 0; i < count; i++) {
      OracleParameter[] op;
      op = (OracleParameter[]) parms[i];
      prepareCommand(pstmt, op);
      pstmt.addBatch();
    }
  }

  /**
   *
   * @param pstmt
   * @param parms
   * @throws Exception
   */
  private static void prepareCommand(PreparedStatement pstmt,
      OracleParameter[] parms) throws Exception {
    if (parms == null) {
      return;
    }

    int count;
    count = parms.length;

    for (int i = 0; i < count; i++) {
      OracleParameter op = new OracleParameter();
      op = parms[i];

      pstmt.setObject(op.getIndex(), op.getValue());
    }
  }

  /**
   *
   * @param cstmt
   * @param parms
   * @throws Exception
   */
  private static void prepareCommand(CallableStatement cstmt,
      OracleParameter[] parms) throws Exception {
    if (parms == null) {
      return;
    }

    int count;
    count = parms.length;

    try {
      for (int i = 0; i < count; i++) {
        OracleParameter op = new OracleParameter();
        op = parms[i];

        if (op.getInorout().compareToIgnoreCase("OUT") >= 0)
          cstmt.registerOutParameter(op.getIndex(), op.getType());
        else
          cstmt.setObject(op.getIndex(), op.getValue());
      }
    }
    catch (Exception e) {
      System.out.println(e.getMessage());
    }

  }

  public static void main(String[] args) throws Exception {
    /*
     //测试1
     OracleParameter[] parms;
     parms = new OracleParameter[] {
     new OracleParameter(1,"4")
     };
     OracleHelper.executeNonQuery(1,"insert into SYS_CONFIG(name) values(?)",parms);
    
    
     //测试2
     Object[] parms;   
     OracleParameter[] op1;
     op1 = new OracleParameter[] {
     new OracleParameter(1,"4")
     };
    
     OracleParameter[] op2;   
     op2 = new OracleParameter[] {
     new OracleParameter(1,"5")
     };
    
     OracleParameter[] op3;   
     op3 = new OracleParameter[] {
     new OracleParameter(1,"6")
     };
    
     parms = new Object[] {
     op1,op2,op3
     };   
    
     String sql =  "insert into SYS_CONFIG(NAME) VALUES(?)";

    
     OracleHelper.executeNonQuery(sql,parms);
    
     //测试3
     Object o = OracleHelper.executeSqlObject("select name from SYS_CONFIG ","name",null);
     System.out.println(o);
    
    //测试4
    Object[] o;
    OracleParameter[] parms;
    parms = new OracleParameter[] {
        new OracleParameter(1, "1"),
        new OracleParameter(2, java.sql.Types.VARCHAR)
    };

    o = OracleHelper.executeProcedureObject(
        "{call USP_SYS_CONFIG_GETVALUE(?,?)}", parms);

    if (o != null) {
      System.out.println(o[1].toString());
    }
    else {
      System.out.println("null");
    }
    */
  }
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/utilities/archive/2005/12/21/557924.aspx

分享到:
评论

相关推荐

    VB.NET SQLHelper DLL 包.rar

    标题 "VB.NET SQLHelper DLL 包" 涉及的核心技术是使用VB.NET语言开发一个SQLHelper类库,该类库通常是为了简化数据库操作而设计的。SQLHelper类可以帮助开发者更方便、高效地执行SQL语句,减少重复代码,提高代码的...

    用了很多年的asp.net SQLHelper,封装的方法绝对够用

    用了很多年的asp.net SQLHelper,封装的方法绝对够用,工作中一直在用

    ADO.NET自己封装SqlHelper类

    在.NET框架中,ADO.NET是用于访问数据库的主要技术,它提供了与各种数据库系统交互的接口。在实际开发中,为了提高代码的复用性和可维护性,开发者常常会自封一个SqlHelper类来简化数据库操作。这个SqlHelper类通常...

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

    在C#编程环境中,Oracle数据库的连接和操作通常需要通过ADO.NET或者其他第三方库来实现。在本场景中,我们关注的是一个名为"C#中oracle连接数据库的封装类"的主题,这个主题涉及到创建一个名为`DbHelperOra.cs`的类...

    java连接oracle数据库———sqlHelper类

    本篇文章将深入探讨如何创建并使用`sqlHelper`类,以及它在Java与Oracle数据库集成中的关键作用。 首先,`sqlHelper`类通常包含以下几个核心功能: 1. **数据库连接**:使用JDBC(Java Database Connectivity)API...

    ADO.NET数据库SqlHelper

    ADO.NET中简单实用的三种方法,并将其进行封装,便于操作者进行开发与使用。

    .Net 连接数据库返回单行,多行多列

    在.NET Framework中,连接并操作数据库是开发过程中非常常见的需求之一。通过提供的描述与部分代码内容,我们可以深入了解如何使用.NET Framework的数据提供程序进行数据库的操作,尤其是如何返回单行或多行多列的...

    使用SqlHelper查询数据库记录 编程小实例,C++.net源代码编写

    在.NET框架中,SqlHelper是一个常用的辅助类库,它简化了与SQL Server数据库的交互,尤其是在执行SQL命令时。这个编程小实例展示了如何利用C++.NET来利用SqlHelper查询数据库记录。下面,我们将深入探讨这一主题,...

    使用SqlHelper增加数据库记录 编程小实例,C++.net源代码编写

    在.NET框架中,SqlHelper是一个常用的辅助类,用于简化与SQL Server数据库的交互。这个编程小实例主要展示了如何使用C++ .NET来实现SqlHelper,从而便捷地向数据库添加新记录。下面我们将深入探讨这个话题。 首先,...

    Microsoft Application Blocks for .NET(SqlHelper)

    - 提高代码可读性和可维护性:通过封装数据库操作,代码更简洁,易于理解和维护。 - 数据访问的安全性:通过参数化查询,降低了SQL注入的风险。 - 性能优化:利用ADO.NET连接池,减少创建和销毁连接的开销。 缺点:...

    VB.Net版的SqlHelper

    这个类库的主要目标是提高代码的可读性、可维护性和安全性,通过封装数据库连接、事务处理以及参数化查询等常见操作,帮助开发者避免SQL注入等安全问题。 SqlHelper类库通常包含以下功能: 1. **ExecuteNonQuery**...

    .net 数据库访问组件

    开源的.NET数据库访问组件提供了一个灵活且成本效益高的解决方案,允许开发者查看和修改源代码以适应特定需求。持久层工具是应用程序设计中的一个重要组成部分,它负责将业务对象的数据保存到数据库中,确保数据在...

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

    通过jdbc的方式访问数据库: 1.程序是整理的韩顺平oracle教学视频中的一个例子。 2.假设本机安装了oracle...4.程序对数据库操作进行了一定程度的封装,封装函数放在SQLHelper类中,在TestOracleCrud中对函数进行测试。

    asp.net SqlHelper.cs

    asp.net 连接sql server 工具类,我也不想要资源分数,但没有0分选项

    VB.NET实现SqlHelper数据库操作组件

    VB.NET实现SqlHelper数据库操作组件,组件中包含数据库操作方法。SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封装过后通常是只需要给方法传入一些参数...

    C# 链接Oracle数据库操作类 SqlHelper.cs

    C# 链接Oracle数据库操作类 SqlHelper.cs,.NET3.0以上即可使用,涵盖了oracle数据库的增删改查操作,并可调用存储过程,因是源码,可根据自己实际需要再修改,灵活性较大

    SqlHelper OracleHelper 下载

    SqlHelper和OracleHelper是.NET开发中常用的两个辅助类库,主要用于简化数据库操作,尤其是SQL Server和Oracle数据库的CRUD(创建、读取、更新、删除)操作。在.NET框架下,开发者经常使用ADO.NET来与数据库进行交互...

    java使用JDBC和ODBC连接oracle数据库

    Java通过JDBC(Java Database Connectivity)和ODBC(Open Database Connectivity)来连接Oracle数据库是两种常见的数据访问方式。本文将详细介绍这两种方法,并提供相关的技术知识。 首先,JDBC是Java平台的标准...

    ADO.NET数据库实例

    ADO.NET是微软.NET框架下的一种数据访问技术,用于与各种关系型数据库进行交互,包括SQL Server、Oracle、MySQL等。这个实例着重展示了如何利用ADO.NET进行数据库的基本操作,如连接数据库、执行SQL语句、处理结果集...

    Asp.Net数据库帮助类 SQLHelper.cs

    总之,SQLHelper.cs作为Asp.Net中的数据库辅助类,通过封装常见的数据库操作,降低了开发难度,提高了代码复用性。理解和熟练使用SQLHelper.cs,能够有效地提升Asp.Net项目中的数据访问层的开发效率。

Global site tag (gtag.js) - Google Analytics