APP下载

用Matlab实现跨平台多数据库系统查询

2009-11-29张泽宇潘和平马火林

长江大学学报(自科版) 2009年10期
关键词:跨平台工具箱数据源

张泽宇,潘和平,马火林

(中国地质大学(武汉)地球物理与空间信息学院,湖北 武汉 430074)

用Matlab实现跨平台多数据库系统查询

张泽宇,潘和平,马火林

(中国地质大学(武汉)地球物理与空间信息学院,湖北 武汉 430074)

经多年技术积累和不断研究,不同单位或个人在不同计算机系统上都有应用效果好、方法独特的应用软件与对应的数据库。但地学领域不同单位、不同学科往往拥有的资料内容不同、存放形式不一,同一套资料在不同的计算机系统上存放方式也不一样,造成资源浪费,成本增加。因此,要寻找一种有效的方法,方便地获取不同环境下的地学数据。Matlab集处理、图形图像、仿真于一体,拥有包括数据库在内的许多专用工具箱。利用Matlab的交互查询与编程查询2种方式实现了不同数据库之间的数据查询与共享。实践表明,这是实现跨平台、跨系统的不同数据库数据共享的一种较为方便、理想的方式。

Matlab系统;数据库;数据共享;SQL语言;测井数据

在石油勘探开发多年的研究中,每次计算机的升级换代,都要对不同计算机系统上已有的数据进行转换或存取。但地学领域不同单位、不同学科往往拥有的资料内容不同、存放形式不一,即使同一套资料在不同的计算机系统上存放方式也不相同,相互共享也很麻烦,造成资源让费,成本增加[1]。例如,有的资料是在dbase下建立的,有的是在Oracle下建立的,而另一些可能是文本文件或excel表格。要将这些数据转换成统一格式是相当费事的一件工作,且转换后的格式,随着时间的推移,在新的环境下可能又不适应。另一方面,若有多个工作组协同工作,每个工作组可能是按自己专业熟悉的数据体形式存放数据的,强调用统一的格式,势必影响各工作组的效率。这也是至今勘探领域没有一套统一的数据库系统的原因之一。

Matlab提供了数据库工具箱Database Toolbox,使得用户可以在Matlab与绝大部分关系数据库之间进行数据的输入与输出[2],且Matlab的网络功能,使得只要有网络连接的系统,跨平台多数据的共享就能轻松实现[3]。此外,Matlab与C类及Fortran类语言可混合编程,生成脱离Matlab环境的可执行程序,在没有安装Matlab软件的系统上,数据库的共享同样可行。笔者采用Matlab数据库工具箱[4],实现了不同数据库之间的数据查询与共享。

1 Matlab数据库数据资源设置

1.1Matlab数据库工具箱功能

1) 既可编程查询,又可交互式手工查询。 Matlab提供了大量的操作数据库的函数,编程人员可直接利用所提供的函数将操纵数据库的函数嵌入到程序中,不须考虑数据库的结构,也不必考虑是哪一种数据库产品。这样,可用Matlab对所查询的数据进行各种计算、分析、制图等,然后将处理结果存回数据库。Matlab还提供了交互式数据查询的图形用户界面VQB(Visual Query Builder),查询数据可用几十种图形显示,也可用数据、报表等形式来表达和存储。

2)数据库操作函数为标准的结构查询语言SQL[5]。

3)自动识别数据库中的数据类型。

4)对所连接的数据库,可用多个不同的查询指针。这样,一次可同时打开多个不同类型的数据库,从而共享不同的数据资源。还可很方便地实现从一种数据库到另一种数据库的数据交换。目前支持的数据库为与ODBC(Open Database Connectivity,Windows微机平台)或JDBC(Java Database Connectivity,UNIX工作站平台)兼容的几乎所有大型数据库管理系统,包括IBM DB2,Informix,Ingres,Microsoft Access,Microsoft SQL Server,Oracle,Sybase SQL Server,Sybase SQL Anywhere,FoxPro,Paradox,dBase等。

1.2数据资源设置

在使用Matlab的数据库工具箱之前,必须设置数据源,以指出数据库的类型、存放数据库的路径或网络地址(使用远程数据库时)[6]。不同的系统中,设置数据源的方法稍有不同,下面以Windows系统的Microsoft Access数据库为例,说明设置PC上的ODBC数据源的方法。

1)打开数据源选择界面,建立数据库逻辑连接 从“开始”-“控制面版”-“管理工具”-“数据源(ODBC)”,直到出现ODBC数据源管理器。点击“添加(D)”,出现“创建数据源界面”,如图1所示。从中选“Driver do Microsoft Access(*.mdb)”,点击“完成”,出现图2所示的数据源连接界面。

图1 创建数据源界面(选择Access类型的数据库) 图2 数据源连接界面(逻辑连接)

图3 实际数据库选择界面(物理连接)

图4 交互式查询界面

2)建立数据库物理连接 图2中,“数据源名”是Matlab使用的逻辑上的数据库名称(图中为kl2-project-1),Matlab就是以此与数据库打交道的,Matlab并不关心真正的数据库名称叫什么。“说明”域内的信息仅共注释用。真正物理上存放的数据库点击“选择(S)”,出现图3所示的界面。

图3中选择了“克拉2.mdb”,这是实际数据库的名称,到此,真正数据库“克拉2.mdb”与逻辑上的“well-project-1”就建立了一种联系。由此可以看到使用Matlab的用户无需知道数据库是怎样构成的,只需知道数据库中有什么数据(“字段”)即可。

若是远程查询,则要进一步点击“网络”。

2 数据共享方法

2.1交互式查询获取数据方法

