集算器对数据库的操作

集算器可以从数据库中读取数据,可以将数据写入数据库,也可以调用数据库的存储过程。基于这三种基本操作,集算器可以应用在多种数据库相关的场景任务:

1、  数据分析和展现任务,其过程是:

  1. 通过sql或者存储过程,从数据库读入数据。
  2. 从其他数据源(其他数据库、文件、hdfs、nosql数据库、http数据源、json数据源等)读入数据。
  3. 将异构数据统一进行处理
  4. 提供给应用程序或者报表展现。

2、  类似ETL的批处理任务。

过程和分析展现任务类似,所不同的是最后一步数据不是用来展现,而是写入其他数据库或者其他数据源。

3、  对本数据库进行批量修改任务。

一个方法是从本数据库读入数据,处理之后回写入本数据库;还有一个办法是利用sql或者存储过程直接处理数据库的数据。

下面我们具体看一下三种基本操作的例子。

一、从数据库中读入数据。

上图中A1单元格连接上了一个名为demo的hsql数据库,A2单元使用sql语句查询了employee表,作为集算器的序表存入了A2单元格这个变量中,arg1是外部传入的参数。A3单元格关闭了数据库连接,A4单元格对外返回查询结果。集算器的集成开发环境右下角红框中可以显示demo数据库的表名、字段名,可以方便程序员书写sql语句。

二、向数据库写入数据。

集算器可以方便的实现增删改,最简单的写法如下:

上图中的A2到A4分别实现了插入、修改和删除。每条sql执行之后自动提交。需要说明的是:

1、3条语句提交了3次,对数据库操作比较频繁。

2、三条sql没有事务关系,后续的sql如果执行失败,并不影响前面的sql。

集算器也可以直接使用序表来批量更新,例如:从students.txt文件中导入学生信息,用来更新数据库中的students1表,由于有很多记录需要修改,所以使用批量提交数据库的方式比较合理。

A1:定义一个文件对象,文件中保存的是学生信息。

A2:导入文件内容。

A3:使用A2中的学生信息,批量修改学生表1的内容。这里是使用批量提交sql的方式,可以避免频繁访问数据库。同时,能够保证整批数据同时成功写入或失败,即数据的一致性。

集算器还可以处理多条sql构成一个完整数据库事务的情况,例如:我们要新增一个学生,插入数据之后,要将学生的id修改为9。为了保证数据一致性,插入和修改都成功之后才能提交,否则就要回滚。

A1:连接数据库。注意connect函数使用了@e选项,出错时返回错误信息由后边的代码自行处理。如果不用这个选项,数据库出错的时候会直接结束集算器程序。

A2:执行插入sql语句。注意,execute使用了@k选项,表示执行结束后并不提交事务。如果不使用的话,就直接提交这个插入语句了。

A3:取得上一条数据库操作,也就是插入语句执行的结果,如果是err变量是0的话就代表执行成功,否则就是错误代码。

A4:判断执行结果err变量是否为0,如果是0代表上一条插入语句已经成功,就执行B4中的修改操作。

C4:取得修改sql执行的结果。

A5:判断err变量,如果是0的话就提交数据库,否则就回滚。

A6:关闭数据库连接。

三、调用存储过程。

对于没有返回参数的存储过程,集算器的调用方法比较简单:

A1:连接数据库。

A2:调用存储过程,输出参数值为4。

对于返回结果集的存储过程,集算器可以这样调用:

A2单元格使用proc函数调用存储过程:orac.proc("{callproAA(?,?)}",:101:"o":a,:101:"o":b),返回了两个结果集(序表),组成了一个序表的集合:序列,赋值给了A1。下面依次解释一下proc行数的输入参数:

1)  sql字符串

"{call proAA(?,?)}"中包含调用存储过程的名字,问号表示sql的参数。

2)  输出参数1

:101:"o":a中定义了一个输出参数,101代表其数据类型是游标(其他类型参见附录),”o”代表这个参数是输出参数。a是定义了一个变量,可以用这个变量引用返回结果。

