通过数据库集成报表

【FineReport】帆软报表平台与SAP HANA数据库的无缝集成指南 本文详细指导如何实现FineReport与SAP HANA数据库的无缝集成。从前期准备、驱动获取,到核心的JDBC连接配置与测试,手把手教你打通数据链路,并快速创建首个动态报表,助力企业高效利用HANA数据价值,提升报表开发与数据分析的灵活性。 阅读详情

         从有报表工具的那天开始,就开始面临如何在应用种集成的问题。目前主要的集成方式是报表服务器启动web服务,在程序中通过URL跳转到报表服务器上。这种方式不安全,它要求客户端必须可以访问报表服务器的服务。下面来将一种新颖的集成方式:基于数据库C/S集成。它的做法是将报表放在数据库中,应用程序连接到数据库中,调用函数还运行报表,并获取运行结果进行展示。这种方式优势非常明显,只要应用程序可以连接到数据库就可以运行报表。它是跨平台的,与操作系统无关。目前只有SQLDOC可以支持这种集成方式,因为它的引擎是和分布式异构数据库SQLHUB结合在一起的。下面分别以.NET和Java为例说明具体的集成方法: 

 .NET中集成示例代码(C#语法)
using System;
using System.Data;
using System.IO;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using Hgsql.Data;
 
namespace Hgsql.Client
{
     ///<summary>
     /// Form1 的摘要说明。
     ///</summary>
     public class SqldocForm : System.Windows.Forms.Form
     {
         private AxPdfLib.AxPdf axPdf;
         ///<summary>
         ///必需的设计器变量。
         ///</summary>
         private System.ComponentModel.Container components = null;
 
         public SqldocForm()
         {
              //
              // Windows 窗体设计器支持所必需的
              //
              InitializeComponent();
 
              //
              // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
              //
         }
 
         ///<summary>
         ///清理所有正在使用的资源。
         ///</summary>
         protected override void Dispose( bool disposing )
         {
              if( disposing )
              {
                   if(components != null)
                   {
                       components.Dispose();
                   }
              }
              base.Dispose( disposing );
         }
 
         #region Windows 窗体设计器生成的代码
         ///<summary>
         ///设计器支持所需的方法 - 不要使用代码编辑器修改
         ///此方法的内容。
         ///</summary>
         private void InitializeComponent()
         {
              System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(SqldocForm));
              this.axPdf = new AxPdfLib.AxPdf();
              ((System.ComponentModel.ISupportInitialize)(this.axPdf)).BeginInit();
              this.SuspendLayout();
              //
              // axPdf
              //
              this.axPdf.Dock = System.Windows.Forms.DockStyle.Fill;
              this.axPdf.Enabled = true;
              this.axPdf.Location = new System.Drawing.Point(0, 0);
              this.axPdf.Name = "axPdf";
              this.axPdf.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axPdf.OcxState")));
              this.axPdf.Size = new System.Drawing.Size(292, 273);
              this.axPdf.TabIndex = 0;
              //
              // SqldocForm
              //
              this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
              this.ClientSize = new System.Drawing.Size(292, 273);
              this.Controls.Add(this.axPdf);
              this.Name = "SqldocForm";
              this.Text = "SQLDOC集成";
              this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
              this.Load += new System.EventHandler(this.SqldocForm_Load);
              ((System.ComponentModel.ISupportInitialize)(this.axPdf)).EndInit();
              this.ResumeLayout(false);
 
         }
         #endregion
 
         private void SqldocForm_Load(object sender, System.EventArgs e)
         {
              try
              {
                   JdbcConnection conn = new JdbcConnection();
                   conn.ConnectionString =
                       "driver={com.hg.jdbc.HgDriver}" //JDBC驱动名称
                       + ";url={jdbc:hg:net:@localhost:1980:hg}" //JDBC数据库连接URL
                       + ";user=hg" //数据库用户名
                       + ";password=hg" //数据库用户口令
                       + ";host=localhost" //JDBC服务器
                       + ";port=2007"; //JDBC服务器服务端口
                   //打开连接
                   conn.Open();
                   IDbCommand cmd = conn.CreateCommand();
                   //运行文档
                   cmd.CommandText = "doc_run('文化新闻','','db','','pdf','lob')";
                   string lobid = cmd.ExecuteScalar().ToString();
                   cmd.CommandText = "blob_length('" + lobid + "')";
                   //获取结果文档长度
                   long len = Convert.ToInt64(cmd.ExecuteScalar().ToString());
                   string str;
                   string[] strs;
                   //将文档存储到本地
                   FileStream fs = new FileStream("c:/sqldoc.pdf", FileMode.Create);
                   BinaryWriter w = new BinaryWriter(fs);
                   byte[] buf = new byte[1024];
                   sbyte sb;
                   for (int i = 0; i <= len / 1024 + 1; i++)
                   {
                       cmd.CommandText = "blob_read('" + lobid + "','" + (i * 1024 + 1) + "',1024)";
                       str = cmd.ExecuteScalar().ToString();
                       if (str.Length > 0)
                       {
                            strs = str.Split(new Char[] {','});
                            for (int j = 0; j < strs.Length; j++)
                            {
                                 sb = Convert.ToSByte(strs[j]);
                                 buf[j] = (byte) (sb & 0xFF);
                            }
                            w.Write(buf, 0, strs.Length);
                       }
                   }
                   fs.Close();
                   //清除临时lob
                   cmd.CommandText = "lob_clear('" + lobid + "')";
                   cmd.ExecuteNonQuery();
                   conn.Close();
                   //在pdf控件中显示
                   axPdf.src = "c:/sqldoc.pdf";
              }
              catch (Exception ex)
              {
                   MessageBox.Show(this, ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
              }
         }
         static void Main()
         {
              SqldocForm form = new SqldocForm();
              Application.Run(form);
         }
     }
}
Java中集成示例代码
package com.hg.doc;
 
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class JdbcTest {
    public static void main(String[] args) {
        try {
           //注册本地驱动
            Class.forName("com.hg.jdbc.HgLocDriver");
            //获取本地连接
            Connection conn = DriverManager.getConnection("jdbc:hg:loc:hg", "hg", "hg");
            /*
            //注册网络驱动
            Class.forName("com.hg.jdbc.HgDriver");
            //获取网络连接
            Connection conn = DriverManager.getConnection("jdbc:hg:net:@localhost:1980:hg", "hg", "hg");
            */
            Statement stmt = conn.createStatement();
            String sql;
            //运行文档
            sql = "doc_run('雇员','','db','','pdf','lob')";
            String lobid = queryValue(stmt, sql);
            sql = "blob_length('" + lobid + "')";
            //获取结果文档长度
            long len = Long.parseLong(queryValue(stmt, sql));
            String str;
            String[] strs;
            //将文档存储到本地
            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File("c:/sqldoc.pdf")));
            byte[] buf = new byte[1024];
            for (int i = 0; i <= len / 1024 + 1; i++)
            {
                sql = "blob_read('" + lobid + "','" + (i * 1024 + 1) + "',1024)";
                str = queryValue(stmt, sql);
                if (str.length() > 0)
                {
                    strs = str.split(",");
                    for (int j = 0; j < strs.length; j++)
                    {
                        buf[j] = Byte.parseByte(strs[j]);
                    }
                    out.write(buf, 0, strs.length);
                }
            }
            out.close();
            //清除临时lob
            sql = "lob_clear('" + lobid + "')";
            stmt.execute(sql);
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static String queryValue(Statement stmt, String sql) throws SQLException {
        ResultSet rst = stmt.executeQuery(sql);
        rst.next();
        String str = rst.getString(1);
        rst.close();
        return str;
    }
}
数据仓库概念(二) - ODS ODS(英语:Operational Data Store)是一种数据架构或数据库设计的概念,出现原因是来自于当需要集成来自多个系统的数据,结果又要给一或多个系统使用时。 一、概念 ODS (Operational Data Store)操作型数据存储,ODS具备数据仓库的部分特征和OLTP系统的部分特征,它是“集成的、当前或接近当前的、不断变化的”数据,一般不保留数据的变动轨迹,是数 阅读详情

相关推荐

WinForm下锐浪报表快速集成方案:子报表自动填充、数据库连接统一管理、开箱即用打印

一套面向C# WinForm开发者的锐浪报表轻量级封装工具,聚焦解决报表开发中常见的三大痛点:子报表数据联动难、数据库连接字符串散落在代码或模板里、调用流程冗长。封装核心类GridppReport.cs和GridppReportArr.cs,支持传入DataTable或DataSet后一行代码启动打印,自动完成主从报表绑定与子表动态填充;所有数据库连接通过配置入口集中管理,彻底避免硬编码;内置a.grf和b.grf两个可运行示例报表,双击gridWinform.exe即可直观查看子报表联动效果。项目已预集成

life6的博客 185

如何为ARTEX编写自定义Skill:以api-recon接口侦察为例的SKILL.md开发教程

ARTEX 是一款 AI 自主渗透测试系统,它的核心扩展能力就是**自定义 Skill**:一个 Skill 就是 `skills/` 目录下的一个文件夹,用一份 [SKILL.md](https://link.gitcode.com/i/77317b6dc99396917717f180ca5dbe14) 教会 Agent 一套可复用的工作方法。本文以官方的 **api-recon(前端接口侦察)

gitblog_00772的博客 469

本地AI代码助手:智能解析大型代码库,实现自动化重构与理解

在软件开发中,大型代码库的理解与维护是常见挑战。传统方法依赖人工阅读和有限上下文工具,效率低下。通过结合检索增强生成(RAG)和多智能体(Multi-Agent)架构,现代AI工具能够智能解析代码结构,理解模块关系,并精准定位相关代码片段。这种技术不仅能提升代码探索效率,还能自动化执行重构、文档生成等任务,在遗留系统维护、快速上手新项目等场景中发挥关键作用。本文以blackboxaicode/cli为例,展示了如何利用其代码感知和Workflow Automation能力,高效处理复杂代码库。

weixin_30240349的博客 369

无穹玩法 | GenStudio集成DB-GPT,实现数据报表分析自动化

用 GenStudio+DB-GPT打造一套自然语言驱动的数据分析系统

2401_87329534的博客 1006

十二、基于FPGA实现slave SelectMAP配置逻辑

slave SelectMAP配置

weixin_41838250的博客 8755

Cygwin安装教程

简介 cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件 Cygwin就是一个windows软件,该软件就是在windows上仿真linux操作系统 简言之,cygwin是一个在windows平台上运行的 linux模拟环境,使用一个Dll(动态链接库)来实现 这样,我们可以开发出Cygwin下的UNIX工具,使用这个DLL运行在W...

Errol's Blog 13万+

积木报表国产化适配:达梦数据库集成教程

在企业级应用开发中,数据库国产化适配已成为刚需。达梦数据库(DM Database)作为国内领先的关系型数据库,广泛应用于关键领域。然而,多数开源报表工具原生支持主流数据库,对达梦等国产数据库的适配存在诸多挑战: - **驱动兼容性**:达梦JDBC驱动类与URL格式与标准数据库差异显著 - **SQL语法差异**:日期函数(如`SYSDATE` vs `GETDATE()`)、字符串处理(`C...

gitblog_00598的博客 1149

避坑指南:RK3576+Android14适配移远5G模组(RG200U)时,我遇到的3个‘巨坑’及解决方案

本文详细记录了RK3576芯片适配Android14系统与移远RG200U 5G模组过程中遇到的三大技术难题:RIL服务启动失败、HIDL兼容性矩阵配置错误及ttyUSB权限冲突。通过实战案例提供了动态库拷贝、HIDL版本链声明和SELinux策略调整等解决方案,帮助开发者高效完成5G模组集成,特别适用于基于kernel6.1的嵌入式开发场景。

weixin_30664051的博客 391

数据分析之数据仓库

数据仓库(简称“数仓”),顾名思义,存放数据的仓库,它集合了各个业务系统的数据,以金融业为例,数仓包含了贷款业务、CRM、存款业务等数据。用于企业做数据分析、出报告、做决策;在有些公司也作为各业务系统的数据来源。从逻辑上理解,数据库和数仓没有区别,都是通过数据库软件实现存放数据的地方,只不过从数据量来说,数据仓库要比数据库更庞大。数据库与数据仓库最主要的区别在于,传统事务型数据库如 MySQL 用于做联机事务处理(OLTP),例如交易事件的发生等;

当我把这件事情做出来的时候,我想要的东西就已经拿到了 1314

密码学实战:如何利用生日攻击破解哈希函数

本文深入探讨了生日攻击在密码学中的应用及其对哈希函数的威胁。通过分析生日悖论的数学原理,揭示了哈希函数在实际应用中的脆弱性,并提供了防御策略,如升级哈希算法、正确使用加盐技术等。文章结合实战案例,帮助开发者理解如何有效防范此类攻击,确保系统安全。

weixin_42530732的博客 193

DDM-MIMO-FMCW雷达速度模糊与解模糊MATLAB仿真

本文深入解析了DDM-MIMO-FMCW雷达中的速度模糊现象及其解模糊方法,通过MATLAB仿真详细展示了相位编码解调、速度扩展算法和混合波形设计三大解决方案。文章还提供了参数配置、信号建模和结果可视化的实用技巧,并分享了工程实践中的避坑指南,帮助开发者高效解决雷达信号处理中的速度模糊问题。

weixin_31528001的博客 350

润乾集算器与帆软报表集成(直接通过jdbc,类DB存储过程方式调用)

集算器概述 集算器作为一种大数据计算工具,不仅在润乾产品体系中能发挥它的巨大作用,在其他绝大部分数据处理、数据计算领域的项目、产品中,也都有他助力计算的身影。比如 传统的报表工具,报表项目中,80%的报表可以轻松做出来,20%的因为有大数据量,或者是多样性的非常规数据来源及去向,这时候就需要占用项目很多的时间去做二次开发支持了,通过集算器则可以轻松的解决这些问题。这20%的困难问题,几乎所有的报...

cainiao_M的博客 1192

VS2022下OSG+OSGEARTH开发环境一键配置指南(Win10 x64+CMake自动化构建)

本文详细介绍了在VS2022环境下配置OSG和OSGEARTH开发环境的完整指南,包括软件下载、CMake自动化构建、编译实战及环境验证。通过一键配置脚本和常见问题解决方案,帮助开发者快速搭建3D开发环境,提升开发效率。

weixin_28828243的博客 406

一个集成了AI和BI报表功能的新一代数据库管理系统神器--Chat2DB

希望未来的流行开发软件工具中,能有越来越多是国产软件的身影,加油!这个集成AI的创新挺好的;本篇文章主要是介绍了一款集成了AI能力的数据库客户端软件–Chat2DB,并简单描述了它的好处和介绍其界面,如果你通过文章对这个国产软件感兴趣,那么你可以看看它,具体的使用和详细请参考官方文档。ps:为了薅官方的羊毛发的文章,各位屏幕前的彦祖美女们,能否助力一把这个不知死活的梦想呢?躺~

Binge的Blog,一起加油鸭! 860

LPDDR5电路设计的新功能

本文从硬件电路设计的角度,简述了LPDDR5 JEDEC标准中新增的功能。

一只豌豆象的博客 7148

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数据库视频之数据库备份恢复以及数据库的集成报表分析服务

第十二章 备份与恢复数据库 备份 1、类型:完整、差异数据库、事务日志、文件组 2、恢复模式:简单、安全、大容量日志记录 (数据库属性,“选项”选项下的恢复模式) 3、创建备份设备:服务器对象打开,新建备份设备,输入名称,保存即可 4、创建完整备份:右击表,找到任务,备份进行操作,添加保存地址,之后确定即可。 5、创建其他备份:以上操作同上(改变类型),在选项上不同。 6、其他备份选项:将一个表...

ZYB的博客 611

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ExcelJS数据库集成实战:5步快速生成专业Excel报表的完整指南

ExcelJS是一个功能强大的Node.js库,专门用于读取、操作和写入Excel电子表格数据和样式。无论您是需要从数据库导出数据、生成报表,还是处理复杂的Excel文件操作,ExcelJS都能提供简单高效的解决方案。本文将为您详细介绍如何将ExcelJS与数据库结合,实现自动化报表生成。 ## 📊 ExcelJS核心功能概览 ExcelJS支持完整的Excel文件操作功能,包括: - *

gitblog_01009的博客 335

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数据仓库简介

是什么数据仓库是一个面向主题的、集成的、非易失的、随时间变化的用来支持管理人员决策的数据集合。 面向主题的(subject-oriented): 数据仓库围绕一些主题,如顾客、供应商、产品和销售组织。数据仓库关注决策者的数据建模与分析,而不是集中于组织机构的日常操作和事务处理。 集成的(integrated): 通常,构造数据仓库时将多个异种数据源,如关系数据库

dazheng 1051

Clawdbot数据库集成:MySQL数据自动同步与报表生成

本文介绍了如何在星图GPU平台上自动化部署Clawdbot汉化版(增加企业微信入口)镜像,实现MySQL数据同步与报表生成功能。该解决方案可帮助企业自动化处理电商销售数据同步、定时生成精美报表等任务,显著提升数据管理效率。通过简单的配置,用户可快速搭建数据自动化处理流程。

weixin_30248619的博客 412

下载慢、包不对、黑屏?Folia 歌词动画播放器三平台安装一次讲清

装好 Folia 大约需要 5 分钟。下面按 Windows、macOS、Linux 三个系统给出从下载到启动的完整操作,同时覆盖国内下载慢、安装包版本对不上、Linux 启动黑屏这三个常见坑。 [![Folia 歌词动画播放器全屏歌词效果预览](https://raw.gitcode.com/GitHub_Trending/fo/folia-major/raw/7a5f975e337e5ba1

gitblog_00582的博客 171

积木报表集成人大金仓V9数据库的兼容性问题分析

随着国产化替代浪潮的推进,越来越多的企业选择国产数据库作为核心业务系统的数据存储方案。人大金仓Kingbase V9作为国产数据库的重要代表,在企业级应用中占据重要地位。然而,在将积木报表这类数据可视化工具与人大金仓V9集成时,开发者常常面临诸多兼容性问题,导致项目推进受阻、开发周期延长。 读完本文,你将获得: - 人大金仓V9与积木报表集成的主要兼容性问题清单 - 详细的SQL语法差异分析和解...

gitblog_01404的博客 404

【开源项目推荐】-支持GPT的智能数据库客户端与报表工具——Chat2DB

2023年是人工智能爆火的一年,ChatGPT为首的一系列的大模型的出现,让生成式人工智能彻底火了一把。但有人会说,GPT对于我们数据开发来说并没有什么作用啊?今天为大家推荐的开源项目,就是GPT在数据领域的一个优秀实践项目。让我们一起来看看吧~Chat2DB是一个集成了ChatGPT功能的数据库SQL客户端和报表工具,支持 windows、mac 本地安装,也支持服务器端部署,web 网页访问。...

大数据流动 1962

快速入门数据仓库(Data WareHouse)

在很久很久之前,异世界里生活着许许多多的种族,有人类、有精灵、有兽人,还有哥布林、魔王…   这个异世界的神想要统一的管理这些种族,于是神打造了多个象征权力的戒指,分发给每个种族的首领——这个戒指可以帮助他们更好的管理和控制各自的种族。   而神拥有一个独一无二、至高无上的戒指,从而控制每个种族的领袖,进而控制整个异世界。   这个异世界的每个生命就是一条数据(Data),每个种族首领拥有的戒指就是数据库(Data Base),而那个最独一无二的戒指就是数据仓库(Data W.

丧心病狂Loli控的博客 767

数据仓库面试题——介绍下数据仓库

数据仓库面试题——介绍下数据仓库

qq_41544550的博客 879

帆软连接达梦数据库

帆软目前支持的版本只有11.0及以上。

weixin_64772672的博客 154

什么是ODS

信息处理的多层次要求导致了一种新的数据环境 ——DB-DW 的中间层 ODS (操作型数据存储)的出现。 ODS 是 “ 面向主题的、集成的、当前或接近当前的、不断变化的 ” 数据。通过统一规划,规范框架和数据, ODS 可以实现操作型数据整合 和各个系统之间的数据交换 ,能够提供实时的操作型报表 ,减轻数据仓库的负担。建设 ODS 还可以为后期数据仓库...

chenpingpi 1031
上一篇: 通过JDBC访问SQLHUB
下一篇: 新型的报表结构:文档式报表
sqlhub
博客等级 码龄21年 19粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值