日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

水晶报表 jar包版本过低_工具类学习-UReport报表设计器整合

發(fā)布時(shí)間:2024/7/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 水晶报表 jar包版本过低_工具类学习-UReport报表设计器整合 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

dada-report報(bào)表整合UReport報(bào)表設(shè)計(jì)器工具

結(jié)合日常工作和學(xué)習(xí)實(shí)踐,針對傳統(tǒng)報(bào)表子站面臨的問題,嘗試借助UReport報(bào)表設(shè)計(jì)器解決

1.可在現(xiàn)有工程基礎(chǔ)上引入U(xiǎn)report2報(bào)表設(shè)計(jì)器

Ureport報(bào)表設(shè)計(jì)器是一個基于WEB的在線報(bào)表設(shè)計(jì)器,其具有良好的界面設(shè)計(jì)和強(qiáng)大的報(bào)表設(shè)計(jì)功能,支持報(bào)表多種格式導(dǎo)出(分頁)、報(bào)表通用性設(shè)計(jì)等,Ureport2支持簡單、復(fù)雜報(bào)表的設(shè)計(jì),能夠很好地嵌合實(shí)際業(yè)務(wù)需求,其報(bào)表設(shè)計(jì)可通過純sql或者是配置的方式實(shí)現(xiàn),以此可針對不同的人員進(jìn)行管理。

2.針對多租戶、復(fù)雜報(bào)表設(shè)計(jì)

Ureport2可在工程中自定義報(bào)表存儲器和數(shù)據(jù)源,在代碼邏輯層模擬實(shí)現(xiàn)多租戶概念(不同的租戶訪問不同的報(bào)表存儲器、數(shù)據(jù)源信息)

3.現(xiàn)存問題

a.學(xué)習(xí)成本

將UReport報(bào)表設(shè)計(jì)器整合到已有項(xiàng)目并非一件難事,只需要通過簡單的配置便可完成,主要的工作量在于后期報(bào)表的設(shè)計(jì)、維護(hù),以及UReport2報(bào)表設(shè)計(jì)器的學(xué)習(xí)需要耗費(fèi)一定的時(shí)間和精力,需要開發(fā)人員了解報(bào)表設(shè)計(jì)的流程、原理,掌握排查報(bào)表設(shè)計(jì)錯誤的方法,熟練應(yīng)用。

b.與實(shí)際業(yè)務(wù)整合

現(xiàn)有報(bào)表子站中的存量報(bào)表數(shù)量較多,如果所有的報(bào)表都要重新進(jìn)行設(shè)計(jì)、維護(hù),將是一個巨大的工作量。

UReport2僅僅是一個報(bào)表設(shè)計(jì)器,如果要結(jié)合需求實(shí)現(xiàn)多租戶概念,相應(yīng)需要額外對應(yīng)的維護(hù)頁面與接口設(shè)計(jì)

針對大數(shù)據(jù)量數(shù)據(jù)處理還存在一定的問題,其中涉及緩存概念,有時(shí)候處理特大數(shù)據(jù)量的時(shí)候后臺報(bào)錯,考慮需要深入U(xiǎn)Report源碼分析或者是相關(guān)配置調(diào)整;且其提供的圖形統(tǒng)計(jì)圖顯示相對EChart而言并不太友好。

從這段時(shí)間的學(xué)習(xí)來看Ureport是比較方便且功能強(qiáng)大的開源插件,其與實(shí)際業(yè)務(wù)的整合、數(shù)據(jù)的處理還需要時(shí)間的驗(yàn)證,畢竟還需要考慮額外諸多因素,在后續(xù)的學(xué)習(xí)中會考慮進(jìn)一步完善

以下簡單提供本人在畢設(shè)中使用Ureport的一些學(xué)習(xí)筆記參考,個人建議可借助網(wǎng)絡(luò)資源去結(jié)合學(xué)習(xí)會比較好理解:https://www.w3cschool.cn/ureport/

SSM框架整合UReport報(bào)表設(shè)計(jì)器

參考鏈接:

https://www.w3cschool.cn/ureport/

整合過程分析

1.在pom.xml文件中引入相關(guān)依賴

<dependency>

完整pom.xml參考配置:

<project

2.在web.xml文件中配置UReport的Servlet

<servlet>

3.引入U(xiǎn)Report相關(guān)的配置文件

有三種方式實(shí)現(xiàn)配置文件引入:根據(jù)實(shí)際工程搭建的情況靈活選擇引入的方式

方式1:直接在web.xml中加載ureport-console-context.xml文件(針對普通的Maven工程配置,沒有采用spring文件)

<listener>

方式2:在已有的spring配置文件中導(dǎo)入數(shù)據(jù)

<import

方式3:如果沒有spring配置文件,直接創(chuàng)建一個context.xml中

<?xml version="1.0" encoding="UTF-8"?>

此處對已有的SSM項(xiàng)目整合做說明:

