1. 程式人生 > >iReport 筆記(四) 使用JDBC作為資料來源

iReport 筆記(四) 使用JDBC作為資料來源

4.1 定義報表

在本例中,我先使用JDBC資料庫連線方式,使用資料庫為MS SQL Server,列印示例資料庫Northwind中的Products.ProductName列表。

iReport預設提供了MySql和HSql的驅動,如果要使用其它的資料庫,需要將相應的jar包複製到iReport安裝目錄的lib子目錄中,例如,對於SQL Server,我使用微軟提供的驅動,將msbase.jar、mssqlserver.jar、msutil.jar這3個檔案複製到lib子目錄中。

啟動iReport,點選選單“Data”-“Connection/Data Sources”定義資料來源,在此我使用“Database JDBC Connection”,中間有關的配置項不再多說,各輸入框的具體含義請參考本人所寫的

《使用資料庫》一章。本人配置畫面如下所示:

如果只定義了一個數據源,它即為預設的活動資料來源,否則需要使用選單“Data”-“Set Active Connection”設定活動資料來源。

新建一個報表,在選單“Data”-“Report Query”中設定該報表用到的SQL,我設為

select productname from products

報表的佈局與上例相同。

4.2 測試報表

定義完報表後,使用選單“Build”-“Compile”進行編譯,如果一切正常的話,則編譯成功,編譯後生成.jasper檔案,可在專案中進行程式設計使用。選擇測試方式為“Build”-“JRViewer Preview”,然後點選選單“Execute (With active connection)”,即可檢視測試結果,如下圖所示:

還可以使用其它的測試方式,會在當前目錄下生成相應的檔案,例如,我的報表檔案為report1.jasper,選擇PDF測試方式,則在當前目錄下生成report1.pdf。常用的方式為PDF方式,其它方式結果一般不盡如人意。

4.3 程式設計

將編譯生成的.jasper檔案置於程式包中下,例如lld.test.ireport,建立如下Servlet,即可根據.jasper檔案建立PDF報表

package lld.test.ireport;

import java.io.*;
import java.sql.*;

import javax.servlet.ServletException;
import
 javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.*;
import net.sourceforge.jtds.jdbc.Driver;

publicclass FirstRepServlet extends HttpServlet
{
    
privatestaticfinallong serialVersionUID =685516851376141590L;

    @Override
    
protectedvoid doGet(HttpServletRequest req, HttpServletResponse resp)
            
throws ServletException, IOException
    
{
        
this.doPost(req, resp);
    }


    @Override
    
protectedvoid doPost(HttpServletRequest req, HttpServletResponse resp)
            
throws ServletException, IOException
    
{
        
try
        
{
            Class.forName(
"net.sourceforge.jtds.jdbc.Driver");
            DriverManager.registerDriver(
new Driver());
            Connection connection 
= DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/NorthWind""sa""sa");
            
            String root_path 
=this.getServletContext().getRealPath("/");
            root_path 
= root_path.replace('/''/');
            File reportFile 
=new File(root_path +"/WEB-INF/classes/lld/test/ireport/report1.jasper");
            System.out.println(
"find file "+ reportFile.getPath());
            
byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), null, connection);
            System.out.println(
"create pdf file stream");
            resp.setContentType(
"application/pdf");
//            resp.setContentType("unknown");
//            resp.addHeader("Content-Disposition", "attachment;filename="1.pdf"");
            resp.setContentLength(bytes.length);
            OutputStream os 
= resp.getOutputStream();
            os.write(bytes, 
0, bytes.length);
            os.flush();
            os.close();
            System.out.println(
"close output stream.");
            
        }
catch (Exception e)
        
{
            e.printStackTrace();
        }
    
    }

}

相關推薦

iReport 筆記() 使用JDBC作為資料來源

4.1 定義報表 在本例中,我先使用JDBC資料庫連線方式,使用資料庫為MS SQL Server,列印示例資料庫Northwind中的Products.ProductName列表。 iReport預設提供了MySql和HSql的驅動,如果要使用其它的資料庫,需要將相應的j

Jasperreports+jaspersoft studio學習教程()- JDBC嚮導作為資料來源填充資料

4.1 在studio工具中可以直接連線資料庫,利用sql語句檢索。建立資料庫,並建表 本教程使用mysql5.5+SQLyog工具,若沒有安裝,請百度自行安裝,建立DemoReport資料庫,並將user_tab表,注入資料如下: 4.2 在studio工具中新建

iReport學習二:javabean作為資料來源

在IReport中是Javabean作為資料來源 因為在專案中用到報表功能學習了這個Ireport做為報表設計,期初遇到很多問題,最後還是出來了初次研究 網上也看了很多文章雜七雜八 來點簡單的 關注重點一些基本操作就不在描述了 1、看看實體類 getXXX() setXX

Ireport使用子報表(使用JavaBean集合作為資料來源)

