在BO中刷新数据

问题描述:

在BO中刷新报表时出现错误。我需要做的是在BO中刷新一份报告,并找出为此刷新的时间。一旦我找到所有这些,我必须在MySQL表中插入这些数据。在BO中刷新数据

虽然我这样做,我得到以下错误。

线程“main”中的异常com.businessobjects.rebean.wi.ServerException:发生数据库错误。数据库错误文本是:(CS)“DBDriver加载失败:C:\ Program Files \ Business Objects \ BusinessObjects Enterprise 12.0 \ win32_x86 \ dataAccess \ connectionServer \ dbd_oci.dll(无法找到指定的模块, )”)。 (WIS 10901)

这是如何造成的,我该如何解决?

这是BO代码:

import java.util.Iterator; 
import java.sql.*; 



import com.businessobjects.rebean.wi.DocumentInstance; 
import com.businessobjects.rebean.wi.ReportEngine; 
import com.businessobjects.rebean.wi.ReportEngines; 
import com.crystaldecisions.sdk.exception.SDKException; 
import com.crystaldecisions.sdk.framework.CrystalEnterprise; 
import com.crystaldecisions.sdk.framework.IEnterpriseSession; 
import com.crystaldecisions.sdk.framework.ISessionMgr; 
import com.crystaldecisions.sdk.occa.infostore.IInfoObject; 
import com.crystaldecisions.sdk.occa.infostore.IInfoObjects; 
import com.crystaldecisions.sdk.occa.infostore.IInfoStore; 
public class RefreshWebi { 

    /** 
    * @param args 
    * @throws ClassNotFoundException 
    * @throws SQLException 
    */ 
    public static void main(String[] args) throws ClassNotFoundException, SQLException { 
     // TODO Auto-generated method stub 
     String cms="172.16.56.114"; 
     String username="administrator"; 
     String password=""; 
     String auth="secEnterprise";   
     String driver="com.mysql.jdbc.Driver"; 
     Connection conn; 

     IEnterpriseSession enterpriseSession; 

     System.out.println("success"); 

     Long currentTime; 
     try { 
      ISessionMgr sessionMgr=CrystalEnterprise.getSessionMgr(); 
      enterpriseSession=sessionMgr.logon(username, password,cms, auth); 
      IInfoStore iStore=(IInfoStore)enterpriseSession.getService("InfoStore");  
      //bologger.entering("BOUtilities", "refreshWebIReport"); 
      IInfoObjects reportObjects = iStore.query("select top 1 * from ci_infoobjects where si_kind='webi'"); 

      ReportEngines reportEngines = (ReportEngines) enterpriseSession.getService("ReportEngines"); 
      ReportEngine reportEngine = reportEngines.getService(ReportEngines.ReportEngineType.WI_REPORT_ENGINE); 
      Iterator it = reportObjects.iterator(); 
      while (it.hasNext()) { 
       IInfoObject reportObject = (IInfoObject) it.next(); 
       DocumentInstance documentInstance = reportEngine 
         .openDocument(reportObject.getID()); 

       currentTime = System.currentTimeMillis(); 

       documentInstance.refresh(); 
       System.out.println("Time taken to refresh " 
         + (System.currentTimeMillis() - currentTime)/1000); 
       documentInstance.closeDocument(); 
       int documentID = reportObject.getID();    
       String documentName=reportObject.getTitle();     
       long refreshtime=currentTime.intValue(); 
       long refreshDuration=(System.currentTimeMillis() - currentTime)/1000; 
       int refreshtimes=(int)refreshtime;    
       int refdur=(int)refreshDuration; 
       System.out.println("Document id  :"+documentID); 
       System.out.println("Document name  :"+documentName); 
       System.out.println("Refreshtime :"+refreshtimes); 
       System.out.println("Refresh duration :"+refdur); 

       Class.forName(driver); 
       conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");    
       Statement st=conn.createStatement(); 
       st.executeUpdate("insert into refreshtimings (documentid,documentname,refreshtime,refreshduration)values('"+documentID+"','"+documentName+"','"+refreshtimes+"','"+refdur+"')"); 
       conn.close(); 

      } 
      reportEngine.close(); 
      reportEngines.close(); 

     } catch (SDKException e) { 
      e.printStackTrace(); 
     } 
} 

错误指的是该报告的数据库驱动程序不可用的Business Objects的服务器。我会检查,看看你是否在信息视图中出现同样的错误,我猜你会的。

要解决该问题,您需要验证报表连接使用的数据库类型是否正确,并且您已安装Business Objects的相关数据源类型。