在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的相关数据源类型。