版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Good is good, but better carries it.精益求精,善益求善。Matlab数据库编程指南-Godman-Matlab数据库编程指南-GodmanMatlab与数据库链接有三种方法,本文只讲述其中以ODBC的方式进行链接。本文件包含四部分,其中第三部分为我自己写的一些数据库函数操作的函数,第四部分为网上的一些资料。如有疑问可以邮件联系HYPERLINKmailto:Godman2009.3.30晚GoodLuck!第一部分:读取数据其相关信息查看配置数据源(1).“控制面板”-“管理工具”“数据源(ODBC)”“添加”“创建数据源名称和选择数据库文件”。具体操作见“
2、配置数据源.gif”(2).采用修改注册表,自动配置数据源。DB_path=D:ProgramFilesMATLAB71workStuSystem.mdb;DB_sourcename=Godman;LinkDB(DB_path,DB_sourcename,1);(LinkDB为自编函数)建立链接对象database调用格式:conna=database(datasourcename,username,password);如conna=database(SampleDB,);其中SampleDB为上文中创建的数据源名称,当默认情况下,数据库文件的username和password为空。建立并打开
3、游标exec调用格式:curs=exec(conna,sqlquery);如curs=exec(conna,select*fromdatabase)其中conna为上文中链接对象,select*fromdatabase表示从表database中选择所有的数据.把数据库中的数据读取到Matlab中fetch调用格式:curs=fetch(curs,RowLimit);Data=curs.Data;%把读取到的数据用变量Data保存.如curs=fetch(curs);把所有的数据一次全部读取到Matlab中,RowLimit为每次读取的数据参数的行数,默认为全部读取,但是全部读取会很费时间(和计
4、算机性能很大关系)。上述四点是matlab从数据库文件中读取数据到matlab中的基本步骤。数据返回类型从数据库中读取数据到matlab有三种数据类型(默认为元胞类型cellarray),分别为元胞类型(cellarray),数字型(numeric),结构型(structure)。可以在链接数据库之前通过setdbprefs函数来进行设置。如果数据库文件中全部是数值型数据时最好采用numeric型的数据,这样可以使得读取速度大幅提高,特别是在大型数据读取时非常明显。我曾经从数据库中读取过100万个数据,用cellarray时用了16s,但是用numeric时却只用了8s,速度提高很大啊,对电脑
5、配置不好的来说,很有帮助的。(还有我的电脑很烂,1.3GHz,384M内存,可能让大家见笑了.)调用格式:setdbprefs(datareturnformat,numric)养成良好习惯,随手关闭链接对象和游标close当不再使用数据库的链接对象时要及时关闭,这样才能及时的释放出内存,而且每次链接后所需要的内存量是非常大的,要是不及时关闭的话对后续计算的影响将非常非常的大。(针对烂机子而言,要是你的电脑超强也无所谓的.)调用格式:close(curs)close(conna)查看数据相关信息Rows-查看数据行数调用格式:numrows=rows(curs)Cols查看数据列数调用格式:nu
6、mcols=cols(curs)Attr查看数据属性调用格式:attribute=attr(curs)第二部分:把数据写入到数据库中添加数据到表中insert函数调用格式:insert(conna,tab,colnames,exdata)conna链接对象tab数据库文件的表名colnames数据库表的列名exdatamatlab变量如:insert(conna,try,a1,a2,4565)commit(conna)%确认数据更改更新数据库中的数据update调用格式:update(conna,tab,colnames,exdata,whereclause)conna链接对象tab数据库文件
7、的表名colnames数据库表的列名exdatamatlab变量whereclauseSQL的where字句如:update(conna,try,a1,a2,4565,whereXX=XX)commit(conna)%确认数据更改建立新表exec,creattable调用格式:conna=database(SampleDB,);exec(conna,createtableTable(namestring,ageint);close(conna);Table表名name,age字段名以上部分是从董振海写的精通MATLAB7编程与数据库应用中根据我使用databasetoolbox的经验摘抄的,在
8、此向作者致谢。第三部分:自己写的相关函数下面是我在matlab的数据库分析项目的过程中自己写的和用到的关于数据库操作的相关函数的介绍:把数据写入到txt文件中.调用格式:data=rand(100,100);dlmwrite(data.txt,data,delimiter,newline,pc);由于matlab的数据类型默认为双精度的,写入到txt中也是双精度的,此时可以用下面操作来减少有效位数从而减小文件大小。data=fix(10000*data)/10000;这样保存的txt文件要更小一些.把字符串分隔为cell数据StrSpliteToCell调用格式:StrSpliteToCell
9、(Str1,Str2)Str1为字符串源,str2为分隔号如:DataPath=D:ProgramFilesMATLAB71workdata.txtStr=StrSpliteToCell(DataPath,Str)ans=D:ProgramFilesMATLAB71workdata.txtcell数据用字符分隔CellStrJoinWithSeparatora=D:ProgramFilesMATLAB71workdata.txtStr=CellStrJoinWithSeparator(a,)Str=Message:ErrNum:0ans:D:ProgramFilesMATLAB71workda
10、ta.txt把txt文件中的数据写到数据库中由于matlab直接向数据库中保存数据时非常非常的费时,曾经用matlab直接向数据库中写数据时,100万个数据运行了20多分钟还没完,等的太久了就结束了.所以想到了先把数据保存为txt,再从txt写到数据库文件中,这样这样做的时间花费相对直接写来说几乎可以忽略了把上面的data.txt中的数据写到数据库文件中conna=database(SampleDB,);DataPath=D:ProgramFilesMATLAB71workdata.txtf=CreateSchema(DataPath)Txt2Access(conna,DataPath)clo
11、se(conna)CreateSchema.m是一个写配置文件的函数Txt2Access.m是把数据写到数据库中第四部分:其他参考资料HYPERLINK/a/a.asp?B=260&ID=1243284/a/a.asp?B=260&ID=1243284DatabaseToolbox2和关系数据库进行数据交换Database工具箱可以使你使用MATLAB的数据分析和可视化工具对存储在数据库中的数据进行分析。在MATLAB工作环境中,您可以使用结构化查询语言进行:对数据库中的数据进行读写使用约束条件对数据库进行操作您可以在MATLAB中和绝大多数的数据库进行交互,包括Oracle、Sybase、M
12、icrosoftSQLServer、MySQL、PostgreSQL以及MicrosoftAccess。该工具箱还允许您在单个的MATLAB任务中同时存取多个数据库并且支持事务特性。它包含了VisualQueryBuilder(可视化查询工具),它可以使您在不熟悉SQL的情况下和数据库进行交互。VisualQueryBuilder可以快速对您的数据进行存取和图表显示关键特性支持ODBC/JDBC连接的数据库接口包括Oracle、Sybase、MicrosoftSQLServer、MySQL、PostgreSQL以及MicrosoftAccess从MATLAB中直接执行查询语句对于大数据量查询,
13、将增量获取数据在所有的数据导入和导出的过程中,保留数据类型单个的MATLAB任务中可以同时存取多个数据库从一个数据库中导入数据,完成计算后,将结果输出到另外一个数据库在单个事务中获取大数据集,或者分割数据,通过多个事务来完成通过在一个MATLAB会话中保持数据库连接来减少需要进行输入和输出数据所需要的语句,除非数据库连接被显式关闭它可以使您在不熟悉SQL的情况下和数据库进行交互在MATLAB中对MicrosoftAccess数据库进行查询数据库工具箱函数列表数据库访问函数clearwarnings清除数据库连接警告close关闭数据库连接commit数据库改变参数database连接数据库ex
14、ec执行SQL语句和打开油标get得到数据库属性insert导出MATLAB单元数组数据到数据库表isconnection判断数据库连接是否有效isreadonly判断数据库连接是否只读ping得到数据库连接信息rollback撤销数据库变化set设置数据库连接属性sql2native转换JDBCSQL语法为系统本身的SQL语法update用MATLAB单元数组数据代替数据库表的数据数据库游标访问函数attr获得的数据集的列属性close关闭游标cols获得的数据集的列数值columnnames获得的数据集的列名称fetch导入数据到MATLAB单元数组get得到游标对象属性querytime
15、out数据库SQL查询成功的时间rows获取数据集的行数set设置游标获取的行限制width获取数据集的列宽数据库元数据函数bestrowid得到数据库表唯一行标识columnprivileges得到数据库列优先权columns得到数据库表列名称crossreference得到主健和外健信息dmd创建数据库元数据对象exportedkeys得到导出外部健信息get得到数据库元数据属性importedkeys得到导入外健信息indexinfo得到数据库表的索引和统计primarykeys从数据库表或结构得到主健信息procedurecolumns得到目录存储程序参数和结果列procedures得
16、到目录存储程序supports判断是否支持数据库元数据tableprivileges得到数据库表优先权tables得到数据库表名称versioncolumns得到自动更新表列数据库工具箱让用户使用MATLAB强大数据分析和可视化工具功能处理存储在数据库中的数据的复杂分析。在MATLAB环境下工作,可以用结构化查询语言SQL)命令:读,写数据库的数据简单和高级条件的数据查询连接MATLAB和数据库包括Oracle,Sybase,MicrosoftSQLServer和Informix。可以用单一MATLAB同时访问多个数据库,进行大数据量的事务处理。不懂SQL的用户可以用VisualQueryBu
17、ilder处理数据。重点鲁棒接口能力。用ODBC/JDBC连接数据库,包括Oracle,SybaseSQLServer,SybaseSQLAnywhere,MicrosoftSQLServer,MicrosoftAccess,InformixIngres.SQL语法。在MATLAB环境直接执行SQL查询动态导入数据。调节SQL查询,把数据导入MATLAB。数据库工具箱满足小的和大的查询。数据类型保存。在数据导入和导出行为MATLAB保存数据类型同时访问多个数据库。从数据库导入数据,对该数据执行计算,然后导入到另一个数据库。处理大数据集的能力。连续状态的数据库连接:一旦和某个数据库的连接建立后,
18、数据库一直是打开的,除非在MATLAB中执行关闭语句。这提高了数据库的读取速度,减少了不必要的命令来调入,输出数据VisualQueryBuilder.该图形用户接口列数据源和所有表和字段,不懂SQL的用户可以访问和查询数据库函数列表数据库访问函数clearwarnings清除数据库连接警告close关闭数据库连接commit数据库改变参数database连接数据库exec执行SQL语句和打开油标get得到数据库属性insert导出MATLAB单元数组数据到数据库表isconnection判断数据库连接是否有效isreadonly判断数据库连接是否只读ping得到数据库连接信息rollback
19、撤销数据库变化set设置数据库连接属性sql2native转换JDBCSQL语法为系统本身的SQL语法update用MATLAB单元数组数据代替数据库表的数据数据库游标访问函数attr获得的数据集的列属性close关闭游标cols获得的数据集的列数值columnnames获得的数据集的列名称fetch导入数据到MATLAB单元数组get得到游标对象属性querytimeout数据库SQL查询成功的时间rows获取数据集的行数set设置游标获取的行限制width获取数据集的列宽数据库元数据函数bestrowid得到数据库表唯一行标识columnprivileges得到数据库列优先权columns
20、得到数据库表列名称crossreference得到主健和外健信息dmd创建数据库元数据对象exportedkeys得到导出外部健信息get得到数据库元数据属性importedkeys得到导入外健信息indexinfo得到数据库表的索引和统计primarykeys从数据库表或结构得到主健信息procedurecolumns得到目录存储程序参数和结果列procedures得到目录存储程序supports判断是否支持数据库元数据tableprivileges得到数据库表优先权tables得到数据库表名称versioncolumns得到自动更新表列MATLABER曰:这是个很经典的介绍,因为它涉及到M
21、ATLAB在金融学中的应用,甚至利用它可以作出很好的财务软件.zhimingchen曰:VisualQueryBuilder不支持汉字,所以我觉得使用VisualQueryBuilder不是最好的方法;使用DAO,特别ADO是一种很好方法,可以做到与数据库无关;请看我的一个访问数据库的实例:functionTable=GetTable(ConnectionStr,SqlStr)%ConnectionStr为连接串,比如可以设置ConnectionStr=DataSource=HistryData2.0;Provider=MSDASQL;UserID=Admin;Password=;%SqlSt
22、r为SQL语句,%利用ADO调用数据源tryMyConnection=actxserver(ADODB.Connection);MyConnection.ConnectionString=ConnectionStr;invoke(MyConnection,Open);MyRecordset=invoke(MyConnection,Execute,SqlStr);%域信息Fields=MyRecordset.Fields;%域个数FieldNumber=Fields.Count;FieldNames=cell(1,FieldNumber);%获取数据%invoke(MyRecordset,Mov
23、eFirst);Data=invoke(MyRecordset,GetRows);MyRecordset.Source;%记录行数RecordCount=size(Data,2);fori=1:size(FieldNames,2)TempField=get(Fields,Item,i-1);FieldNamesi=TempField.Name;end%给Table赋植Table.RecordCount=RecordCount;Table.FieldNames=FieldNames;Table.Data=Data;invoke(MyRecordset,Close);invoke(MyConnec
24、tion,Close);catchmsgbox(lasterr,Tint);Table.Data=;end一、通过MATLAB提供的数据库引擎,以下是MATLAB,DATABASETOOLBOX中的例子,通过ODBC/JDBC接口访问具体的数据库functiondbimportdemo()%DBIMPORTDEMOImportsdataintoMatlabfromadatabase.%Version1.021-Oct-1997%Author(s):E.F.McGoldrick,12/5/1997%Copyright(c)1984-2001TheMathWorks,Inc.%$Revision:1.7$Date:2001/01/1216:22:06$%Setmaximumtimeallowedforestablishingaconnection.timeoutA=logintimeout(5)%Connecttoadatabase.%打开数据源SampleDBconnA=database(SampleDB,)%Checkthedatabasestatus.ping(connA)%Opencursorandexecu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 聊城市一级建造师考试(通信与广电工程管理与实务)真题及答案
- 2026年上半年教师资格证考试《教育教学知识与能力》(小学)真题附答案
- 靶向药物临床应用中国指南(2026 版)
- 居家拔罐保健适用人群与禁忌指南 (2026 版)
- 环保工程工作报告
- Flupenthixol-decanoate-生命科学试剂-MCE
- 护理查房中的患者满意度
- 2026net的面试题及答案
- 2026linux c 面试题及答案
- 恶性肿瘤患者的健康教育
- 银行保安服务投标方案(完整技术标)
- 拒绝文身主题班会课件
- 项目部人员绩效考核表实用文档
- 汽车行走的艺术学习通课后章节答案期末考试题库2023年
- 食品检验工(高级)5
- JJF 1941-2021 光学仪器检具校准规范 高清晰版
- 张爱玲《金锁记》教学课件
- GA/T 1028.2-2022机动车驾驶人考试系统通用技术条件第2部分:驾驶理论考试系统
- GB/Z 26209-2010光辐射探测器光谱响应的确定方法
- 室分交维评估报告-tjd
- 中考语文非连续性文本阅读10篇专项练习及答案
评论
0/150
提交评论