無論是以上哪種方式實(shí)現(xiàn),必須保證在web.xml需要加載相應(yīng)的spring配置文件,否則項(xiàng)目在啟動的時(shí)候就會報(bào)視圖解析失敗,沒有相應(yīng)的designer

在整合啟動的過程中可能由于maven相關(guān)jar包沒有正常導(dǎo)入,導(dǎo)致ureport依賴的相關(guān)jar包非正常導(dǎo)入,項(xiàng)目啟動報(bào)錯(刪除maven倉庫的內(nèi)容,重新導(dǎo)入jar包)

以下簡單對整合過程中可能遇到的問題做簡單的說明

問題1:指定屬性無法找到(是由于在整合的過程中Ureport報(bào)表設(shè)計(jì)器需要指定的屬性并沒有在自己搭建的工程中指定,因而報(bào)錯)

啟動的時(shí)候如果報(bào)找不到指定的屬性:則需要在屬性配置的時(shí)候需要不存在(未配置)的屬性(在applicationContext-dao.xml、springmvc.xml下加載了屬性文件,添加屬性忽略掉沒有定義的屬性查找),報(bào)錯內(nèi)容如下所示

針對spring配置文件處理:

針對普通maven工程處理:

配置屬性說明:Ureport有自定義的配置屬性,這些配置屬性是與報(bào)表存儲、設(shè)計(jì)相關(guān)的,具體內(nèi)容需要根據(jù)實(shí)際的業(yè)務(wù)需求去自行配置,如果不需要則在代碼邏輯層對業(yè)務(wù)流轉(zhuǎn)進(jìn)行控制即可

問題2:404或指定designer設(shè)計(jì)器不存在

在整合的ssm中配置ureport出錯,通過鏈接訪問數(shù)據(jù)的時(shí)候無法找到指定的頁面,初步考慮路徑配置,之后查看web.xml配置,發(fā)現(xiàn)在之前的前端控制器配置中,默認(rèn)攔截了所有的請求,因此在請求的時(shí)候直接被dada-report這個前端控制器攔截,但dada-report這個控制器下并沒有指定的ureport相關(guān)的內(nèi)容存在,因此會報(bào)404訪問路徑錯誤或者是designer報(bào)表設(shè)計(jì)器不存在的問題,此處需要對dada-report攔截的內(nèi)容做限制,參考前端控制器攔截(攔截說明、攔截順序、執(zhí)行順序)

原始配置:

直接配置如下所示,但如果出現(xiàn)designer視圖不存在,考慮是相應(yīng)的文件沒有加載進(jìn)去,因?yàn)樵趕pringmvc.xml中加載了有關(guān)的ureport2配置文件,因此要在初始化加載spring容器的時(shí)候?qū)?yīng)的springmvl.xml配置文件進(jìn)行加載,否則無法找到相應(yīng)內(nèi)容,出現(xiàn)如下所示錯誤

要么就設(shè)置Servlet默認(rèn)啟動的時(shí)候加載配置文件

實(shí)際SSM整合說明如下:

依賴配置:添加ureport相關(guān)的依賴jar包

為了避免配置文件混亂,也避免改動原有ssm配置,此處單獨(dú)在resources目錄下創(chuàng)建一個文件夾ureport存放ureport-custom-context.xml配置文件以編輯相關(guān)的ureport配置,并在web.xml中配置相應(yīng)的全局參數(shù)(必須在context-param中配置加載文件)

配置完成,啟動項(xiàng)目,訪問鏈接:http://localhost:8084/ureport/designer

Ureport報(bào)表設(shè)計(jì)器顯示如下:

可以適當(dāng)了解web.xml各個參數(shù)配置的含義:

完成配置,根據(jù)W3CSchoool等相關(guān)教程完成業(yè)務(wù)和報(bào)表工具的整合,以下簡單根據(jù)教程完成業(yè)務(wù)流程簡單實(shí)現(xiàn)

https://www.w3cschool.cn/ureport/ureport-y4op2han.html

測試的時(shí)候如果出現(xiàn)按鈕點(diǎn)擊無反應(yīng),則可能是彈出式窗口被瀏覽器攔截,只需要允許彈出即可,或可直接通過url直接訪問

通用報(bào)表設(shè)計(jì)整合

無論是機(jī)構(gòu)、還是平臺報(bào)表存儲器,此處操作的表字段都是統(tǒng)一的,因此此處做一個調(diào)整,設(shè)置通用的方法將重復(fù)的內(nèi)容統(tǒng)一起來,用不同的字段標(biāo)識進(jìn)行劃分,由前臺頁面?zhèn)魅霐?shù)據(jù)限定相應(yīng)的標(biāo)準(zhǔn),不需要重復(fù)操作代碼

a.創(chuàng)建指定數(shù)據(jù)表結(jié)構(gòu)(字段需保持一致)

存儲報(bào)表文件、數(shù)據(jù)源配置文件(概念上區(qū)分,實(shí)際內(nèi)容基本一致)

機(jī)構(gòu)相關(guān)存儲器:ureport_file、ureport_data_source_file、

平臺公共存儲器:ureport_backup、ureport_data_source_backup

保持?jǐn)?shù)據(jù)字段相應(yīng)一致,主要包括file_id(主鍵)、file_name(文件名稱)、file_content(文件內(nèi)容)三個基本字段,具體其余字段的設(shè)計(jì)則根據(jù)實(shí)際工程需求進(jìn)行擴(kuò)展。

表字段:

b.創(chuàng)建通用的實(shí)體類UreportFileManager

UreportFileManager類作為通用的實(shí)體類,使得在dao層只需要指定需要操作的表名tableName便可實(shí)現(xiàn)對不同的數(shù)據(jù)表進(jìn)行操作,UreportFileManager基本結(jié)構(gòu)定義需要與相應(yīng)數(shù)據(jù)表的屬性一一對應(yīng)。

Model實(shí)體:

Mapper層查找參數(shù)設(shè)置:

c.通用mapper方法實(shí)現(xiàn)

為了實(shí)現(xiàn)mapper方法操作的通用性,引入U(xiǎn)reportFileSearchParam類用于封裝操作參數(shù),其主要包括操作表名tableName、操作實(shí)體ureportFileManager以及與報(bào)表文件數(shù)據(jù)庫實(shí)體相對應(yīng)篩選參數(shù)。

UreportFileManagerMapper接口通過接收searchParam指定的參數(shù)組合,操作指定的報(bào)表文件存儲器,實(shí)現(xiàn)以參數(shù)配置去訪問不同的數(shù)據(jù)庫并與UReport報(bào)表引擎進(jìn)行數(shù)據(jù)交互,從而間接減少代碼設(shè)計(jì)的冗余量,并便于報(bào)表存儲器的不限量擴(kuò)展。針對報(bào)表的管理與權(quán)限的控制則考慮在同一個數(shù)據(jù)庫中劃分不同的區(qū)域用以區(qū)分不同的機(jī)構(gòu)、不同的部門所訪問的存儲空間不同,在mapper層借助searchParam指定篩選條件,提供相應(yīng)的接口供相應(yīng)的Serivce層、存儲器Provider進(jìn)行調(diào)用

對應(yīng)mapper層配置:

對應(yīng)mapper.xml:

<?xml version="1.0" encoding="UTF-8"?>

對應(yīng)狀態(tài)概念調(diào)整:

public_state:可理解為開發(fā)狀態(tài)(開發(fā)中0、已完結(jié)1),亦可理解為公開狀態(tài)(私有0、公開1)

visible_state:可見狀態(tài):針對部分已完結(jié)的報(bào)表,但想對用戶隱藏(0.不可見 1.可見)

Ureport報(bào)表工具學(xué)習(xí)

報(bào)表設(shè)計(jì)器訪問路徑:http://localhost:8084/ureport/designer

http://host[:port][/context-path]/ureport/designer

1.報(bào)表存儲存儲目錄配置

a.默認(rèn)的報(bào)表存儲目錄配置

默認(rèn)情況下:在項(xiàng)目的WEB-INF目錄有會自動生成了一個名為“ureportfiles”目錄,這個目錄是UReport2提供的默認(rèn)的報(bào)表文件存儲目錄,也就是說默認(rèn)情況下,UReport將在項(xiàng)目的WEB-INF/ureportfiles目錄下存儲設(shè)計(jì)好的報(bào)表文件。

默認(rèn)報(bào)表存儲目錄
如果項(xiàng)目在Eclipse的開發(fā)環(huán)境運(yùn)行時(shí),采用的是jetty(比如run-jetty-run插件),那么就可以在項(xiàng)目的WEB-INF目錄下發(fā)現(xiàn)一個名為“ureportfiles”目錄。
但如果采用tomcat運(yùn)行項(xiàng)目,那么在WEB-INF目錄下就沒有一個名為“ureportfiles”目錄,原因是在Eclipse中運(yùn)行tomcat,tomcat需要創(chuàng)建一個臨時(shí)的工作目錄(該目錄一般位于workspace.metadata.pluginsorg.eclipse.wst.server.coretmp0wtpwebapps下),所以采用tomcat運(yùn)行項(xiàng)目,則需要到這個臨時(shí)的工作目錄下找到對應(yīng)的項(xiàng)目,再到這個項(xiàng)目的WEB-INF目錄下找到對應(yīng)的“ureportfiles”目錄

運(yùn)行搭建好的項(xiàng)目,打開報(bào)表設(shè)計(jì)器,點(diǎn)擊工具欄的保存按鈕,彈出如下所示窗口:

完成數(shù)據(jù)保存,刷新工程目錄則可看到對應(yīng)生成的數(shù)據(jù)信息

b.自定義報(bào)表存儲目錄配置

在項(xiàng)目對應(yīng)配置文件(參考整合過程,此處ureport獨(dú)立的spring配置文件在resource/ureport/ureport-custom-context.xml),相應(yīng)在其ureport目錄下創(chuàng)建一個ureport-custom.properties配置文件存放有關(guān)ureport配置的基本屬性

上面的Bean配置,實(shí)際上就是一個標(biāo)準(zhǔn)的

org.springframework.beans.factory.config.PropertyPlaceholderConfigurer類配置,通過配置PropertyPlaceholderConfigurer,可以實(shí)現(xiàn)加載Spring外部properties的作用,所以項(xiàng)目中已配置了PropertyPlaceholderConfigurer類,那么直接在這個類對應(yīng)的properties文件中添加對應(yīng)的UReport2屬性即可,而不需要額外配置config.properties文件

完成文件加載配置,在相應(yīng)的配置文件中配置屬性即可:

表示在E盤根下名為ureportfiles的目錄中存儲報(bào)表文件,需要注意的是,這里指定特定目錄時(shí),一定要保證這個目錄已存在,否則將不會被采用,比如上面的E盤下名為ureportfiles的目錄,就需要預(yù)先創(chuàng)建好。(指定文件目錄不存在,則提示如下)

c.自定義報(bào)表存儲器

UReport2默認(rèn)提供的名為“服務(wù)器文件系統(tǒng)”的報(bào)表存儲機(jī)制,實(shí)際上是實(shí)現(xiàn)了UReport2提供的com.bstek.ureport.provider.report.ReportProvider接口,該接口源碼如下:

package

實(shí)現(xiàn)了ReportProvider接口后,只需要將實(shí)現(xiàn)類配置到Spring中,讓其成為一個標(biāo)準(zhǔn)的Spring Bean,這樣UReport2就會檢測到它而將其加載。下面是UReport2默認(rèn)提供的名為“服務(wù)器文件系統(tǒng)”的報(bào)表存儲器源碼:

package

禁用系統(tǒng)提供的默認(rèn)報(bào)表存儲器
如果想使用自定義的報(bào)表存儲器,同時(shí)又不想再使用系統(tǒng)默認(rèn)提供的”服務(wù)器文件系統(tǒng)“的報(bào)表存儲器,那么只需要在相應(yīng)的報(bào)表配置文件(舉例:config.properties)文件中添加一個名為ureport.disableFileProvider屬性,將其值設(shè)置成true即可。

通過實(shí)現(xiàn)ReportProvider接口,可以開發(fā)出其它類型的報(bào)表存儲器,比如開發(fā)一個新的報(bào)表存儲器將報(bào)表文件存儲到數(shù)據(jù)庫、FTP等。

參考鏈接:

存儲報(bào)表至fastdfs:

https://blog.csdn.net/qq_35170213/article/details/80290797

存儲報(bào)表至數(shù)據(jù)庫:

https://blog.csdn.net/qq_35170213/article/details/80290425

自定義報(bào)表存儲器(數(shù)據(jù)庫)

<1>創(chuàng)建存儲報(bào)表信息的數(shù)據(jù)表

考慮實(shí)際需求,此處分別定義了CustomProvider報(bào)表存儲器用于測試,可結(jié)合實(shí)際業(yè)務(wù)球球完成數(shù)據(jù)表設(shè)計(jì),在基礎(chǔ)屬性的基礎(chǔ)上添加其他字段用于業(yè)務(wù)的邏輯擴(kuò)展

基本設(shè)計(jì):(僅供參考)

/** 建表 sql - 基本參考 */

為契合業(yè)務(wù)需求,初步考慮數(shù)據(jù)表設(shè)計(jì)如下,具體的內(nèi)容根據(jù)實(shí)際需求做調(diào)整

<2>dao層/Mapper實(shí)現(xiàn)方法(基本的增刪改查)

此處提供一個通用的接口模板,具體實(shí)現(xiàn)的邏輯則需要根據(jù)實(shí)際的業(yè)務(wù)需求去設(shè)計(jì)

例如整合報(bào)表平臺的時(shí)候需要考慮實(shí)際報(bào)表權(quán)限的問題,因此需要考慮根據(jù)當(dāng)前用戶登錄的權(quán)限,所屬的機(jī)構(gòu)等進(jìn)行條件篩選

PS:由于報(bào)表存儲器的數(shù)據(jù)庫設(shè)計(jì)基本保持一致,由此可考慮創(chuàng)建一個通用的dao、service進(jìn)行控制,只需要通過前端頁面調(diào)用接口傳入數(shù)據(jù)表名tableName即可控制要操作的存儲器,由此可間接實(shí)現(xiàn)多租戶報(bào)表管理的概念(不同的租戶可訪問不同的報(bào)表存儲器)

-- 此處為簡單配置簡單演示單表操作

@Mapper

具體的mapper.xml文件則需要參考實(shí)際表設(shè)計(jì)完成相應(yīng)配置,需要注意的是name、content這兩個屬性,這兩個屬性是報(bào)表設(shè)計(jì)的必要屬性,以下提供基本模板,實(shí)際內(nèi)容參考實(shí)際需求進(jìn)行調(diào)整

<?xml version="1.0" encoding="UTF-8" ?>

報(bào)表內(nèi)容存儲的類型:

Mysql數(shù)據(jù)庫中表字段設(shè)置為‘mediumblob’類型

在mapper配置的數(shù)據(jù)類型為‘BLOB’、‘LONGARBINARY’

兩種類型在數(shù)據(jù)庫中存儲的形式:

報(bào)表存儲器設(shè)計(jì)

基于springboot的參考

import

基于SSM的設(shè)計(jì)參考

public

測試問題分析

創(chuàng)建xxxProvider繼承ureport的ReportProvider方法,完成報(bào)表存儲相關(guān)的操作

測試:數(shù)據(jù)能夠正常保存,但是卻無法正常訪問

分析,在保存報(bào)表文件信息,或者是打開報(bào)表文件的時(shí)候請求接口,報(bào)錯。

理想結(jié)果:自動封裝相應(yīng)存儲的數(shù)據(jù)信息

實(shí)際結(jié)果:只封裝了第一個定義的存儲器,隨后報(bào)如下錯誤

(查看數(shù)據(jù)庫mapper配置!!)

一開始考慮是多個報(bào)表存儲器沖突導(dǎo)致的問題,之后測試無論是啟用或禁用服務(wù)默認(rèn)報(bào)表存儲器還是出現(xiàn)同樣的問題,數(shù)據(jù)庫訪問也沒有看見明顯的錯誤,隨后查閱代碼發(fā)現(xiàn)問題所在,由于一開始考慮機(jī)構(gòu)報(bào)表存儲器和平臺備份報(bào)表存儲器是類似的,直接復(fù)制粘貼代碼,后期改動沒有注意到一些細(xì)節(jié)性的問題,設(shè)置斷點(diǎn)也無法找到明顯的錯誤點(diǎn)(點(diǎn)擊的時(shí)候加載就報(bào)錯,無法通過設(shè)置斷點(diǎn)查找出錯問題),仔細(xì)查看報(bào)錯信息,發(fā)現(xiàn)問題所在

可以看到保存信息顯示兩條sql語句查詢的結(jié)果不同,前者正常查找數(shù)據(jù),而后者查找數(shù)據(jù)到“Parameters:”(參數(shù)沒有正常傳遞)則異常結(jié)束關(guān)閉數(shù)據(jù)庫連接,并沒有正常的返回,網(wǎng)上查閱輸出流格式?jīng)_突,具體原因并不明確,考慮是報(bào)表內(nèi)容存儲格式問題,由mybatis逆向工程生成的mediumblob對應(yīng)的是LONGVARBINARY,而網(wǎng)上參考是BLOB,修正后再次測試數(shù)據(jù)方能正常顯示!!由此考慮報(bào)表內(nèi)容存儲格式導(dǎo)致出錯!!(具體可以參考相關(guān)鏈接了解LONGVARBINARY與BLOB的區(qū)別)

以上描述的問題均為mapper配置文件出現(xiàn)問題導(dǎo)致,在配置mapper文件時(shí)需要注意mapper層接口和相應(yīng)配置文件的名稱、方法名意義對應(yīng),需要注意方法的定義(入?yún)ⅰ⒊鰠?#xff09;,需要注意參數(shù)定義的類型(文本型字符串需要考慮數(shù)據(jù)定義的類型要相對應(yīng))

自定義報(bào)表存儲器(ftp-待定)

參考鏈接:https://blog.csdn.net/qq_35170213/article/details/80290797

2.數(shù)據(jù)源配置

打開UReport2的報(bào)表設(shè)計(jì)器,可以看到UReport2提供了三種類型的報(bào)表數(shù)據(jù)源,如下圖所示:三種類型的數(shù)據(jù)源分別是直接連接數(shù)據(jù)庫,Spring Bean以及通過實(shí)現(xiàn)com.bstek.ureport.definition.datasource.BuildinDatasource接口提供的內(nèi)置數(shù)據(jù)源。

配置1:直連數(shù)據(jù)庫

直接連接數(shù)據(jù)庫比較簡單,就是在項(xiàng)目的classpath中添加好相應(yīng)數(shù)據(jù)庫的驅(qū)動Jar包后,在彈出的窗口中配置數(shù)據(jù)源連接信息即可,如下圖所示:在頁面用數(shù)據(jù)源配置鏈接數(shù)據(jù)庫注意,不要刷新瀏覽器,刷新之后鏈接會清空

點(diǎn)擊測試連接,可以看到對應(yīng)目錄下生成了相應(yīng)的數(shù)據(jù)源,右鍵選擇需要操作的數(shù)據(jù)源可進(jìn)行“添加數(shù)據(jù)集、編輯、刪除操作”

根據(jù)相應(yīng)的數(shù)據(jù)集配置相關(guān)的數(shù)據(jù):

如果連接測試失敗:查看失敗原因,依次進(jìn)行查找

Maven引入Oracle驅(qū)動依賴

(在pom.xml文件中添加oracle驅(qū)動maven依賴存在一定的問題,可參考鏈接了解相關(guān)內(nèi)容https://blog.csdn.net/erlian1992/article/details/74279106)

由于Oracle數(shù)據(jù)庫JDBC驅(qū)動包的使用的JDK版本有所區(qū)別,一定要下載對應(yīng)的JDK版本的Oracle數(shù)據(jù)庫JDBC驅(qū)動,JDK1.5的選擇ojdbc.jar驅(qū)動包,如果是JDK1.6及以上版本的選擇ojdbc6.jar驅(qū)動包,如果JDK環(huán)境是JDK1.8,那么選擇ojdbc6.jar驅(qū)動包。

方式1:可以通過在官網(wǎng)下載相應(yīng)的jar包:

https://www.oracle.com/technetwork/database/application-development/jdbc/downloads/index.html

方式2:如果本地安裝了oracle數(shù)據(jù)庫,則可在指定目錄查找到相應(yīng)的ojdbc6.jar(其路徑為對應(yīng)安裝目錄)E:OracleappAdministratorproduct11.2.0dbhome_1jdbclibojdbc6.jar)

接下來就是手動向Maven的本地倉庫中添加Oracle數(shù)據(jù)庫的JDBC驅(qū)動依賴。安裝的前提是你的電腦必須安裝了Maven,并且配置了Maven環(huán)境變量(參考maven配置)通過cmd窗口(或Eclipse的Maven插件、IDEA的Terminal)執(zhí)行命令(雖然使用的工具不同,但是指定的文件位置和Maven坐標(biāo)都是一樣的)

需要注意的是如果是使用方式2,需要將相關(guān)的ojdb6.jar包放到其他文件夾中,不要在oracle安裝目錄下直接執(zhí)行指令,可能會出現(xiàn)Oracle拒絕訪問的情況

此處用eclipse的maven插件實(shí)現(xiàn)(Terminal)

$ mvn install:install -file -Dfile=F:jarojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar(根據(jù)實(shí)際調(diào)整路徑)

進(jìn)入到指定的目錄下直接執(zhí)行:

$ mvn install:install-file -Dfile=ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar

執(zhí)行完成之后可以看到對應(yīng)的mvn安裝倉庫有相應(yīng)的資源生成:

完成jar導(dǎo)入到本地倉庫之后,則可在項(xiàng)目中添加使用oracle相關(guān)依賴(添加的依賴版本需要與指定的數(shù)據(jù)(導(dǎo)入到maven本地倉庫時(shí)的依賴定義)一致),如果依賴引入失敗,查看對應(yīng)的定義的版本、依賴是否一致

<!-- 添加oracle驅(qū)動依賴 -->

<dependency>

<groupId>com.oracle</groupId>

<artifactId>ojdbc6</artifactId>

<version>11.2.0.1.0</version>

</dependency>

配置2:SpringBean數(shù)據(jù)源

Spring Bean類型的數(shù)據(jù)源可以選擇Spring上下文中定義好的一個Bean來作為數(shù)據(jù)源,點(diǎn)擊

圖標(biāo),在彈出的窗口中輸入數(shù)據(jù)源名稱及要采用的Bean的ID,如下圖所示:

保存后,就可以在這個數(shù)據(jù)源下添加具體的數(shù)據(jù)集,添加方法就是在這個數(shù)據(jù)源下右鍵,在彈出的菜單中選擇添加數(shù)據(jù)集,在彈出的窗口中定義數(shù)據(jù)集名稱、對應(yīng)的方法名以及返回對象類型,如下圖所示:

(如果springBean中沒有指定id的bean兌現(xiàn)個,此處在添加數(shù)據(jù)集,選擇方法的時(shí)候相應(yīng)報(bào)錯-空指針異常,指定的bean對象不存在)

在Spring bean數(shù)據(jù)集配置中,方法名我們可以點(diǎn)擊右側(cè)的“選擇方法”按鈕來選擇當(dāng)前Bean對應(yīng)的類中定義的方法,但這里對方法的要求是:方法必須要有三個參數(shù),依次是String,String,Map,比如我們上面定義的testBean里就包含兩個合法的方法,如下所示:

對于一個合法的Bean數(shù)據(jù)集方法要有三個參數(shù),分別是String,String,Map,依次對應(yīng)數(shù)據(jù)源名稱、數(shù)據(jù)集名稱以及外部傳入的參數(shù)Map,Bean的方法只有是這種結(jié)構(gòu)才可以進(jìn)行選擇。對于數(shù)據(jù)集方法的返回值,目前來說可以支持兩種類型,一種是我們TestBean中返回的Map<String,Object>類型的List集合;另一種就是返回一個POJO類型的List集合,比如像下面的方法: 在上面的示例方法中,返回的就是User對象集合,這里的User對象,就是一個普通的POJO對象。(提供示例可以通過SpringBean自定義相關(guān)數(shù)據(jù)實(shí)現(xiàn))

參考上述介紹,設(shè)置了如下數(shù)據(jù)配置:

在dada-report下創(chuàng)建com.dada.report.datasource包,創(chuàng)建相應(yīng)的xxxBean類,并在指定的ureport配置文件中配置bean對象(或者是直接通過@Component注解進(jìn)行定義)

package

配置完成,啟動項(xiàng)目,再次填寫數(shù)據(jù)并點(diǎn)擊保存按鈕,能夠看到相應(yīng)的SpringBean數(shù)據(jù)配置完成,相應(yīng)的會返回相關(guān)的方法

選擇相應(yīng)數(shù)據(jù)源配置,返回相應(yīng)為數(shù)據(jù)類型(如果不配置則需要手動添加字段)

配置3:內(nèi)置數(shù)據(jù)源

內(nèi)置數(shù)據(jù)源要求實(shí)現(xiàn)BuildinDatasource接口,同時(shí)將BuildinDatasource接口實(shí)現(xiàn)類配置到Spring即可,BuildinDatasource接口源碼如下:

此處測試參考代碼如下:

方式1:借助JDBCUtils工具類(自定義)獲取數(shù)據(jù)源

package

}

在ureport配置文件中配置dataSource對象:

方式2:通過spring管理DataSource數(shù)據(jù)源(以注解方式獲取數(shù)據(jù)源連接)

package

在ureport配置文件中配置dataSource對象:

多數(shù)據(jù)源配置問題:

在通過xml配置文件配置的時(shí)候,使用@Autowired注解,其按住奧byType自動植入,但如果文中配置兩個相同類型的dataSource,則在項(xiàng)目啟動加載spring自動注入的時(shí)候會報(bào)錯

org

因此在配置注解的時(shí)候需要明確注入的是哪個對象(可以參考spring注解說明,了解每個注解之間的異同,參考鏈接:https://www.cnblogs.com/think-in-java/p/5474740.html)

@Resource的作用相當(dāng)于@Autowired,只不過@Autowired按照byType自動注入

BuildinDatasource接口實(shí)現(xiàn)類配置到Spring中后,UReport2會自動檢測到,完成配置啟動測試,在報(bào)表設(shè)計(jì)器中,點(diǎn)擊數(shù)據(jù)源頁簽中的

按鈕,在彈出的窗口中就可以選擇定義好的內(nèi)置數(shù)據(jù)源,如下圖所示:

查看配置是否正確,可通過右鍵選擇添加數(shù)據(jù)集,如果數(shù)據(jù)正常顯示則連接正常,但如果出現(xiàn)“數(shù)據(jù)源不存在”或“后臺空指針異常”則說明數(shù)據(jù)源配置存在問題,需要進(jìn)行修改調(diào)整

數(shù)據(jù)源配置方法說明

在數(shù)據(jù)源中有三個選擇:

服務(wù)器啟動期間數(shù)據(jù)源配置是有效,當(dāng)服務(wù)器重啟后數(shù)據(jù)源配置并不保存,除卻在spring配置完成的springBean、內(nèi)置數(shù)據(jù)源數(shù)據(jù)是在服務(wù)器啟動的時(shí)候便加載,直接連接數(shù)據(jù)源信息不會保存,三種不同的數(shù)據(jù)源連接方式創(chuàng)建數(shù)據(jù)保存到指定的xml,重啟服務(wù)器后再次加載該模板數(shù)據(jù)也不會丟失(基本的配置在xml文件中已做存儲)

數(shù)據(jù)源直接連接:在報(bào)表數(shù)據(jù)多的情況下如果環(huán)境替換則難以維護(hù)

spring bean數(shù)據(jù)源:需要指定spring 中 datasource的bean Id,其會在IOC容器中獲取!

內(nèi)置數(shù)據(jù)源:在spring配置該數(shù)據(jù)源對象,即需要創(chuàng)建一個類,其實(shí)現(xiàn)

com.bstek.ureport.definition.datasource.BuildinDatasource接口,封裝數(shù)據(jù)源信息

3.報(bào)表的基本使用

參考鏈接:

https://www.w3cschool.cn/ureport/

UReport2教學(xué)視頻:http://pan.baidu.com/s/1boWTxF5,密碼:98hj

4.報(bào)表設(shè)計(jì)器與業(yè)務(wù)結(jié)合

在項(xiàng)目中整合報(bào)表設(shè)計(jì)器之后,便可通過相關(guān)url完成報(bào)表數(shù)據(jù)的引用,將其與實(shí)際業(yè)務(wù)進(jìn)行整合,以下簡單說明ureport相關(guān)報(bào)表設(shè)計(jì)器的url說明

報(bào)表相關(guān)url介紹

報(bào)表設(shè)計(jì)器:http://host[:port][/context-path]/ureport/designer

報(bào)表預(yù)覽:http://host[:port][/context-path]/ureport/preview?_u=報(bào)表名稱

預(yù)覽正在設(shè)計(jì)中的報(bào)表注意事項(xiàng):在預(yù)覽正在設(shè)計(jì)器中設(shè)計(jì)的報(bào)表時(shí)(也就是_u=p),UReport2會在點(diǎn)擊設(shè)計(jì)器工具欄

圖標(biāo)時(shí),將設(shè)計(jì)中的報(bào)表模版信息提交到服務(wù)器,存放于當(dāng)前用戶的session中(用戶會話中),所以一旦用戶session失效,如果我們再次直接預(yù)覽_u=p類型報(bào)表時(shí),會看到“com.bstek.ureport.console.exception.ReportDesignException: Report data has expired,can not do preview.”這樣的錯誤提示,表示存放于session中的正在設(shè)計(jì)器中設(shè)計(jì)的報(bào)表模版已經(jīng)失效,不能預(yù)覽。但如果_u的值是一個具體的報(bào)表名稱,則不存在這種問題,只有正在設(shè)計(jì)器中設(shè)計(jì)的報(bào)表模版在預(yù)覽中采用了這種機(jī)制,這點(diǎn)需要注意。

如果預(yù)覽的不是正在設(shè)計(jì)器中設(shè)計(jì)的模版,那么只需要給出具體的報(bào)表名稱即可,需要注意的是,這里的報(bào)表名稱要以其ReportProvider中要求的前綴開始,比如http://localhost:8080/ureport2-demo/ureport/preview?_u=file:test.ureport.xml等。

在線打印:在UReport2的報(bào)表預(yù)覽頁面中,可以看到UReport2提供了三種在線打印方式,分別是直接HTML打印、直接PDF打印以及PDF在線預(yù)覽打印。這其中直接HTML打印是利用瀏覽器的HTML打印功能實(shí)現(xiàn),能用于普通的A4紙類型報(bào)表頁面的打印,同時(shí)它不能打印出報(bào)表中定義的頁眉頁腳,如果有定義的話。對于直接PDF打印以及PDF在線預(yù)覽打印是服務(wù)端向?yàn)g覽器中寫入PDF流,利用Chrome、Firefox、Edge這些瀏覽器可以在線顯示PDF功能實(shí)現(xiàn)的打印,這種是直接打印的PDF,所以可以應(yīng)付各種復(fù)雜報(bào)表紙張類型的打印輸出。

Firefox預(yù)覽PDF:在預(yù)覽PDF時(shí),Firefox不允許當(dāng)前frame外通過javascript調(diào)用其打印功能(目前來看可能是Firefox的Bug),所以我們需要手工點(diǎn)擊其frame內(nèi)部自帶的打印按鈕實(shí)現(xiàn)打印。

在代碼中使用報(bào)表

在UReport2當(dāng)中,我們可以使用ExportManager實(shí)現(xiàn)在業(yè)務(wù)代碼中導(dǎo)出各種類型的報(bào)表,ExportManager接口源碼如下:

package

因?yàn)镋xportManager接口實(shí)現(xiàn)是配置在Spring當(dāng)中,所以要使用ExportManager接口,我們需要首先通過Spring的ApplicationContext取到ExportManager實(shí)例對象,我們可以通過ExportManager.BEAN_ID來取到對應(yīng)的Bean實(shí)例。

以下測試如何采用ExportManager導(dǎo)出HTML報(bào)表,并將報(bào)表內(nèi)容嵌入到一個JSP中。 首先需要采用報(bào)表設(shè)計(jì)器設(shè)計(jì)好一個報(bào)表模版文件,將其保存,比如報(bào)表模版保存后的文件名為demo.ureport.xml,然后在項(xiàng)目中創(chuàng)建一個JSP(這里之所以選擇JSP,是因?yàn)樗顬楹唵?#xff0c;可以保證所有的J2EE開發(fā)者都能看懂,實(shí)際使用時(shí)可能是MVC框架、Ajax等,但如果了解了在JSP中用法,其它的就簡單了),在JSP中輸入相應(yīng)代碼,導(dǎo)出Html報(bào)表,并將其寫入到JSP中,完整的JSP源碼如下:

預(yù)覽:http://localhost:8084/ureport/preview?_u=file:hhhhh.ureport.xml

在SSM配置基礎(chǔ)上添加相應(yīng)的jsp文件,完成配置啟動服務(wù)器訪問測試:

http://localhost:8084/custom/report/page/other?url=report/testReport

考慮實(shí)際業(yè)務(wù)整合問題:

數(shù)據(jù)源配置問題

總結(jié)

以上是生活随笔為你收集整理的水晶报表 jar包版本过低_工具类学习-UReport报表设计器整合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。