3.1 MATLAB实现
3.1.1 Database工具箱简介
Mathworks公司为MATLAB与数据库连接提供了有效接口一一Database工具箱。Database工具箱帮助用户使用MATLAB 的可视化技术与数据分析技术处理数据库中的信息。在MATLAB的工作环境下,用户可以使用SQL(structured query language)标准数据查询语言从数据库中读取数据或将数据写入数据库。
目前,MATLAB可以支持与主要厂商的数据库产品进行连接,例如Oracle、Sybase、Microsoft、SQL Serverand Informix等数据库。MATLAB的Oatabase工具箱还自带了Visual Query Builder交互式界面,方便用户使用数据。
3.1.2 Database工具箱函数
Oatabase工具箱函数具体分为数据库访问函数、数据库游标访问函数、数据库元数据访问函数,函数具体功能见表3-1~表3-3所示。由于相关函数较多,本节不详述相关函数语法,只具体讲解实例使用到的函数语法。




上述表格仅列出函数名称与函数的主要功能,函数的具体使用请读者参考Database工具箱的相关帮助信息。
3.1.3 数据库数据读取
数据库数据读取主要由数据库连接、获取数据库信息、执行SQL查询语言查询数据、关闭数据连接等几个主要步骤组成。在进行MATLAB与数据库的交互前,首先要对数据源进行配置(参见3.3节)。
1. 数据库连接函数database
database函数语法为:

输入参数如下。
● datasourcename:数据库名称(连接对象的名称,如果不是本地数据,则需输入网址或者E地址及端口)。
● usemame:数据库用户名。
● password:数据库密码。
输出参数conn:建立数据连接对象(内含连接信息、参数)。
【例3-1】测试函数M文件DatabaseRead.m。

注: AutoCommit:'on'表示数据库连接成功,AutoCommit:'off表示数据库连接失败。
2. 获取数据库连接信息函数ping
ping函数语法为:
ping(conn)
通过ping函数可以获得数据库连接的数据版本、数据名称、驱动程序、URL地址等。
输入参数conn:数据库连接对象。
输出参数如下。
● DatabaseProductName:数据库产品名称。
● DatabaseProductVersion:数据库产品版本。
● JDBCDriverName:JDBC驱动名称。
● JDBCDriverVersion:JDBC驱动版本。
● MaxDatabaseConnections:数据库最大连接数量。
● CurrentUserName:使用的数据库名称。
● DatabaseURL:数据库URL地址。
● AutoCornrnitTransactions:是否连接。
【例3-2】参数测试M文件DatabaseRead.m。

结果输出:

3. 执行SQL语句和打开游标函数exec
exec函数语法为:
curs=exec(conn,'sqlquery')
输入参数如下。
● conn:数据库连接对象。
● sqlquery:SQL 数据库查询语句。
输出参数curs:结构体(游标)。
【例3-3】测试函数M文件DatabaseRead.m。
该程序的目标是从数据库表StockData.dbo.Hs300中查询2008-01-01至2010-01-01的沪深300指数点位。
SQL查询语言的框架如下:

在数据wind_db的Price表中查询交易日在2012年的OpenPrice数据,按时间先后排序,操作步骤如下:

数据表StockData.dbo.Hs300的结构如表3- 所示。

涉及的SQL查询语言及其内容解释如下:

注:在SQL语言中,"一"表示注释,类似MATLAB中的"%" 。MATLAB语言的框架如下:

注:执行SQL语句的查询,有时可能没有得到想要的数据。查询的结果存储在curs结构变量中,需要对查询结果进行fetch处理,将数据导入MATLAB的数组中。
4. 导入数据到MATLAB单元数组函数fetch
fetch函数语法为:
curs=fetch(curs)
输入参数curs:exec执行后获得的结果(游标)。
输出参数curs:经fetch处理后的数据结果。
【例3-4】测试函数M文件DatabaseRead.m。

输出结果为:

5. 关闭数据库连接函数close
close函数语法如下。
●close(curs):关闭查询游标。
●close(conn):关闭数据连接。
函数M文件DatabaseRead.m测试如下:
close(conn)
注:在数据库连接或数据查询结束后,应当关闭数据库连接或查询游标,避免重复连接。重复查询浪费系统资源,使得计算机处理速度降低。
MATLAB的数据读写使用Java接口进行, 读取数据的大小受到内存限制。若读取的数据量较大,可以采用分批读取的方式进行以避免数据的内存溢出。
3.1.4 数据库数据写入
与数据的读取一样, 数据库数据写入主要由数据库连接、获取数据库信息、执行SQL查询语言写入数据几个主要步骤组成。
1.将数据插入数据库函数fastinsert
fastinsert函数语法为:
fastinsert(conn,'tab1ename',colnames,exdata)
输入参数如下。
● conn:数据库连接对象。
● tablename:数据写入的目标表名称(数据表需己经在数据库中建立完成) 。
● colnames:数据写入的列名称。
● exdata:写入数据。
【例3-5】测试函数M文件DatabaseWrite.m 。
将2010年6月21日的沪深300指数2780.66交易量5526万插入数据库StockData.dbo.Hs300表中。"StockData.dbo.Hs300"表示StockData数据库中的dbo.Hs300表。





2. 插入多行数据
上述案例讲解的是如何捕入一组数据,可以使用循环的方式实现插入多组数据。
【例3-6】测试函数M文件DatabaseWrite2.m。


注: MATLAB 的fastinsert的说明表达该函数可以进行多行插入,但实际测试总是报错,所以改用循环的方式进行数据插入。