⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ejbconnection.java

📁 好像是一个SQL执行器的设计实现
💻 JAVA
字号:
package mytools.sqlclient;

import mytools.sqlbean.*;
import mytools.util.*;
import com.borland.dx.dataset.*;
import java.util.*;
import javax.naming.*;

public class EjbConnection
    implements IConnection
{
  Sql sql = null; //ejb远程接口对象

  public static final String SQL_SVR_JNDI_NAME = "Sql"; //sql服务器jndi名称
  public static final String MYTOOLS_HOST = Config.getParmValue("mytools.host"); //sql服务器主机名
  public static final String MYTOOLS_PORT = Config.getParmValue("mytools.port"); //sql服务器端口号
  public static final String MYTOOLS_DS_JDNI_NAME = Config.getParmValue("db.jndi.name"); //sql服务器数据源jndi名

  public EjbConnection(Sql po_sql)
  {
    sql = po_sql;
  }

  public EjbConnection()
  {
    sql = createNewConnection(MYTOOLS_HOST, MYTOOLS_DS_JDNI_NAME);
  }

  /**
   功能:连接到sql服务器
   @param ps_host 主机名或主机地址
   @param ps_datasource_name    weblogic数据源名称
   @return  成功  Sql远程对象引用  失败  null
   */
  private synchronized Sql createNewConnection(String ps_host, String ps_datasource_name)
  {
    Sql io_sql;
    try
    {
      Context lo_ctx = getInitialContext(ps_host);

      //查找sql服务的bean
      SqlHome lo_sqlhome = (SqlHome) lo_ctx.lookup(SQL_SVR_JNDI_NAME);
      io_sql = lo_sqlhome.create(ps_datasource_name);
    }
    catch (Exception ex)
    {
      Util.logError("connectToSqlServer error:" + ex);
      return null;
    }
    return io_sql;
  }

  /**
    功能:取得中间件服务器上下文信息
    @param ps_host               主机名或主机地址
    @return  成功  上下文信息  失败  引出Exception
   */
  private Context getInitialContext(String ps_host) throws Exception
  {
    String ls_url;
    String ls_user = null;
    String ls_password = null;
    Properties lo_properties = null;

    ls_url = "t3://" + ps_host + ":" + MYTOOLS_PORT;

    try
    {
      lo_properties = new Properties();
      lo_properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
      lo_properties.put(Context.PROVIDER_URL, ls_url);

      if (ls_user != null)
      {
        lo_properties.put(Context.SECURITY_PRINCIPAL, ls_user);
        lo_properties.put(Context.SECURITY_CREDENTIALS, ls_password == null ? "" : ls_password);
      }
      return new InitialContext(lo_properties);
    }
    catch (Exception ex)
    {
      throw ex;
    }
  }

  /**
   功能:执行sql语句
   @param ps_sql  sql语句
   @return  成功  查询结果  失败  null
   */
  public ExecInfo execSql(String ps_sql)
  {
    boolean lb_isSelectSql = false;

    if (sql == null)
    {
      Util.logError("execSql:尚未连接数据库!");
      return null;
    }
    try
    {
      lb_isSelectSql = Util.isSelectSql(ps_sql);
      ExecInfo lo_ret = sql.execSql(ps_sql);

      if (lo_ret.getSqlCode() != 0)
      {
        return null;
      }
      if (lb_isSelectSql)
      {
        //产生查询数据集
        if (!lo_ret.generateDataSet())
        {
          return null;
        }
      }
      return lo_ret;
    }
    catch (Exception ex)
    {
      Util.logError("execSql:执行语句:" + ps_sql + "失败:" + ex);
      return null;
    }
  }

  /**
    功能:取得查询结果数据集数据
    @param 无
    @return  成功 查询结果 失败 null
   */
  public DataSetData getDataSetData(String ps_sql)
  {
    ExecInfo lo_ret=null;
    try
    {
      lo_ret = sql.getDataSetData(ps_sql);
      if (lo_ret == null)
      {
        Util.logError("getDataSetData:执行语句:" + ps_sql + "失败");
        return null;
      }
      if (lo_ret.getSqlCode() != 0)
      {
        Util.logError("getDataSetData:执行语句:" + ps_sql + "失败");
        return null;
      }
      return lo_ret.getDataSetData();
    }
    catch (Exception ex)
    {
      Util.error("getDataSetData:" + ex);
      return null;
    }
    finally
    {
      if (lo_ret != null)
      {
        lo_ret.close();
      }
    }
  }

  /**
    功能:取得查询结果数据集数据
    @param pi_page 页号
    @param pi_pageRec 每页记录数
    @param ps_sql  sql语句
    @return  成功 查询结果 失败 null
   */
  public DataSetData getDataSetData(int pi_page, int pi_pageRec, String ps_sql)
  {
    ExecInfo lo_ret = null;
    try
    {
      if (sql == null)
      {
        Util.logError("getDataSetData:连接数据库失败!");
        return null;
      }
      lo_ret = sql.getDataSetData(pi_page, pi_pageRec, ps_sql);
      if (lo_ret.getSqlCode() != 0)
      {
        return null;
      }
      return lo_ret.getDataSetData();
    }
    catch (Exception ex)
    {
      Util.logError("getDataSetData:执行语句:" + ps_sql + "失败:" + ex);
      return null;
    }
    finally
    {
      if (lo_ret != null)
      {
        lo_ret.close();
      }
    }
  }

  /**
     功能:保存数据窗口变动的数据
     @param  ps_sql 查询sql语句
     @param  po_changes  变动的数据集数据
     @return  可能产生错误的数据集
   */
  public DataSetData saveDataChanges(String ps_sql, DataSetData po_changes) throws
      DataSetException
  {
    try
    {
      if (sql == null)
      {
        Util.logError("saveDataChanges:尚未连接数据库!");
        throw new DataSetException("saveDataChanges:尚未连接数据库!");
      }

      return sql.saveDataChanges(ps_sql, po_changes);
    }
    catch (Exception ex)
    {
      throw new DataSetException(ex.toString());
    }
  }

  /**
    功能:提交数据
    @param 无
    @return  1 成功 0 失败
   */
  public int commit()
  {
    int li_ok = 0;
    try
    {
      if (sql == null)
      {
        Util.logError("commit:尚未连接数据库!");
        return 0;
      }
      li_ok = sql.commit();
      return li_ok;
    }
    catch (Exception ex)
    {
      Util.logError("commit:" + ex.toString());
      return 0;
    }
  }

  /**
    功能:回滚事务,同时关闭数据库连接
    @param 无
    @return  1 成功  0 失败
   */
  public int rollback()
  {
    try
    {
      if (sql == null)
      {
        Util.logError("rollback:尚未连接数据库!");
        return 0;
      }
      return sql.rollback();
    }
    catch (Exception ex)
    {
      Util.logError("rollback:" + ex.toString());
      return 0;
    }
  }

  //关闭数据库连接
  public void close()
  {
    try
    {
      sql.remove();
    }
    catch (Exception ex)
    {
      Util.error("close:" + ex);
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -