`
jbeduhai
  • 浏览: 507201 次
  • 性别: Icon_minigender_1
  • 来自: 山东
社区版块
存档分类
最新评论

java同时调用oracle和db2数据库存储过程:添加/修改/删除/查询的处理方法

    博客分类:
  • java
阅读更多

java同时调用oracle和db2数据库存储过程:添加,修改,删除,查询的处理方法

在java开发过程中,经常会遇到调用存储过程,有时用调用oracle数据库,有时调用db2数据库。。。。那么如何同时在一个项目中调用两种不同的大型数据库呢????

 以下代码是我以前做的项目中用到的同时调用oracle和db2数据库:添加,修改,删除,查询的处理方法,以供大家用时间做为参考,

如有不同的意见,请说明下,谢谢

package com.jbeduhai.util;

import java.sql.*;
import java.util.*;
import oracle.jdbc.OracleTypes;
import com.bstek.dorado.common.DoradoContext;
import com.bstek.dorado.common.MessageHelper;
import com.bstek.dorado.common.ds.ConnectionHelper;
import com.jbeduhai.base.jbeduhaiMsg;

public class jbeduhaiTemplate {
 private String flag = "0";

 private String retMsg = "";

 private Connection conn = null;

 private CallableStatement stored_p = null;

 private ResultSet rs = null;

 private String dialect = null;

 private String dbsql = null;

 private String dbflag = "0";

 private int intflag = 0;

 private String oracle = "Oracle";

 private String db2 = "DB2";

 private jbeduhaiMsg msg = null;

 public List query(String sql, Object objs[], jbeduhaiMapper mapper)
   throws Exception {

  this.getDialect(sql);
  System.out.println("sql================>>>" + "{call " + dbsql + "}");
  conn = this.getConnection();
  stored_p = conn.prepareCall("{call " + dbsql + "}");
  for (int i = 0; i < objs.length; i++) {
   if (objs[i] == null) {
    objs[i] = "";
   }
   if ("".equals(objs[i])) {
    stored_p.setString(i + 1, null);
   } else {
    stored_p.setObject(i + 1, objs[i]);
   }
   System.out.println("params" + i + "================>>>:" + objs[i]);
  }
  stored_p.registerOutParameter(objs.length + 1, Types.CHAR);
  stored_p.registerOutParameter(objs.length + 2, Types.CHAR);
  if (dbflag == "1" || dbflag.equals("1")) {
   stored_p.registerOutParameter(objs.length + 3, OracleTypes.CURSOR);
  }
  stored_p.execute();

  flag = stored_p.getString(objs.length + 1);
  retMsg = stored_p.getString(objs.length + 2);

  if (!flag.equals("0")) {
   // throw new Exception(retMsg);
   MessageHelper.addMessage(DoradoContext.getContext(), "flag",flag);
   MessageHelper.addMessage(DoradoContext.getContext(), "retMsg",retMsg);
   return null;
  }
  if (dbflag == "1" || dbflag.equals("1")) {
   rs = (ResultSet) stored_p.getObject(objs.length + 3);
  }
  if (dbflag == "2" || dbflag.equals("2")) {
   rs = stored_p.getResultSet();
  }
  if (rs == null || rs.equals("")) {
   return null;
  }
  List list = new ArrayList();
  try {
   while (rs.next()) {
    Object obj = mapper.processResult(rs);
    list.add(obj);
   }
  } finally {
   this.closeConnection();
  }

  return list;
 }

 /**
  * 取过程最后一个输出参数为字符串的方法
  *
  * @param sql
  * @param objs
  * @return
  * @throws Exception
  */

 public jbeduhaiMsg query1(String sql, Object objs[]) throws Exception {
  msg = new jbeduhaiMsg();
  int fg;
  // this.getDialect(sql);
  String dbsql = sql;
  System.out.println("sql================>>>" + "{call " + dbsql + "}");
  conn = this.getConnection();
  stored_p = conn.prepareCall("{call " + dbsql + "}");
  for (int i = 0; i < objs.length; i++) {
   if (objs[i] == null) {
    objs[i] = "";
   }
   if ("".equals(objs[i])) {
    stored_p.setString(i + 1, null);
   } else {
    stored_p.setObject(i + 1, objs[i]);
   }
   System.out.println("params" + i + "================>>>:" + objs[i]);
  }

  stored_p.registerOutParameter(objs.length + 1, Types.CHAR);
  stored_p.registerOutParameter(objs.length + 2, Types.CHAR);
  stored_p.registerOutParameter(objs.length + 3, Types.CHAR);
  stored_p.execute();

  fg = stored_p.getInt(objs.length + 1);
  // String retMsg = stored_p.getString(objs.length + 2);
  String resultSet = stored_p.getString(objs.length + 3);

  msg.setCode(fg);
  msg.setMessage(resultSet);

  if (!flag.equals("0")) {
   return null;
  }
  try {
   // stored_p.close();
  } finally {
   this.closeConnection();
  }
  return msg;
 }

 /**
  * 取过程最后一个输出参数为字符串的方法 输出参数为4个

  *
  * @param sql
  * @param objs
  * @return
  * @throws Exception
  */

 public jbeduhaiMsg queryOut4(String sql, Object objs[]) throws Exception {
  msg = new jbeduhaiMsg();
  int fg;
  // this.getDialect(sql);
  String dbsql = sql;
  System.out.println("sql================>>>" + "{call " + dbsql + "}");
  conn = this.getConnection();
  stored_p = conn.prepareCall("{call " + dbsql + "}");
  for (int i = 0; i < objs.length; i++) {
   if (objs[i] == null) {
    objs[i] = "";
   }
   if ("".equals(objs[i])) {
    stored_p.setString(i + 1, null);
   } else {
    stored_p.setObject(i + 1, objs[i]);
   }
   System.out.println("params" + i + "================>>>:" + objs[i]);
  }

  stored_p.registerOutParameter(objs.length + 1, Types.CHAR);
  stored_p.registerOutParameter(objs.length + 2, Types.CHAR);
  stored_p.registerOutParameter(objs.length + 3, Types.CHAR);
  stored_p.registerOutParameter(objs.length + 4, Types.CHAR);
  stored_p.execute();

  fg = stored_p.getInt(objs.length + 1);
  // String retMsg = stored_p.getString(objs.length + 2);
  String resultSet = stored_p.getString(objs.length + 3);
  // String resultSetName = stored_p.getString(objs.length + 4);

  msg.setCode(fg);
  msg.setMessage(resultSet);

  if (!flag.equals("0")) {
   return null;
  }
  try {
   // stored_p.close();
  } finally {
   this.closeConnection();
  }
  return msg;
 }

 /*
  *
  * 取过程最后一个输出参数为字符串的方法 方法名:query1 sql :调用的过程SQL objs[] :传入的输入参数' mapper :
  */

 public List query1(String sql, Object objs[], jbeduhaiMapper mapper)
   throws Exception {

  // this.getDialect(sql);
  String dbsql = sql;
  System.out.println("sql================>>>" + "{call " + dbsql + "}");
  conn = this.getConnection();
  stored_p = conn.prepareCall("{call " + dbsql + "}");
  for (int i = 0; i < objs.length; i++) {
   if (objs[i] == null) {
    objs[i] = "";
   }
   if ("".equals(objs[i])) {
    stored_p.setString(i + 1, null);
   } else {
    stored_p.setObject(i + 1, objs[i]);
   }
   System.out.println("params" + i + "================>>>:" + objs[i]);
  }

  stored_p.registerOutParameter(objs.length + 1, Types.CHAR);
  stored_p.registerOutParameter(objs.length + 2, Types.CHAR);
  stored_p.registerOutParameter(objs.length + 3, Types.CHAR);
  stored_p.execute();

  flag = stored_p.getString(objs.length + 1);
  String msgg = stored_p.getString(objs.length + 3);
  System.out.println(msgg);
  List list = new ArrayList();
  list.add(msgg);
  if (!flag.equals("0")) {
   return null;
  }
  try {
   // stored_p.close();
  } finally {
   this.closeConnection();
  }
  return list;
 }
 
 /*
  *
  * 取过程第二个输出参数为Number的方法 方法名:query2 sql :调用的过程SQL objs[]
  *
 */
 public int query2Para(String sql, Object objs[])
   throws Exception {

  // this.getDialect(sql);
  int seqNo = 0;
  String dbsql = sql;
  System.out.println("sql================>>>" + "{call " + dbsql + "}");
  conn = this.getConnection();
  stored_p = conn.prepareCall("{call " + dbsql + "}");
  for (int i = 0; i < objs.length; i++) {
   if (objs[i] == null) {
    objs[i] = "";
   }
   if ("".equals(objs[i])) {
    stored_p.setString(i + 1, null);
   } else {
    stored_p.setObject(i + 1, objs[i]);
   }
   System.out.println("params" + i + "================>>>:" + objs[i]);
  }

  stored_p.registerOutParameter(objs.length + 1, Types.CHAR);
  stored_p.registerOutParameter(objs.length + 2, Types.CHAR);
  stored_p.registerOutParameter(objs.length + 3, Types.CHAR);
  stored_p.execute();

  seqNo = stored_p.getInt(objs.length + 1);
  System.out.println(flag);
  flag = stored_p.getString(objs.length + 2);
  System.out.println(seqNo);
  String msgg = stored_p.getString(objs.length + 3);
  System.out.println(msgg);

  if (!flag.equals("0")) {
   return 0;
  }
  try {
   // stored_p.close();
  } finally {
   this.closeConnection();
  }
  return seqNo;
 }
 
 
 /**
  * 取过程倒数第三个输出参数为字符串的方法
  *
  * @param sql
  * @param objs
  * @return
  * @throws Exception
  */

 public jbeduhaiMsg query3(String sql, Object objs[]) throws Exception {
  msg = new jbeduhaiMsg();
  int fg;
  // this.getDialect(sql);
  String dbsql = sql;
  System.out.println("sql================>>>" + "{call " + dbsql + "}");
  conn = this.getConnection();
  stored_p = conn.prepareCall("{call " + dbsql + "}");
  for (int i = 0; i < objs.length; i++) {
   if (objs[i] == null) {
    objs[i] = "";
   }
   if ("".equals(objs[i])) {
    stored_p.setString(i + 1, null);
   } else {
    stored_p.setObject(i + 1, objs[i]);
   }
   System.out.println("params" + i + "================>>>:" + objs[i]);
  }

  stored_p.registerOutParameter(objs.length + 1, Types.CHAR);
  stored_p.registerOutParameter(objs.length + 2, Types.CHAR);
  stored_p.registerOutParameter(objs.length + 3, Types.CHAR);
  stored_p.execute();

  String resultSet = stored_p.getString(objs.length + 1);
  fg = stored_p.getInt(objs.length + 2);
  String retMsg = stored_p.getString(objs.length + 3);
 

  msg.setCode(fg);
  msg.setMessage(retMsg);
  msg.setOutString(resultSet);

  if (!flag.equals("0")) {
   return null;
  }
  try {
   // stored_p.close();
  } finally {
   this.closeConnection();
  }
  return msg;
 }
 
 /**
  * 取过程第三个输出参数为字符串的方法

  *
  * @param sql
  * @param objs
  * @return
  * @throws Exception
  */

 public jbeduhaiMsg queryout3(String sql, Object objs[]) throws Exception {
  msg = new jbeduhaiMsg();
  int fg;
  // this.getDialect(sql);
  String dbsql = sql;
  System.out.println("sql================>>>" + "{call " + dbsql + "}");
  conn = this.getConnection();
  stored_p = conn.prepareCall("{call " + dbsql + "}");
  for (int i = 0; i < objs.length; i++) {
   if (objs[i] == null) {
    objs[i] = "";
   }
   if ("".equals(objs[i])) {
    stored_p.setString(i + 1, null);
   } else {
    stored_p.setObject(i + 1, objs[i]);
   }
   System.out.println("params" + i + "================>>>:" + objs[i]);
  }

  stored_p.registerOutParameter(objs.length + 1, Types.CHAR);
  stored_p.registerOutParameter(objs.length + 2, Types.CHAR);
  stored_p.registerOutParameter(objs.length + 3, Types.CHAR);
  stored_p.execute();

  fg = stored_p.getInt(objs.length + 1);
  String retMsg = stored_p.getString(objs.length + 2);
  String status = stored_p.getString(objs.length + 3);
 
  msg.setCode(fg);
  msg.setMessage(retMsg);
  msg.setOutString(status);

  if (!flag.equals("0")) {
   return null;
  }
  try {
   // stored_p.close();
  } finally {
   this.closeConnection();
  }
  return msg;
 }
 

 public jbeduhaiMsg update(String sql, Object objs[]) throws Exception {
  int flag = 0;
  String dbsql = sql;
  msg = new jbeduhaiMsg();

  System.out.println("sql================>>>" + "{call " + dbsql + "}");
  conn = this.getConnection();
  conn.setAutoCommit(false);
  try {
   stored_p = conn.prepareCall("{call " + dbsql + "}");
   for (int i = 0; i < objs.length; i++) {
    if (objs[i] == null) {
     objs[i] = "";
    }
    if ("".equals(objs[i])) {
     stored_p.setString(i + 1, null);
    } else {
     stored_p.setObject(i + 1, objs[i]);
    }
    System.out.println("params" + i + "================>>>:"
      + objs[i]);
   }
   stored_p.registerOutParameter(objs.length + 1, Types.CHAR);
   stored_p.registerOutParameter(objs.length + 2, Types.CHAR);
   stored_p.execute();

   flag = stored_p.getInt(objs.length + 1);
   retMsg = stored_p.getString(objs.length + 2);

   if (flag != 0)
    conn.rollback();
   else
    conn.commit();

   msg.setCode(flag);
   msg.setMessage(retMsg);

  } finally {
   this.closeConnection();
  }
  return msg;
 }

 /*
  * 查询,第三个参数为游标
  */

 public List queryOther(String sql, Object objs[], jbeduhaiMapper mapper)
   throws Exception {

  this.getDialect(sql);
  System.out.println("sql================>>>" + "{call " + dbsql + "}");
  conn = this.getConnection();
  stored_p = conn.prepareCall("{call " + dbsql + "}");

  stored_p.registerOutParameter(1, Types.CHAR);
  stored_p.registerOutParameter(2, Types.CHAR);
  if (dbflag == "1" || dbflag.equals("1")) {
   stored_p.registerOutParameter(3, OracleTypes.CURSOR);
  }
  for (int i = 0; i < objs.length; i++) {
   if (objs[i] == null) {
    objs[i] = "";
   }
   if ("".equals(objs[i])) {
    if (dbflag == "1" || dbflag.equals("1")) {
     stored_p.setString(i + 4, null);
    }
    if (dbflag == "2" || dbflag.equals("2")) {
     stored_p.setObject(i + 3, objs[i]);
    }
   } else {
    if (dbflag == "1" || dbflag.equals("1")) {
     stored_p.setObject(i + 4, objs[i]);
    }
    if (dbflag == "2" || dbflag.equals("2")) {
     stored_p.setObject(i + 3, objs[i]);
    }
   }
   System.out.println("params" + i + "================>>>:" + objs[i]);
  }
  stored_p.execute();

  flag = stored_p.getString(1);
  retMsg = stored_p.getString(2);

  if (!flag.equals("0")) {
   // throw new Exception(retMsg);
   MessageHelper.addMessage(DoradoContext.getContext(), retMsg);
  }
  if (dbflag == "1" || dbflag.equals("1")) {
   rs = (ResultSet) stored_p.getObject(3);
  }
  if (dbflag == "2" || dbflag.equals("2")) {
   rs = stored_p.getResultSet();
  }
  if (rs == null || rs.equals("")) {
   return null;
  }

  List list = new ArrayList();
  try {
   while (rs.next()) {
    Object obj = mapper.processResult(rs);
    list.add(obj);
   }
   // stored_p.close();
  } finally {
   this.closeConnection();
  }

  return list;
 }

 /**
  *
  * @param sql
  * @param objs
  * @return
  * @throws Exception
  */
 public jbeduhaiMsg updateOther(String sql, Object objs[]) throws Exception {
  int flag = 0;
  String dbsql = sql;
  msg = new jbeduhaiMsg();

  System.out.println("sql================>>>" + "{call " + dbsql + "}");
  conn = this.getConnection();
  conn.setAutoCommit(false);
  try {
   stored_p = conn.prepareCall("{call " + dbsql + "}");

   stored_p.registerOutParameter(1, Types.CHAR);
   stored_p.registerOutParameter(2, Types.CHAR);

   for (int i = 0; i < objs.length; i++) {
    if (objs[i] == null) {
     objs[i] = "";
    }
    if ("".equals(objs[i])) {
     stored_p.setString(i + 3, null);
    } else {
     stored_p.setObject(i + 3, objs[i]);
    }
    System.out.println("params" + i + "================>>>:"
      + objs[i]);
   }
   stored_p.execute();

   flag = stored_p.getInt(1);
   retMsg = stored_p.getString(2);

   if (flag != 0)
    conn.rollback();
   else
    conn.commit();

   msg.setCode(flag);
   msg.setMessage(retMsg);

   // stored_p.close();
  } finally {
   this.closeConnection();
  }
  return msg;
 }

 public Connection getConnection() throws Exception {
  conn = ConnectionHelper.getDefaultConnection();
  return conn;
 }

 public void closeConnection() throws Exception {
  stored_p.close();
  conn.close();
 }

 public void getDialect(String sql) {
  dialect = ConnectionHelper.getDefaultDialect().toString();
  System.out.println("dialect================>>>" + dialect);

  intflag = dialect.indexOf(oracle);
  if (intflag > 0) {
   dbflag = "1";
   dbsql = sql;
   System.out.println("DataSource================>>>" + oracle);
  }
  intflag = dialect.indexOf(db2);
  if (intflag > 0) {
   dbflag = "2";
   dbsql = sql.substring(0, sql.length()-3)+")";
   //dbsql = sql.replace("(?,", "(");
   System.out.println("DataSource================>>>" + db2);
  }
 }
}

 

如果有遇到这样的问题解决不了了,

QQ:15900487756

EMail:jbeduhai@126.com  大家可以共论一下...

 

分享到:
评论
1 楼 hshqcn 2009-02-22  
手机写上了?

相关推荐

    Oracle,DB2,mysql的驱动以及用Java连接数据库的方法

    在IT行业中,数据库是存储和管理数据的核心工具。Oracle、DB2和MySQL是三种非常流行的数据库管理系统,广泛应用于企业级应用、数据分析以及互联网服务。Java作为一种多平台支持的编程语言,常常被用来与这些数据库...

    java 连接各种数据库的代码

    2. **DB2数据库**: 需要加载`com.ibm.db2.jdbc.app.DB2Driver`驱动,并设置URL为`jdbc:db2://&lt;hostname&gt;:&lt;port&gt;/&lt;database_name&gt;`,例如:`jdbc:db2://localhost:5000/sample`。 3. **SQL Server 7.0/2000数据库*...

    各种数据库的链接(JDBC)

    以上代码演示了如何使用JDBC连接到MySQL数据库,并给出了如何连接到Oracle和DB2数据库的示例。实际应用中,为了增强代码的灵活性和可维护性,建议将数据库连接信息(如URL、用户名和密码)存储在配置文件中,而不是...

    DB2数据库用户手册

    - **SP错误处理用法**:可以使用`TRY-CATCH`结构来捕获和处理存储过程中可能出现的错误。 - **values的使用**:`VALUES`语句可用于直接插入单行或多行数据到表中。 - **给select语句指定隔离级别**:在`SELECT`语句...

    Oracle调用Java代码过程

    Oracle调用Java代码过程是一种将Java程序集成到Oracle数据库中的技术,主要应用于处理特定的业务逻辑,例如在本例中,是为了访问异构数据库(如DB2)的数据。以下是详细的步骤和注意事项: **步骤一:加载JDBC驱动*...

    数据库存储过程的写法\\连接各种数据库写法

    ### 数据库存储过程的写法及连接各种数据库的方法 #### 概述 本文将详细介绍如何在不同的数据库系统中编写存储过程以及如何建立与这些数据库的连接。存储过程是一种预编译的SQL代码块,它可以存储在数据库服务器上...

    Java数据库操作精粹随书源码

    Java数据库操作精粹随书源码是一份宝贵的资源,它为开发者提供了全面了解和实践Java与各种数据库交互的实例。这份源码集包含了对Oracle、MSSQL(Microsoft SQL Server)、MySQL、DB2以及ACCESS等常见数据库的多种...

    java和数据库的连接教程

    JDBC由一组用Java编程语言编写的类和接口组成,这些类和接口定义了用于连接到数据库、创建SQL语句以及处理结果集的方法。 尽管JDBC提供了一套标准的API,但由于不同数据库供应商的具体实现可能存在差异,因此在实际...

    JAVA连接各种数据库的实例

    在Java编程中,连接各种类型的数据库是常见的任务。这些示例展示了如何使用Java Database Connectivity (JDBC) API来建立数据库连接。以下是对标题和描述中所述知识点的详细说明: 1. **JDBC API**: JDBC是Java平台...

    Sqlserver2000,2005,Oracle10g,Mysql,DB2,AS400数据库驱动

    本文将深入探讨标题中提及的几个主流数据库系统——SQL Server 2000与2005、Oracle 10g、MySQL、DB2以及AS400,以及如何使用Java进行数据库驱动加载和建立连接。 1. SQL Server 2000/2005: Microsoft SQL Server...

    JAVA数据库连接大全.pdf

    此外,JDBC还提供了Statement、PreparedStatement和CallableStatement等对象,用于执行SQL查询、更新和存储过程调用。 总结来说,JDBC是Java开发者与数据库交互的标准接口,提供了跨数据库的通用性,但实际使用时仍...

    多种数据库访问的例子代码.rar

    在IT领域,数据库访问是应用程序开发中的核心环节,它允许程序与各种类型的数据库进行交互,获取、存储和处理数据。本资源"多种数据库访问的例子代码.rar"提供了针对Oracle、MySql和DB2这三种主流数据库的访问示例,...

    JDBC链接数据库大全

    除了上述的基础链接,JDBC还支持事务管理、存储过程调用、元数据查询等高级功能。例如,通过`Statement`或`PreparedStatement`对象可以执行SQL语句,通过`ResultSet`对象可以获取查询结果。此外,为了提高性能和代码...

    Java 连接多种数据库代码参考

    ### Java JDBC 连接多种数据库的方法详解 在Java开发中,使用JDBC(Java Database Connectivity)来连接并操作不同类型的数据库是非常常见的需求。本文将详细介绍如何通过JDBC连接Oracle、DB2、SQL Server、Sybase...

    ORACLE转DB2对照全解

    **注意:** Oracle和DB2都支持通过存储过程传递集合参数,但语法略有不同。 #### 五、条件处理 条件处理涉及到如何在程序中处理错误和异常情况。 ##### 5.1 存储过程中的条件处理 **Oracle:** ```sql BEGIN -- ...

    Java调用存储过程.doc

    Java调用存储过程是数据库操作中的常见需求,特别是在...总的来说,Java调用存储过程是数据库编程中常用的技术,它提供了将数据库操作封装和优化的机会,同时利用了数据库自身的优势,提升了系统的整体性能和可维护性。

    使用JDBC连接各种数据库总结

    4. **使用Connection对象**:一旦建立了连接,就可以通过`Connection`对象进行数据库操作,如创建`Statement`或`PreparedStatement`来执行SQL查询,使用`CallableStatement`调用存储过程,以及管理事务等。...

    java数据库连接

    在IT领域,特别是软件开发与数据管理中,Java与数据库的连接是不可或缺的一环,它构建了应用程序与数据存储之间的桥梁。本文将深入探讨“Java数据库连接”这一核心主题,解析其背后的原理、常见实现方式以及针对不同...

    Java 调用存储过程

    Java 调用存储过程是数据库操作中常见的一种技术,特别是在需要执行复杂逻辑或优化性能时。存储过程是在数据库管理系统(DBMS)中预编译的程序,可以在数据库端执行,减少了应用程序与数据库之间的交互次数,从而...

Global site tag (gtag.js) - Google Analytics