3)  输出参数2

:101:"o":b中定义了一个输出参数,101代表其数据类型是游标,”o”代表这个参数是输出参数。b是定义了一个变量,可以用这个变量引用返回结果。

A3单元格返回了A2单元格的第一个序表(emp表的结果集)。

A4、A5单元格分别使用A2中的输出变量a、b来获取存储过程对应的执行结果,a对应emp表的数据,赋值给A3,b对应test表的数据,赋值给A4。

附录:参数类型定义

type的取值为:

public final static byte DT_DEFAULT =(byte) 0; //默认,自动识别

public final static byte DT_INT =(byte) 1;

public final static byte DT_LONG =(byte) 2;

public final static byte DT_SHORT =(byte) 3;

public final static byte DT_BIGINT =(byte) 4;

public final static byte DT_FLOAT =(byte) 5;

public final static byte DT_DOUBLE =(byte) 6;

public final static byte DT_DECIMAL =(byte) 7;

public finalstatic byte DT_DATE = (byte) 8;

public final static byte DT_TIME =(byte) 9;

public final static byte DT_DATETIME =(byte) 10;

public final static byte DT_STRING =(byte) 11;

public final static byte DT_BOOLEAN =(byte) 12;

public final static byte DT_INT_ARR =(byte) 51;

public final static byte DT_LONG_ARR =(byte) 52;

public final static byte DT_SHORT_ARR =(byte) 53;

public final static byte DT_BIGINT_ARR= (byte) 54;

public final static byte DT_FLOAT_ARR =(byte) 55;

public final static byte DT_DOUBLE_ARR= (byte) 56;

public final static byte DT_DECIMAL_ARR= (byte) 57;

public final static byte DT_DATE_ARR =(byte) 58;

public final static byte DT_TIME_ARR =(byte) 59;

public final static byteDT_DATETIME_ARR = (byte) 60;

public final static byte DT_STRING_ARR= (byte) 61;

public final static byte DT_BYTE_ARR =(byte) 62;

public final static byte DT_CURSOR =(byte) 101;

public final static byteDT_AUTOINCREMENT = (byte) 102;

时间: 2024-07-29 14:48:14

集算器对数据库的操作的相关文章

集算器管理数据库事务的代码示例

集算器可以向数据库写入数据,支持数据库事务管理.这里通过例子来看一下控制事务提交和回滚等等的编程方法. 1.自动提交事务 集算器可以方便的实现增删改,最简单的写法如下: 上图中的A2到A4分别实现了插入.修改和删除.每条sql执行之后自动提交.需要说明的是: 1.3条语句提交了3次,对数据库操作比较频繁. 2.三条sql没有事务关系,后续的sql如果执行失败,并不影响前面的sql. 下面介绍结合序表批量提交事务,以及多条sql组成一个事务的编程例子.     2.批量提交事务 从students

集算器调用数据库存储过程的代码示例

集算器可以方便的调用数据库的存储过程,这里通过例子来看一下具体的程序写法. 调用无返回值的存储过程 用oracle的存储过程为例,存储过程只有一个输入参数,没有输出参数: create orreplace procedure pro1 (pid IN VARCHAR) as begin insert into emp values(pid,'mike'); update emp set name='rose' where id=pid; commit; end; 在集算器中可以使用execute

集算器访问数据库的配置

集算器支持包括数据库在内的多种异构数据源.这里,我们通过例子来看一下集算器访问数据库的方法. 集算器可以连接数据库的jdbc驱动,也可以通过jdbc-odbc桥连接数据库.由于版权的原因,使用集算器的程序员需要自行准备数据库的jdbc或者odbc驱动.Jdbc驱动jar包准备好之后,需要放入集算器IDE安装目录的/common/jdbc中,例如:C:\Program Files (x86)\MicroInsight\common\jdbc目录中. 集算器集成开发环境的ODBC配置界面如下: 集算

用集算器实现跨数据库关联报表

