FineReport的數據庫

定義數據連接是將數據庫與設計器進行綁定,通過數據連接,報表就可以從數據庫中讀取、寫入數據和修改數據等。

1.  數據支持類型

FineReport連接數據源的方式多種多樣,支持通過JDBC的方式直接連接數據庫,或者通過JNDI的方式與應用服務器共享數據連接。也指出通過JCO連接SAP系統。

FR在設計器和平臺中都可以新建數據連接,但是平臺僅支持使用JDBC的數據連接的管理。

1.1  JDBC類

 

 

 

 

  數據源

  版本

 驅動 

 URL 

  APACHE KYLIN

  1.52.2

  org.apache.kylin.jdbc.Driver

  jdbc:kylin://<hostname>:<port>/<kylin_project_name>

  HP Vertica

  Vertica_7.2.1

  com.vertica.jdbc.Driver

 jdbc:vertica://verticaHost:port/databaseName

  IBM DB2

 DB2_7.2;
 DB2_8.1;
 DB2_8.2;
 DB2 V9.7;
 DB2_10.5

com.ibm.db2.jcc.DB2Driver  

  jdbc:db2://hostname:port/dbname

  INFORMIX

  11.711.5

  com.informix.jdbc.IfxDriver

  jdbc:informix-sqli://{host}:{port}/{database}:INFORMIXSERVER={server}

  Microsoft SQL Server

SQL server 2000;
SQL server 2005;
SQL server 2008;
SQL server 2012;
SQL server 2014;
SQL server 2016

  com.microsoft.sqlserver.jdbc.SQLServerDriver

  jdbc:sqlserver://localhost:1433;databaseName=

MySQL

MySQL_5.1;
MySQL_5.5;
MySQL_5.5.46;
MySQL_5.5.5;

MySQL_5.6.22;

MySQL_5.6.28;

MySQL_5.6.29;

MySQL_5.6.31;MySQL_5.6.34;

MySQL_5.6.35;
MySQL_5.6.37;
MySQL_5.7;

MySQL_5.7.16;

MySQL_6.5

驅動1】com.mysql.jdbc.Driver;
驅動2】org.gjt.mm.mysql.Driver 

jdbc:mysql://localhost/dbname 

 Oracle

oracle 9i;oracle_9.2;

oracle10.2.0;

oracle 11g;

oracle_11g2;

oracle_11.2.0.3;

oracle_11.2.0.4;

oracle_11.2.3;

oracle 12c;

oracle 10g AIX版本

oracle.jdbc.driver.OracleDriver 

jdbc:oracle:thin:@localhost:1521:databaseName 

 Pivotal Greenplum Database 

 

驅動1】org.postgresql.Driver;
驅動2】com.pivotal.jdbc.GreenplumDriver

 對應驅動1】jdbc:postgresql://hostname:port/dbname
對應驅動2】jdbc:pivotal:greenplum://hostname:port;DatabaseName="

 Postgresql

 postgresql_9.4.7;9.5.0;

 org.postgresql.Driver

 jdbc:postgresql://hostname:port/dbname

 DERBY

 

org.apache.derby.jdbc.ClientDriver  

 jdbc:derby://localhost:1527/

 KINGBASE

 

 com.kingbase.Driver

 jdbc:kingbase://hostname:port

 Gbase 8A

 Gbase 8A(基於mysql)

 com.gbase.jdbc.Driver

 jdbc:gbase://hostname:port/dbname

 Gbase 8S 

 Gbase 8S(基於infomix)

com.gbasedbt.jdbc.IfxDriver 

 jdbc:informix-sqli://{host}:{port}/{database}:INFORMIXSERVER={server}

 Gbase 8T

 Gbase 8T(基於informix)

 com.informix.jdbc.IfxDriver

 jdbc:informix-sqli://{host}:{port}/{database}:INFORMIXSERVER={server}

 Presto

 Presto_0.152;0.169

 com.facebook.presto.jdbc.PrestoDriver

 jdbc:presto://host:port/catalog

 SAP HANA

 

 com.sap.db.jdbc.Driver

 jdbc:sap://hostname:port?reconnect=true

 SAP Sybase

 SAP Sybase ASE_12.5;SAP Sybase IQ

 com.sybase.jdbc4.jdbc.SybDriver

jdbc:sybase:Tds:hostname:2638/databasename  

 TeraData 

 Teradata_v12; TeraData_15.00.06.04

 com.ncr.teradata.TeraDriver

 jdbc:teradata://localhost/CLIENT_CHARSET=EUC_CN,TMODE=TERA,CHARSET=ASCII,LOB_SUPPORT

 APACHE IMPALA

 impala 2.2;
 impala 2.3;
 impala 2.8;
 impala 2.9;
 impala 2.10;
 impala 2.10 kudu1.5;

 com.cloudera.impala.jdbc41.Driver

