《2022年Matlab数据库编程指南-Godman .pdf》由会员分享,可在线阅读,更多相关《2022年Matlab数据库编程指南-Godman .pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Matlab 数据库编程指南-Godman Matlab 与数据库链接有三种方法,本文只讲述其中以ODBC 的方式进行链接。本文件包含四部分,其中第三部分为我自己写的一些数据库函数操作的函数,第四部分为网上的一些资料。如有疑问可以邮件联系Godman 2009.3.30 晚 Good Luck !第一部分:读取数据其相关信息查看1.配置数据源(1).“控制面板”-“管理工具”“数据源(ODBC ) ”“添加”“创建数据源名称和选择数据库文件”。具体操作见“配置数据源.gif”(2).采用修改注册表,自动配置数据源。 DB_path=D:Program FilesMATLAB71workStuS
2、ystem.mdb; DB_sourcename=Godman;LinkDB(DB_path,DB_sourcename,1); (LinkDB为自编函数 )2.建立链接对象database调用格式:conna=database( datasourcename , username , password);如 conna=database(SampleDB, , ); 其中 SampleDB 为上文中创建的数据源名称,当默认情况下,数据库文件的username和 password为空。3.建立并打开游标exec调用格式:curs=exec(conna,sqlquery) ;如curs=exec
3、(conna,select * from database) 其中 conna 为上文中链接对象,select * from database表示从表 database中选择所有的数据 .4.把数据库中的数据读取到Matlab 中fetch调用格式:curs=fetch(curs,RowLimit); Data=curs.Data;% 把读取到的数据用变量Data 保存 .如curs=fetch(curs);把所有的数据一次全部读取到Matlab中, RowLimit为每次读取的数据参数的行数,默认为全部读取,但是全部读取会很费时间(和计算机性能很大关系)。上述四点是matlab从数据库文件中
4、读取数据到matlab中的基本步骤。5.数据返回类型从数据库中读取数据到matlab 有三种数据类型(默认为元胞类型cellarray) ,分别为元胞类型 (cellarray) , 数字型(numeric) , 结构型(structure) 。可以在链接数据库之前通过setdbprefs函数来进行设置。如果数据库文件中全部是数值型数据时最好采用numeric 型的数据, 这样可以使得读取速度大幅提高,特别是在大型数据读取时非常明显。我曾经从数据库中读取过100 万个数据,用cellarray 时用了 16s,但是用numeric 时却只用了8s,速度提高很大啊,对电脑配置不好的来说,很有帮助
5、的。(还有我的电脑很烂,1.3GHz,384M 内存,可能让大家见笑了 .)调用格式:setdbprefs( datareturnformat , numric ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - - - - - - - - - 6.养成良好习惯,随手关闭链接对象和游标close当不再使用数据库的链接对象时要及时关闭,这样才能及时的释放出内存,而且每次链接后所需要的内存量是非常大的,要是不及时关闭的话对后续计算的影响将非常非常的大。( 针对烂
6、机子而言,要是你的电脑超强也无所谓的.) 调用格式:close(curs) close(conna) 7.查看数据相关信息Rows-查看数据行数调用格式: numrows=rows(curs) Cols查看数据列数调用格式: numcols=cols(curs) Attr 查看数据属性调用格式: attribute=attr(curs) 第二部分:把数据写入到数据库中8.添加数据到表中insert函数调用格式:insert(conna, tab ,colnames,exdata) conna 链接对象tab数据库文件的表名colnames 数据库表的列名exdatamatlab变量如:inse
7、rt(conna,try, a1, a2,45 65) commit(conna)%确认数据更改9.更新数据库中的数据update调用格式:update(conna, tab ,colnames,exdata, whereclause ) conna 链接对象tab数据库文件的表名colnames 数据库表的列名exdatamatlab变量whereclause SQL 的 where 字句如: update(conna,try, a1, a2,45 65,where XX= XX )commit(conna)%确认数据更改10. 建立新表exec,creat table 调用格式:conna
8、=database(SampleDB, , );exec(conna,create table Table(name string,age int); close(conna); Table表名name ,age 字段名名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - 以上部分是从董振海写的精通MATLAB7编程与数据库应用中根据我使用database toolbox的经验摘抄的,在此向作者致谢。第三部分:自己写的相关函数下面是
9、我在matlab 的数据库分析项目的过程中自己写的和用到的关于数据库操作的相关函数的介绍:11. 把数据写入到txt 文件中 . 调用格式:data=rand(100,100);dlmwrite(data.txt,data,delimiter, , newline, pc);由于 matlab 的数据类型默认为双精度的,写入到 txt 中也是双精度的,此时可以用下面操作来减少有效位数从而减小文件大小。data=fix(10000*data)/10000;这样保存的txt 文件要更小一些. 12. 把字符串分隔为cell 数据 StrSpliteToCell 调用格式:StrSpliteToCe
10、ll(Str1,Str2) Str1 为字符串源,str2 为分隔号如:DataPath =D:Program FilesMATLAB71workdata.txtStr=StrSpliteToCell(DataPath, Str)ans = D: Program Files MATLAB71 work data.txt 13. cell数据用字符分隔CellStrJoinWithSeparator a= D:Program FilesMATLAB71workdata.txtStr=CellStrJoinWithSeparator(a,)Str = Message: ErrNum: 0 ans:
11、 D:Program FilesMATLAB71workdata.txt 14. 把 txt 文件中的数据写到数据库中由于 matlab 直接向数据库中保存数据时非常非常的费时,曾经用matlab 直接向数据库中写数据时, 100 万个数据运行了20 多分钟还没完,等的太久了就结束了 . 所以想到了先把数据保存为txt,再从 txt 写到数据库文件中,这样这样做的时间花费相对直接写来说几乎可以忽略了把上面的data.txt 中的数据写到数据库文件中名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
12、- - 第 3 页,共 10 页 - - - - - - - - - conna=database(SampleDB, , );DataPath=D:Program FilesMATLAB71workdata.txtf=CreateSchema(DataPath)Txt2Access(conna,DataPath)close(conna)CreateSchema.m 是一个写配置文件的函数Txt2Access.m 是把数据写到数据库中第四部分:其他参考资料http:/ Toolbox 2 和关系数据库进行数据交换Database 工具箱可以使你使用MATLAB 的数据分析和可视化工具对存储在数
13、据库中的数据进行分析。在MATLAB 工作环境中,您可以使用结构化查询语言进行: 对数据库中的数据进行读写 使用约束条件对数据库进行操作您可以在 MATLAB 中和绝大多数的数据库进行交互, 包括 Oracle 、Sybase、Microsoft SQL Server、MySQL 、PostgreSQL 以及 Microsoft Access 。该工具箱还允许您在单个的MATLAB 任务中同时存取多个数据库并且支持事务特性。它包含了Visual Query Builder ( 可视化查询工具),它可以使您在不熟悉SQL 的情况下和数据库进行交互。Visual Query Builder 可以快
14、速对您的数据进行存取和图表显示关键特性 支持 ODBC/JDBC 连接的数据库接口包括 Oracle 、Sybase、Microsoft SQL Server 、MySQL 、PostgreSQL 以及Microsoft Access 从 MATLAB 中直接执行查询语句 对于大数据量查询,将增量获取数据 在所有的数据导入和导出的过程中,保留数据类型 单个的 MATLAB 任务中可以同时存取多个数据库 从一个数据库中导入数据,完成计算后,将结果输出到另外一个数据库 在单个事务中获取大数据集,或者分割数据,通过多个事务来完成 通过在一个MATLAB 会话中保持数名师资料总结 - - -精品资料欢
15、迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - 据库连接来减少需要进行输入和输出数据所需要的语句,除非数据库连接被显式关闭 它可以使您在不熟悉SQL 的情况下和数据库进行交互在 MATLAB 中对 Microsoft Access 数据库进行查询数据库工具箱函数列表数据库访问函数clearwarnings 清除数据库连接警告close 关闭数据库连接commit 数据库改变参数database 连接数据库exec 执行 SQL语句和打开油标get 得到数据库属
16、性insert 导出 MATLAB 单元数组数据到数据库表isconnection 判断数据库连接是否有效isreadonly 判断数据库连接是否只读ping 得到数据库连接信息rollback 撤销数据库变化set 设置数据库连接属性sql2native 转换 JDBC SQL 语法为系统本身的SQL语法update 用 MATLAB 单元数组数据代替数据库表的数据数据库游标访问函数attr 获得的数据集的列属性close 关闭游标cols 获得的数据集的列数值columnnames 获得的数据集的列名称fetch 导入数据到MATLAB 单元数组get 得到游标对象属性querytimeo
17、ut 数据库 SQL查询成功的时间rows 获取数据集的行数set 设置游标获取的行限制width 获取数据集的列宽数据库元数据函数bestrowid 得到数据库表唯一行标识columnprivileges 得到数据库列优先权columns 得到数据库表列名称crossreference 得到主健和外健信息名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 10 页 - - - - - - - - - dmd 创建数据库元数据对象exportedkeys 得到导出外部健信息g
18、et 得到数据库元数据属性importedkeys 得到导入外健信息indexinfo 得到数据库表的索引和统计primarykeys 从数据库表或结构得到主健信息procedurecolumns 得到目录存储程序参数和结果列procedures 得到目录存储程序supports 判断是否支持数据库元数据tableprivileges 得到数据库表优先权tables 得到数据库表名称versioncolumns 得到自动更新表列数据库工具箱让用户使用MATLAB 强大数据分析和可视化工具功能处理存储在数据库中的数据的复杂分析。在MATLAB 环境下工作,可以用结构化查询语言SQL )命令:读,
19、写数据库的数据简单和高级条件的数据查询连接 MATLAB 和数据库包括Oracle,Sybase,Microsoft SQL Server和 Informix。可以用单一MATLAB 同时访问多个数据库,进行大数据量的事务处理。不懂SQL的用户可以用 Visual Query Builder处理数据。重点鲁棒接口能力。用 ODBC/JDBC 连接数据库,包括Oracle,Sybase SQL Server,Sybase SQL Anywhere,Microsoft SQL Server, Microsoft Access, Informix Ingres. SQL语法。在 MATLAB 环境直
20、接执行SQL查询动态导入数据。调节 SQL查询,把数据导入MATLAB 。数据库工具箱满足小的和大的查询。数据类型保存。在数据导入和导出行为MATLAB 保存数据类型同时访问多个数据库。从数据库导入数据,对该数据执行计算,然后导入到另一个数据库。处理大数据集的能力。连续状态的数据库连接:一旦和某个数据库的连接建立后,数据库一直是打开的,除非在 MATLAB 中执行关闭语句。 这提高了数据库的读取速度,减少了不必要的命令来调入,输出数据 Visual Query Builder. 该图形用户接口列数据源和所有表和字段,不懂SQL 的用户可以访问和查询数据库函数列表数据库访问函数clearwarn
21、ings 清除数据库连接警告close 关闭数据库连接commit 数据库改变参数database 连接数据库exec 执行 SQL语句和打开油标get 得到数据库属性名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 10 页 - - - - - - - - - insert 导出 MATLAB 单元数组数据到数据库表isconnection 判断数据库连接是否有效isreadonly 判断数据库连接是否只读ping 得到数据库连接信息rollback 撤销数据库变化set
22、 设置数据库连接属性sql2native 转换 JDBC SQL 语法为系统本身的SQL语法update 用 MATLAB 单元数组数据代替数据库表的数据数据库游标访问函数attr 获得的数据集的列属性close 关闭游标cols 获得的数据集的列数值columnnames 获得的数据集的列名称fetch 导入数据到MATLAB 单元数组get 得到游标对象属性querytimeout 数据库 SQL查询成功的时间rows 获取数据集的行数set 设置游标获取的行限制width 获取数据集的列宽数据库元数据函数bestrowid 得到数据库表唯一行标识columnprivileges 得到数据
23、库列优先权columns 得到数据库表列名称crossreference 得到主健和外健信息dmd 创建数据库元数据对象exportedkeys 得到导出外部健信息get 得到数据库元数据属性importedkeys 得到导入外健信息indexinfo 得到数据库表的索引和统计primarykeys 从数据库表或结构得到主健信息procedurecolumns 得到目录存储程序参数和结果列procedures 得到目录存储程序supports 判断是否支持数据库元数据tableprivileges 得到数据库表优先权tables 得到数据库表名称versioncolumns 得到自动更新表列M
24、ATLABER 曰:这是个很经典的介绍, 因为它涉及到MATLAB 在金融学中的应用, 甚至利用它可以作出很好的财务软件. zhimingchen 曰: Visual Query Builder 不支持汉字 , 所以我觉得使用 Visual Query Builder 不是最好的方法 ; 使用 DAO, 特别 ADO 是一种很好方法 , 可以做到与数据库无关;请看我的一个访问数据库的实例: function Table=GetTable(ConnectionStr,SqlStr) %ConnectionStr 为连接串 , 比如可以设置ConnectionStr=Data Source=His
25、tryData2.0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 10 页 - - - - - - - - - Pr ovider=MSDASQL;User ID=Admin;Password=; %SqlStr 为 SQL语句 , % 利用 ADO 调用数据源try MyConnection=actxserver(ADODB.Connection); MyConnection.ConnectionString=ConnectionStr; invoke(MyCon
26、nection,Open); MyRecordset=invoke(MyConnection,Execute,SqlStr); % 域信息Fields=MyRecordset.Fields; % 域个数FieldNumber=Fields.Count; FieldNames=cell(1,FieldNumber); % 获取数据% invoke(MyRecordset,MoveFirst); Data=invoke(MyRecordset,GetRows); MyRecordset.Source; % 记录行数RecordCount=size(Data,2); for i=1:size(Fie
27、ldNames,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(MyConnection,Close); catch msgbox(lasterr,Tint); Table.Data=; end 一、通过 MATLAB 提供的数据库引擎,以下是 MATLAB ,DAT
28、ABASE TOOLBOX中的例子,通过 ODBC/JDBC 接口访问具体的数据库function dbimportdemo() %DBIMPORTDEMO Imports data into Matlab from a database. % Version 1.0 21-Oct-1997 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 10 页 - - - - - - - - - % Author(s): E.F. McGoldrick, 12/5/1997 % Co
29、pyright (c) 1984-2001 The MathWorks, Inc. % $Revision: 1.7 $ $Date: 2001/01/12 16:22:06 $ % Set maximum time allowed for establishing a connection. timeoutA=logintimeout(5) % Connect to a database. % 打开数据源 SampleDB connA=database(SampleDB,) % Check the database status. ping(connA) % Open cursor and
30、execute SQL statement. % 执行 SQL查询语句cursorA=exec(connA,select country from customers); % Fetch the first 10 rows of data. % 获取前十行数据cursorA=fetch(cursorA,10) % Display the data. % 显示AA=cursorA.Data % Close the cursor and the connection. % 关闭close(cursorA) close(connA) 二、通过 DAO访问数据库( DAO 技术适合于访问ACCESS
31、2000 以下版本的数据库,优点是功能齐全,具体可以参考MSDN 关于 DAO 的帮助),以下是我自己摸索出来的,在MATLAB 帮助文件中有关于如何调用EXCEL 组件的方法。Handle=actxserver(DAO.DBEngine.36); MyWSS=get(Handle,Workspaces) Count=get(MyWSS,Count) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 10 页 - - - - - - - - - MyWS=get(MyWSS
32、,Item,0) % 打开数据库MyDB=invoke(MyWS,OpenDatabase,D:My Documentstest.mdb) % 打开数据库的表,得到一个指向记录集的指针MyRS=invoke(MyDB,OpenRecordset,用户) % 获取“用户”表的前十行数据MyRows=invoke(MyRS,GetRows,10) % 关闭invoke(MyRS,Close) invoke(MyDB,Close) invoke(MyWS,Close) 三、 ADO 技术(微软建议ACCESS 2000 及以上版本的数据库应尽量通过ADO 访问,优点是可以通过较少的对象访问数据库,ADO 与今后微软的数据库技术发展方向一致,目前支持的功能稍微少了一些)具体访问的可以参考MSDN 的帮助文件和ADO 类型库的方法原型。四、通过 dde 进行动态数据交换,可以查看help 五、通过 activex控件名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 10 页 - - - - - - - - -