实际应用中很多报表的数据来源于多个不同类型的数据库,报表数据源跨数据库是报表开发中的常态.目前实现这类跨库关联报表的方式有多种,但都会存在这样那样的问题. 使用报表工具自身多源关联功能 现在大多数主流报表工具都支持多数据源关联,这在某些方面确实为报表用户带来了便利.然而我们也经常会遇到通过报表自身的多源关联功能很难实现一些跨库关联的报表(由于数据结构和业务本身决定).这当然容易理解,报表工具主要是来做数据展现的,而对数据计算本身来说并不擅长. 即使有的能实现,在报表中做跨库关联计算的效率也较低,

用集算器实现报表的外置存储过程数据源效果

业务逻辑相对复杂的报表开发中,开发人员往往会使用存储过程为报表准备数据.而使用存储过程往往受到编写困难.执行效率低下.数据库操作权限限制等问题,着实让开发人员不爽.如何改进或替代存储过程,成了很多程序员的心心声. 本文通过一个例子说明如何使用集算器实现报表存储过程数据源效果. 报表样式 某网络平台需要监测查看一定周期内的用户状况,需要为运营部门出具日报.周报.月报.年报等报表,每类报表中均包含本期与上期.上上期数据比较,故涉及数据量较大.这里以其日报为例(月报年报只是统计周期不同),报表格式如下

集算器中数据库连接的控制

在处理数据库事务时,有的操作有可能会产生错误,而错误的产生有可能会带来不可预知的操作结果,尤其是在批量事务中.为了避免这种情况的产生,就需要对数据连接进行相应的控制,并对数据库事务中的错误信息进行相应的处理.  1.数据库错误信息 下面我们先来研究数据库的错误信息.在这里,用一个Access文件DbCon.accdb作为目标数据库,在集算器中,新建一个ODBC数据源,直接使用这个文件中的数据,连接串填入:DRIVER=Microsoft Access Driver (*.mdb, *.accdb

集算器替代存储过程实现报表数据源

存储过程是SQL语句和流程控制语句的集合,常用来把一个复杂的计算目标分解为多个简单的计算步骤.虽然以复杂性换来了灵活性,但SQL语句固有的缺点仍然体现在存储过程中,比如:分步不彻底.数据无序.缺乏集合.缺乏引用,之前我们也分析过存储过程作为报表数据源的利弊,可点击这里查看. 集算器解决了存储过程的上述缺陷,降低了对开发人员的技术要求,是存储过程理想的替代工具. 报表例子说明 某电信产品厂商有一张报表,主要目的是分析优势产品的销售额.销量.环比等指标,其中优势产品的定义是"在每个州的销量均在前10

报表工具的二次革命之集算器的作用

之前的文章已经大致给大家介绍过大数据计算引擎-润乾集算器了.想必很多人心里还是存在疑惑,集算器作为大数据分析系统,到底它能做些什么?这篇文章,就为大家详细介绍. 降低报表开发难度 降低开发难度从而提高开发效率是集算器的设计初衷,是最容易理解的作用,前面已有粗略介绍. 这方面的细节内容太多,我们会再做一个专门话题详细讲述集算器如何解决报表开发中的各种具体难题以及与常规手段的对比.在这里只做总结性地阐述. 比Java和SQL更易写 如前所述,集算器的设计目标是为了解决报表的数据准备,而目前这个工作一

集算器协助Java处理多样性数据源之Hive

Java使用jdbc连接Hive比较简单,但是Hive的计算能力相对于其它数据库的SQL而言较弱,要完成非常规的计算需要将数据取出后用Java进一步计算,编程比较麻烦. 使用集算器配合Java编程,可以减少Java使用Hive时要进行复杂计算工作量.下面我们通过例子来看一下具体作法:Hive中的orders表中保存了订单的明细数据,需要计算同期比和比上期.数据如下: ORDERID CLIENT SELLERID AMOUNT ORDERDATE    1 UJRNP 17 392 2008/1