1、2023-5-5主要内容主要内容 数据库连接的数据库连接的MATLAB实现实现 网络数据读取网络数据读取2023-5-5第一节第一节 数据库连接的数据库连接的MATLAB实现实现2023-5-5一、一、Database工具箱简介工具箱简介 Mathworks公司为公司为Matlab与数据库连接提供了有效接口与数据库连接提供了有效接口Database工具箱。工具箱。Database工具箱帮助用户使用工具箱帮助用户使用Matlab的可视化的可视化技术与数据分析技术处理数据库中的信息。在技术与数据分析技术处理数据库中的信息。在Matlab的工作环的工作环境下,用户可以使用境下,用户可以使用SQL(s
2、tructured query language)标准数)标准数据查询语言从数据读取数据或将数据写入数据库。据查询语言从数据读取数据或将数据写入数据库。目前,目前,Matlab可以支持与主要厂商的数据库产品进行连接,可以支持与主要厂商的数据库产品进行连接,例如例如Oracle、Sybase、Microsoft,SQL Server,and Informix等等数据库。数据库。Matlab的的Database工具箱还自带了工具箱还自带了Visual Query Builder交互式界面方便用户使用数据。交互式界面方便用户使用数据。2023-5-5二、二、Database工具箱函数工具箱函数1.数
3、据库访问函数数据库访问函数函数名称函数名称函数功能函数功能clearwarnings清除数据库连接警告close关闭数据库连接commit数据库改变参数database连接数据库exec执行SQL语句和打开游标get得到数据库属性insert导出MATLAB单元数组数据到数据库表isconnection判断数据库连接是否有效isreadonly判断数据库连接是否只读ping得到数据库连接信息rollback撤销数据库变化set设置数据库连接属性sql2native转换JDBC SQL 语法为系统本身的SQL语法update用MATLAB单元数组数据代替数据库表的数据2023-5-52.数据库游
4、标访问函数数据库游标访问函数函数名称函数名称函数功能函数功能attr获得的数据集的列属性close关闭游标cols获得的数据集的列数值columnnames获得的数据集的列名称fetch导入数据到MATLAB单元数组get得到游标对象属性querytimeout数据库SQL查询成功的时间rows获取数据集的行数set设置游标获取的行限制width获取数据集的列宽attr获得的数据集的列属性close关闭游标cols获得的数据集的列数值columnnames获得的数据集的列名称fetch导入数据到MATLAB单元数组2023-5-53.数据库元数据函数数据库元数据函数函数名称函数名称函数功能函数
5、功能bestrowid得到数据库表唯一行标识columnprivileges得到数据库列优先权columns得到数据库表列名称crossreference得到主健和外健信息dmd创建数据库元数据对象exportedkeys得到导出外部健信息get得到数据库元数据属性importedkeys得到导入外健信息indexinfo得到数据库表的索引和统计primarykeys从数据库表或结构得到主健信息procedurecolumns得到目录存储程序参数和结果列procedures得到目录存储程序supports判断是否支持数据库元数据tableprivileges得到数据库表优先权tables得到数
6、据库表名称2023-5-5三、数据库数据读取三、数据库数据读取1.数据库连接函数数据库连接函数database conn=database(datasourcename,username,password)数据库密码数据库密码建立数据连接对象建立数据连接对象数据库名称数据库名称数据库用户名数据库用户名2023-5-5【例例8.1-1】建立数据库连接对象。建立数据库连接对象。%连接数据库连接数据库 conn=database(ARIS_SQL,sa,ariszheng)2023-5-52.获取数据库连接信息函数获取数据库连接信息函数ping ping(conn)已建立的数据连接对象已建立的数据连
7、接对象输出结果说明:输出结果说明:DatabaseProductName:数据库产品名称数据库产品名称DatabaseProductVersion:数据库产品版本数据库产品版本JDBCDriverName:JDBC驱动名称驱动名称JDBCDriverVersion:JDBC驱动版本驱动版本MaxDatabaseConnections:数据库最大连接数量数据库最大连接数量CurrentUserName:使用的数据库名称使用的数据库名称DatabaseURL:数据库数据库URL地址地址AutoCommitTransactions:是否连接是否连接2023-5-5【例例8.1-2】获取数据库连接信息
8、。获取数据库连接信息。%得到数据库连接信息得到数据库连接信息 ping(conn);2023-5-53.执行执行SQL语句和打开游标函数语句和打开游标函数exec curs=exec(conn,sqlquery)sql数据库查询语句数据库查询语句游标(结构体变量)游标(结构体变量)已建立的数据连接对象已建立的数据连接对象2023-5-5【例例8.1-3】执行执行SQL语句和打开游标。语句和打开游标。%查询数据库查询数据库 e=exec(conn,SELECT ALL Price FROM StockData.dbo.Hs300 WHERE Date BETWEEN 2008-01-01 AND
9、 2010-01-01 )2023-5-54.导入数据到导入数据到MATLAB单元数组函数单元数组函数fetch curs=fetch(curs)已建立的游标已建立的游标获取结果后游标获取结果后游标2023-5-5【例例8.1-4】通过已建立的游标读取数据。通过已建立的游标读取数据。%将查询结果导入数据到将查询结果导入数据到MATLAB单元数组单元数组 e=fetch(e)e.data2023-5-55.关闭数据库连接函数关闭数据库连接函数close close(curs):关闭查询游标:关闭查询游标已建立的游标已建立的游标已建立的数已建立的数据库连接对象据库连接对象 close(conn):
10、关闭数据连接:关闭数据连接2023-5-5【例例8.1-5】关闭数据库连接。关闭数据库连接。%关闭数据库连接关闭数据库连接 close(conn)2023-5-5四、数据库数据写入四、数据库数据写入1.将数据插入数据库函数将数据插入数据库函数fastinsert fastinsert(conn,tablename,colnames,exdata)写入的数据写入的数据已建立的数据连接对象已建立的数据连接对象数据写入的目标表名称数据写入的目标表名称数据写入的列名称数据写入的列名称2023-5-5【例例8.1-6】将将2010-6-21沪深沪深300的指数的指数2780.66 交易量交易量5526万
11、插万插入数据库入数据库StockData.dbo.Hs300表中。表中。“StockData.dbo.Hs300”表表示示StockData数据库中的数据库中的dbo.Hs300表。表。%建立数据库连接建立数据库连接 conn=database(ARIS_SQL,sa,ariszheng)ping(conn)load Hs300%写入数据写入数据 expData=2010-6-21 2780.66 55260000 fastinsert(conn,StockData.dbo.Hs300,Date;Price;Vol,expData);2023-5-5【例例8.1-7】插入多行数据。插入多行数据
12、。%采用循环插入多行数据采用循环插入多行数据load Hs300N=length(Hs300Price);for I=1:N expData=Hs300Date(i),Hs300Price(i),Hs300Vol(i);fastinsert(conn,StockData.dbo.Hs300,Date;Price;Vol,expData);endclose(conn)2023-5-5第二节第二节 网络数据读取网络数据读取2023-5-5一、一、Yahoo数据数据1.MyYahoo函数语法函数语法 StockPrice=MyYahoo(StockName,StartDate,EndDate,Fre
13、q)读取的证券数据读取的证券数据证券代码证券代码开始日期开始日期截止日期截止日期数据频率数据频率2023-5-5【例例8.2-1】提取武钢股份日行情数据。提取武钢股份日行情数据。%提取数据,武钢股份(上海交易所)提取数据,武钢股份(上海交易所)A=MyYahoo(600005.ss,01/01/2005,12/31/2008,d)stock=fints(A)plot(stock);2023-5-5二、二、Google数据数据1.googleprices函数语法函数语法 ds=googleprices(stockTicker,startDate,endDate)证券历史行情数据证券历史行情数据证券代码证券代码开始日期开始日期截止日期截止日期2023-5-5【例例8.2-2】提取思科系统历史行情数据。提取思科系统历史行情数据。%提取思科系统历史行情数据提取思科系统历史行情数据 stockTicker=NASDAQ:CSCO;%开始日期开始日期 startDate=Oct+1,2000;%截止日期截止日期 endDate=Jun+15,2010;%读取数据读取数据 ds=googleprices(stockTicker,startDate,endDate);