启动Matlab后,使用querybuilder启动交互式查询工具VQB(图4)。在图4上,依次选“数据源”,“表”,“字段”,填写查询条件(WHERE)等项,就会自动生产查询语句(SELECT),填写Matlab存放查询数据的“工作空间变量”,点击“执行”,即可完成查询。标准SQL所有的功能,这里均可实现。完成查询后,可从Query菜单上选Save保存查询结果,以后再使用时,可用Load调入查询结果。

图4中,选择了“kl2_project_1”为数据库的逻辑连接名,选择了“KL2_8_3457_4133”为表名,选择了DEPTH、GR、ILD、ILM为域名。选择后生成的SQL语句为“SELECT ALL DEPTH,GR,ILD,ILM FROM KL2_8_3457_4133”,存放的数据变量名为kl2data。图中的工作空间变量信息区显示“4437 X 4”表明有4条曲线(包括深度DEPTH),每条曲线有4437个深度点。

查询结果可以是以变量形式保存的数据形式(前面的变量kl2data),也可以是直观的图形显示,包括曲线、直方图、等值线图、三维曲面图等能显示的各种图形(图5)。

查询结果还可以以报表的形式给出,表1为截取的报表的一部分(包括表格线)。

一组数据查询完后,用同样的过程查询多组数据,并保存为不同的变量,以达到数据共享的目的。

表1 数据库工具箱报表

图5 交互式查询图形显示

2.2编程查询获取数据方法

Matlab提供了SQL所具有的全部语句的函数。使用函数的编程方式操作数据库十分方便。例如,exec(执行SQL语句并打开数据库指针)、select(查询满足条件的数据)、insert(将数据插入数据库中)、update(替换数据库中的数据)等。下面的例子说明如何使用函数对数据库进行操作。

% Matlab编程操作数据库示例

function dbimportdemo()

%

% 第1步:连接数据库

% 格式:CONNECT= DATABASE(数据库名,用户名,口令)

%

connA=database(’SampleDB_1_PC’,’zhang’,’x123’)

connB=database(’SampleDB_2_UNIX’,’wang’,’'w456’)

% connA为PC机上的数据库’SampleDB_1_PC’与Matlab的链接

% connB为UNIX系统上的数据库’SampleDB_2_UNIX ’与Matlab的链接

%

% 第2步:打开指针

% 在SampleDB_1_PC 数据库的Jian1_1980表中 查询DEPTH,GR,ILD,ILM

%Jian1_1980是1980年的一口井的测井资料,放在微机上

% 在SampleDB_2_UNIX 数据库的Jian1_1995表中 查询DEPTH,GR,ILD,ILM

%Jian1_1995是同一口井1995年测的测井资料,放在工作站上

%

cursorA=exec(connA,’select DEPTH,GR,ILD,ILM from Jian1_1980’);

cursorB=exec(connB,’select DEPTH,GR,ILD,ILM from Jian1_1995’);

% 第3步:对获取的数据进行各种处理,包括运算、绘图、数据保存等

% 例如:获取前10行数据

cursorA=fetch(cursorA,10)

% 显示行数

rowsA=rows(cursorA)

% 显示列数

columnsA=cols(cursorA)

% 显示列名(曲线名)

fieldnamesA=columnnames(cursorA)

% 显示数据

AA=cursorA.Data

% 计算GR(此处为查询的第二个数)的平均值,此处可加任何运算

meanGR=sum([AA{:,2}])/double(rowsA)

% 保存数据

save(’Jing1_demo.txt’, ’AA’, ’meanGR’, ’-ASCII’)

% 第4步:关闭指针

close(cursorA)

% 第5步:关闭与数据库的连接

close(connA)

3 结 语

利用Matlab的数据库工具箱,既可编程查询,又可交互式查询,用户不需考虑数据库的结构,也不用管是哪一种数据库产品,就可方便查询不同数据库中的数据。这是实现跨平台、跨系统的不同数据库共享的一种较为理想的解决办法。

[1]陈历胜,李玲.胜利油田勘探数据库整合思路与实践[J].信息技术与信息化,2008,14(6),38~39.

[2] Mathworks Company. Database Toolbox Database Toolbox User’s Guide[EB/OL].http://www.mathworks.cn/access/helpdesk_r13/help/pdf_doc/database/database.pdf.

[3]朱勇.Matlab在网络环境下的应用[J].阜阳师范学院学报:自然科学版,200,21(2),73~76.

[4]孙昆峰.Matlab和数据库的连接[J].电脑开发与应用,2001,14(4):10.

[5]朱素芳,汪小澄. 基于VC和SQL优化Matlab仿真结果的实现[J].微计算机信息,2006,22(3):170~172.

[6]吴敏,陈涛.Matlab数据库开发设计[J].工业控制计算机,2006,19(4):44~46.

[编辑] 易国华

2009-08-10

国家科技重大专项课题(2008ZX05005-006-09HZ)。

张泽宇(1987-),男,2008年大学毕业,硕士生,现主要从事地球物理测井方面的研究工作。

TP311.13

A

1673-1409(2009)04-N057-04

猜你喜欢

跨平台工具箱数据源
会“叫”的工具箱和工具
跨平台APEX接口组件的设计与实现
Web 大数据系统数据源选择*
基于MATLAB优化工具箱优化西洋参总皂苷提取工艺
基于不同网络数据源的期刊评价研究
机械加工机床工具箱的优化设计
基于真值发现的冲突数据源质量评价算法
基于QT的跨平台输电铁塔监控终端软件设计与实现
基于OPC跨平台通信的电机监测与诊断系统
基于B/S的跨平台用户界面可配置算法研究