FineReport的数据库

转自: https://blog.csdn.net/Artemis1220/article/details/90597033

 jasperreport 开源免费

定义数据连接是将数据库与设计器进行绑定,通过数据连接,报表就可以从数据库中读取、写入数据和修改数据等。

1.  数据支持类型

FineReport连接数据源的方式多种多样,支持通过JDBC的方式直接连接数据库,或者通过JNDI的方式与应用服务器共享数据连接。也指出通过JCO连接SAP系统。

FR在设计器和平台中都可以新建数据连接,但是平台仅支持使用JDBC的数据连接的管理。

1.1  JDBC类

 

 

 

 

  数据源

  版本

 驱动 

 URL 

  APACHE KYLIN

  1.5、2.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.7;11.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.1;2.2;2.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/hadoop.hadoop.com@HADOOP.COM;

 华为云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(最小连接数),若小于就将连接池布满;假如没超过就将该连接标记为开放状态,可供再次复用。可看出正是这套策略保证了数据库连接的有效复用,避免频繁地建立、释放连接所带来的系统资源开销。
--------------------- 
作者:Juli☀️ 
来源:CSDN 
原文:https://blog.csdn.net/Artemis1220/article/details/90597033 
版权声明:本文为博主原创文章,转载请附上博文链接!

FineReport中,您可以通过以下步骤实现根据登录用户部门来查询数据: 1. 首先,您需要在数据库中建立相应的用户表和部门表,确保用户表中包含部门信息的字段。 2. 在FineReport中创建一个新的报表。 3. 在报表设计界面,选择数据集,并创建一个新的数据集。 4. 在数据集的查询语句中,可以使用参数来获取登录用户的部门信息。例如,如果您的用户表中有一个字段叫做"department",那么可以使用类似以下的SQL语句来查询数据: ``` SELECT * FROM your_table WHERE department = ${参数名} ``` 5. 接下来,您需要在报表设计界面创建一个参数。点击“参数”选项卡,然后点击“新建参数”。在参数设置中,可以设置参数的名称和类型。 6. 在报表设计界面,选择需要显示数据的组件(如表格、图表等)。然后,在组件的属性设置中,将数据集与参数关联起来。这样,在运行报表时,参数的值会根据登录用户的部门信息动态变化,并影响数据集的查询结果。 7. 最后,您可以根据具体需求设置不同的逻辑,例如如果登录用户部门是本单位,则查询全部数据,否则查询下属单位的数据。您可以使用FineReport提供的逻辑表达式、条件判断等功能来实现这一逻辑。 请注意,具体的实现方式可能会根据您的数据库结构和业务需求而有所不同。上述步骤仅提供了一个基本的思路,建议您根据实际情况进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值