jdbc:impala://hostname:port/_impala_builtins  

 Hadoop Hive

hive_1.1; Hadoop_Hive_1.2;hive2.3; 
hive2.1.2;hive2.1.1;

 org.apache.hive.jdbc.HiveDriver

jdbc:hive2://hostname:port/databasename  

 SPARK

  1.6
 
2.12.22.3; 

 org.apache.hive.jdbc.HiveDriver

 jdbc:hive2://hostname:port/databasename

 TRANSWARP INCEPTOR(星環)

 星環_4.6.4
 星環
_4.7.1
 星環
_4.5.1
 星環
_5.1
 星環
_5.2.1

org.apache.hive.jdbc.HiveDriver  

 jdbc:hive2://hostname:port/databasename

APACHE Phoenix 

 

 org.apache.phoenix.jdbc.PhoenixDriver

 jdbc:phoenix:hostname:port/dbname

 ADS

 

 com.mysql.jdbc.Driver

 jdbc:mysql://hostname:port/my_ads_db

 Amazon Redshift

 

驅動1】com.amazon.redshift.jdbc4.Driver 
驅動2】com.amazon.redshift.jdbc41.Driver

 驅動1】jdbc:redshift://endpoint:port/database
 【
驅動2】jdbc:postgresql://endpoint:port/database

 H2

 

 org.h2.Driver

 jdbc:h2://${ENV_HOME}/../databaseName

 Hsql

 

 com.fr.third.org.hsqldb.jdbcDriver

 jdbc:hsqldb:file:[PATH_TO_DB_FILES]

 Sqlite

 

 org.sqlite.JDBC

 jdbc:sqlite:[PATH_TO_DB_FILES]

 GaussDB 200

 

 org.postgresql.Driver

 jdbc:postgresql://hostname:port/dbname

 FusionInsight elk

 

 org.postgresql.Driver

 jdbc:postgresql://hostname:port/dbname

 FusionInsight HD

 

 org.apache.hive.jdbc.HiveDriver

 jdbc:hive2://10.135.0.110:24002,10.135.0.67:24002,10.135.0.66:24002/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;sasl.qop=auth-conf;auth=KERBEROS;zk.principal=zookeeper/hadoop;principal=hive/[email protected];

 華爲雲DWS

 

 org.postgresql.Driver

 jdbc:postgresql://hostname:port/dbname

 Hbase

 

  org.apache.phoenix.jdbc.PhoenixDriver

  jdbc:phoenix:hostname:port/dbname

 cache

 

  com.intersys.jdbc.CacheDriver 

 

 

1.2  多維數據庫類 

  
  Microsoft Analysis Services(ssas)
  SAP  HANA
  Oracle Essbase
  
  Tomcat配置JNDI連接
  Websphere配置JNDI連接——待完善
  Weblogic配置JNDI連接
  Jboss配置JNDI連接——待完善

 1.3  JNDI

  

  Tomcat配置JNDI連接

  Websphere配置JNDI連接——待完善

  Weblogic配置JNDI連接

  Jboss配置JNDI連接——待完善

1.4  其他 

  
  [設計器]SAPBW數據連接
  [設計器]MongoDB數據庫連接
  JSON數據集

 

2  連接池

2.1  連接池原理

連接池主要由三部分組成:連接池的建立、連接池中連接使用的治理、連接池的關閉。

連接池技術的核心思想,是連接複用,通過建立一個數據庫連接池以及一套連接使用、分配、治理策略,使得該連接池中的連接可以得到高效、安全的複用,避免了數據庫連接頻繁建立、關閉的開銷。另外,由於對JDBC中的原始連接進行了封裝,從而方便了數據庫應用對於連接的使用(特別是對於事務處理),提高了開發效率,也正是因爲這個封裝層的存在,隔離了應用的本身的處理邏輯和具體數據庫訪問邏輯,使應用本身的複用成爲可能。

2.2  連接池屬性

FR 連接池屬性,使用的是 DBCP 連接池,下面介紹其設置方法及其屬性中各參數的意義;如果訪問模板時,報連接超時、等待狀態,警告如下:

則需要把相應連接數調大。

設置方法:

點擊 服務器>定義數據連接,如下圖所示,點擊連接池屬性,彈出連接池屬性編輯框,調整最大活動連接數:

參數說明:

名稱   舉例   含義  
初始化連接數 initialSize="1" 初始化線程數,開始自動建立一個與數據庫的連接
最大活動連接數 maxActive="200" 可以從對象池中取出的對象最大個數,爲0表示沒有限制
最大空閒連接數 maxIdle="100" 最大等待連接中的數量,設爲負數則沒有限制(對象池中對象最大個數)
最小空閒連接數 minIdle="2" 對象池中對象最小個數
最大等待時間(毫秒) maxWait="1000" 最大等待時間,單位爲 ms,超出時間會丟出錯誤信息
SQL 驗證查詢 validationQuery="SQL語句" 驗證連接是否成功,SQL 和 SELECT 指令至少要返回一行
獲取連接前檢驗 testOnBorrow="false" 取得對象時是否進行驗證,檢查對象是否有效,默認爲 false
歸還連接前檢驗 testOnReturn="true" 返回對象時是否進行驗證,檢查對象是否有效,默認爲 false
開啓空閒回收器檢驗 testWhileIdle="true" 空閒時是否進行驗證,檢查對象是否有效,默認爲 false
空閒連接回收器休眠時間(毫秒) timeBetweenEvictionRunsMillis="1000" 失效檢查線程運行時間間隔,如果小於等於 0,不會啓動檢查線程
空閒連接回收檢查數 numTestsPerEvictionRun="2" 失效檢查線程運行次數
保持空閒最小時間 minEvictableIdleTimeMillis="18005000" 大於 0,進行連接空閒時間判斷,或爲 0,對空閒的連接不進行驗證

連接池滿問題

若日誌報ORA-12519 TNS:no appropriate service handler found,是數據庫連接失敗的錯誤,12519錯誤是監聽不能提供服務。

原因:

原因是我們定義數據連接後,點擊連接時,此時會用掉一個連接池中的一個連接。
而在定義數據集後,點擊預覽按鈕,此時連接池就會分配連接,可能會使用之前那個連接(之前的連接已釋放),或分配一個其他的連接或新建一個連接。
若此時連接池所有連接都已用完,就會報如下錯誤:

當客戶請求數據庫連接時,首先是查看連接池中是否有空閒連接(指當前沒有分配出去的連接)。
假如存在空閒連接,則把連接分配給用戶,並作相應的處理(即標記該連接爲正在使用,引用計數加1)。
假如沒有空閒連接,則查看當前所開的連接數是不是已經達到maxConn(最大連接數),若沒達到就重新創建一個連接給請求的客戶;
若達到就按設定的maxWaitTime(最大等待時間)進行等待;
若等待maxWaitTime後,仍沒有空閒連接,就拋出無空閒連接的異常給用戶。

解決方案:

若您在FR連接池屬性的設置中,已將最大連接數設置得過大,還出現如上的報錯,此時通常就是數據庫進程(processes)達到上限導致的,可增大數據庫中的連接數目來解決此問題。如下在數據庫中修改最大連接數:

查看當前的連接數

<span style="color:#334356"><span style="color:#1bc1a1"><img data-cke-saved-src="http://help.finereport.com/js/clipboard/clippy.png" src="http://help.finereport.com/js/clipboard/clippy.png" alt="Copy to clipboard" class="clippy" /><code>select count(*) from V$process;</code></span></span>

查看數據庫允許的最大連接數

<span style="color:#334356"><span style="color:#1bc1a1"><img data-cke-saved-src="http://help.finereport.com/js/clipboard/clippy.png" src="http://help.finereport.com/js/clipboard/clippy.png" alt="Copy to clipboard" class="clippy" /><code>select value from V$parameter where name=<span style="color:#dd1144">'processes'</span>;</code></span></span>

修改最大連接數爲1000

<span style="color:#334356"><span style="color:#1bc1a1"><img data-cke-saved-src="http://help.finereport.com/js/clipboard/clippy.png" src="http://help.finereport.com/js/clipboard/clippy.png" alt="Copy to clipboard" class="clippy" /><code>alter system set processes=<span style="color:teal">1000</span> scope=spfile</code></span></span>

重啓數據庫,再查詢最大連接數,數字改變就表示已修改成功。

說明:當客戶釋放數據庫連接時,先判定該連接的引用次數是否已超過規定值,假如超過就刪除該連接,並判定當前連接池內總的連接數是否小於minConn(最小連接數),若小於就將連接池佈滿;假如沒超過就將該連接標記爲開放狀態,可供再次複用。可看出正是這套策略保證了數據庫連接的有效複用,避免頻繁地建立、釋放連接所帶來的系統資源開銷。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章