子報表在本例中,我使用子報表將生成如下樣式的報表 6.1 程式部分 第一步,建立與之相關的Bean類,如下所示: ProvinceBean.java package lld.test.ireport; import java.util.ArrayList; public c

如何輸出格式化的字符串(學習筆記

linux python 格式化整數 浮點數 如何輸出格式化的字符串(學習筆記四)我們經常會輸出類似 ‘親愛的xxx你好!你xx月的話費是xx,余額是xx‘ 之類的字符串,而xxx的內容都是根據變量變化的,所以,需要一種簡便的格式化字符串的方式。在Python中,采用的格式化方式和C語言是一致的,

cocos2d-x-3.1 國際化strings.xml解決亂碼問題 (coco2d-x 學習筆記)

source ron 文件 亂碼問題 resource -s type fileutil ani 今天寫程序的時候發現輸出文字亂碼,盡管在實際開發中把字符串寫在代碼裏是不好的做法。可是有時候也是為了方便,遇到此問題第一時間在腦子裏面聯想到android下的strings

【Unity 3D】學習筆記十二:粒子特效

空間 獲得 material package 一個 log 創建 spa mpi 粒子特效 粒子特效的原理是將若幹粒子無規則的組合在一起。來模擬火焰,爆炸。水滴,霧氣等效果。要使用粒子特效首先要創建,在hierarchy視圖中點擊create——particle s

Tomcat學習筆記()

客服 list illegal state oid () ons mov tom Servlet容器部分 servlet容器用來處理請求servlet資源,並為web客服端填充response對象模塊,在tomcat中,共有4種類型的容器,分別是:Engi

JavaWeb學習筆記 request&response

cer 代碼 gbk msi 抓包工具 rom service net war HttpServletResponse 我們在創建Servlet時會覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個參數,一個為代表請求的request和代表響

Swift 筆記 () —— 集合類型

move 變量 accep 混雜 isempty style nim 推斷 集合類 集合類型 Swift 提供了兩種集合類型, Array, Dictionary Array與Dictionary 都須要存同樣類型的數據 //實際測試的時候發現能夠混雜類型,以

hibernate筆記()

元素 有用 tro getc 如何 cond 屬性 war factor 目標: 一、hibernate查詢 二、hibernate對連接池的支持 三、二級緩存 一、hibernate查詢 1. 查詢概述 1) Get/load主鍵查詢 2) 對象導航查詢

java 核心學習筆記() 單例類

com null tools 初始化 equal inf div 特殊 對象 如果一個類始終只能創建一個實例,那麽這個類被稱作單例類。 一些特殊的應用場景可能會用到,為了保證只能創建一個實例,需要將構造方法用private修飾,不允許在類之外的其它地方創建類的實例。 又要保

Python學習筆記()

pop rem 通過 修改 排序 python語言 創建 eve () 一、list創建   list 是Python語言中一種內置的數據類型  list 中可以存放不同類型的數據   list = [] #創建一個空列表  list = [1,2,3] #創建一個非空列

vue筆記

vuejs 動畫 將在 done 們的 觸發 city sca nim 十一.過渡與動畫 1.使用限制Vue 提供了 transition 的封裝組件,在下列情形中,可以給任何元素和組件添加 entering/leaving 過渡條件渲染 (使用 v-if)條件展示 (使用

Django開發筆記

hrn log dom ive tin gist tle rand 忘記密碼 1、郵箱激活 users app下,models.py: class EmailVerifyRecord(models.Model): code = models.CharField(m

Java字符串整理筆記()

情況 lan gen 英文字母 元字符 電話 log util 查找  6. 使用正則表達式   正則表達式是一種描述字符串集的方法,是以字符串集合中各字符串的共有特征為依據的。在程序開發中,正則表達式被廣泛地應用在字符串的 查找、替換、匹配等情況下,因此靈活地使用正則表達

筆記

訪問 轉發 跟蹤 htm 重新 quest tdi 別人 緩存 得到表單數據:1、String str = request.getParameter(String)//根據表單名得到表單值,如果是多個同名的鍵值,返回第一個值。2、String[] str= request.

spring學習筆記:spring常用註解總結

bean logs single 配置文件 屬性註入 ring 如果 let ons 使用spring的註解,需要在配置文件中配置組件掃描器,用於在指定的包中掃描註解 <context:component-scan base-package="xxx.xxx.xxx

StackExchange.Redis學習筆記() 事務控制和Batch批量操作

成了 pan arp 展示 關於 public 連續 因此 用戶 Redis事物 Redis命令實現事務 Redis的事物包含在multi和exec(執行)或者discard(回滾)命令中 和sql事務不同的是,Redis調用Exec只是將所有的命令變成一個單元一起執行,期

Spring MVC筆記() 訪問靜態頁面

inpu web-inf bean ... 逗號 beans efi back 發送 本例通過<mvc:resources>標簽訪問一個靜態或動態頁面。 首先還是創建一個web工程,並引入相關jar包: 創建控制器類,WebController.java