WEB开发网
开发学院数据库DB2 如何为DB2 Cube Views构建元数据桥 阅读

如何为DB2 Cube Views构建元数据桥

 2008-05-15 14:58:15 来源:WEB开发网   
核心提示:使用 API用于调用 md_message() 存储过程的样本 C++ 代码与 DB2 Cube Views 产品一起提供,位于 sqllib/samples/olap/client/db2mdapiclient.cpp 中,如何为DB2 Cube Views构建元数据桥(4),关于用 Java™ 编写的代

使用 API

用于调用 md_message() 存储过程的样本 C++ 代码与 DB2 Cube Views 产品一起提供,位于 sqllib/samples/olap/client/db2mdapiclient.cpp 中。

关于用 Java™ 编写的代码,下面是使用 JDBC 来调用该存储过程的样本代码片段:

/* Calls the DB2 stored procedure passing in the request string
  * as the first parameter and the metadata string as the second
  * parameter. If xmlRequestString contains a script or no output
  * metadata is required the xmlMetadata parameter may be null.
  * The outputMetadata boolean controls what is returned by the
  * method. If it is true any output metadata is returned. If
  * false the response output is returned. */
  private String callDB2StoredProc(String  xmlRequestString,
                  String  xmlMetadataString,
                  boolean outputMetadata)
                  throws OCException,
                      OCApiException
  {
   /* Create an SQL command to call the Stored procedure in DB2
   * to get the XML */
   String      sql         = "CALL db2info.MD_MESSAGE (?, ?, ?)";
   String      response      = null;
   String      xmlMetadataResponse = null;
   CallableStatement callStmt      = null;
   try
   {
    callStmt = auroraCatalogConnection.prepareCall(sql);
    /* Set input parameter to request and metadata strings. */
    callStmt.setString (1, xmlRequestString);
    callStmt.setString (2, xmlMetadataString);
    /* Register the output parameters. */
    callStmt.registerOutParameter (2, Types.VARCHAR);
    callStmt.registerOutParameter (3, Types.VARCHAR);
    /* Call the stored procedure */
    callStmt.execute();
    /* Retrieve output parameters. If the procedure was called with
    * a request that returns metadata in the middle parameter then
    * xmlMetadataResponse will store the output XML. */
    if (outputMetadata == true)
     xmlMetadataResponse = callStmt.getString(2);
    response      = callStmt.getString(3);
    /* See if there are any warnings. */
    SQLWarning warning = callStmt.getWarnings();
    /* If execute returns a warning with a non-zero SQL state
    * then the API has had an error and returned some response
    * info in the output XML document. */
    if (warning != null)
    {
     OCLog.trace("Stored procedure execute returned a warning.");
     OCLog.trace("SQL state: " + warning.getSQLState());
     OCLog.trace("SQL state: " + warning.getErrorCode());
     /* readResponseFromXML will throw an OCApiException containing
     * the error info (which will then be thrown to our caller) or
     * it will throw an OCException if a parsing error occurred. If
     * for some strange reason the file does not contain error
     * info it will just return and then we'll throw an OCException
     * to notify the user. */
     try { readResponseFromXML(response); }
     /* If an API exception was thrown add the SQL state etc to
     * it and then throw it again. */
     catch (OCApiException apie)
     {
      apie.setSqlException(warning);
      throw apie;
     }
     /* If we have had a warning we always want to rollback any changes.
     * If we have a problem rolling back the exception will be caught
     * below. */
     finally
     {
      auroraCatalogConnection.rollback();
     }
     /* If we got here there must have been a warning with nothing
     * in the output XML so throw an exception explaining this. */
     throw new OCException("OC_ERR_API_DB2_STORED_PROC_FAIL_NO_INFO");
    }
   }
   /* If we had an error executing the SQL, log the information and
   * throw an exception. We also rollback any changes and catch
   * the exception if the rollback has a problem. */
   catch (SQLException e)
   {
    OCApiException newe = new OCApiException(e);
    OCLog.trace( newe.getMessage() );
    logExceptionInfo(e);
    try { auroraCatalogConnection.rollback(); }
    catch (SQLException e2)
    {
     OCLog.trace("An exception also occurred rolling back.");
     logExceptionInfo(e2);
    }
    throw newe;
   }

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:如何 DB Cube

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接