Matlab數(shù)據(jù)庫編程指南-Godman教學(xué)內(nèi)容_第1頁
Matlab數(shù)據(jù)庫編程指南-Godman教學(xué)內(nèi)容_第2頁
Matlab數(shù)據(jù)庫編程指南-Godman教學(xué)內(nèi)容_第3頁
Matlab數(shù)據(jù)庫編程指南-Godman教學(xué)內(nèi)容_第4頁
Matlab數(shù)據(jù)庫編程指南-Godman教學(xué)內(nèi)容_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Good is good, but better carries it.精益求精,善益求善。Matlab數(shù)據(jù)庫編程指南-Godman-Matlab數(shù)據(jù)庫編程指南-GodmanMatlab與數(shù)據(jù)庫鏈接有三種方法,本文只講述其中以O(shè)DBC的方式進(jìn)行鏈接。本文件包含四部分,其中第三部分為我自己寫的一些數(shù)據(jù)庫函數(shù)操作的函數(shù),第四部分為網(wǎng)上的一些資料。如有疑問可以郵件聯(lián)系HYPERLINKmailto:Godman2009.3.30晚GoodLuck!第一部分:讀取數(shù)據(jù)其相關(guān)信息查看配置數(shù)據(jù)源(1).“控制面板”-“管理工具”“數(shù)據(jù)源(ODBC)”“添加”“創(chuàng)建數(shù)據(jù)源名稱和選擇數(shù)據(jù)庫文件”。具體操作見“

2、配置數(shù)據(jù)源.gif”(2).采用修改注冊(cè)表,自動(dòng)配置數(shù)據(jù)源。DB_path=D:ProgramFilesMATLAB71workStuSystem.mdb;DB_sourcename=Godman;LinkDB(DB_path,DB_sourcename,1);(LinkDB為自編函數(shù))建立鏈接對(duì)象database調(diào)用格式:conna=database(datasourcename,username,password);如conna=database(SampleDB,);其中SampleDB為上文中創(chuàng)建的數(shù)據(jù)源名稱,當(dāng)默認(rèn)情況下,數(shù)據(jù)庫文件的username和password為空。建立并打開

3、游標(biāo)exec調(diào)用格式:curs=exec(conna,sqlquery);如curs=exec(conna,select*fromdatabase)其中conna為上文中鏈接對(duì)象,select*fromdatabase表示從表database中選擇所有的數(shù)據(jù).把數(shù)據(jù)庫中的數(shù)據(jù)讀取到Matlab中fetch調(diào)用格式:curs=fetch(curs,RowLimit);Data=curs.Data;%把讀取到的數(shù)據(jù)用變量Data保存.如curs=fetch(curs);把所有的數(shù)據(jù)一次全部讀取到Matlab中,RowLimit為每次讀取的數(shù)據(jù)參數(shù)的行數(shù),默認(rèn)為全部讀取,但是全部讀取會(huì)很費(fèi)時(shí)間(和計(jì)

4、算機(jī)性能很大關(guān)系)。上述四點(diǎn)是matlab從數(shù)據(jù)庫文件中讀取數(shù)據(jù)到matlab中的基本步驟。數(shù)據(jù)返回類型從數(shù)據(jù)庫中讀取數(shù)據(jù)到matlab有三種數(shù)據(jù)類型(默認(rèn)為元胞類型cellarray),分別為元胞類型(cellarray),數(shù)字型(numeric),結(jié)構(gòu)型(structure)。可以在鏈接數(shù)據(jù)庫之前通過setdbprefs函數(shù)來進(jìn)行設(shè)置。如果數(shù)據(jù)庫文件中全部是數(shù)值型數(shù)據(jù)時(shí)最好采用numeric型的數(shù)據(jù),這樣可以使得讀取速度大幅提高,特別是在大型數(shù)據(jù)讀取時(shí)非常明顯。我曾經(jīng)從數(shù)據(jù)庫中讀取過100萬個(gè)數(shù)據(jù),用cellarray時(shí)用了16s,但是用numeric時(shí)卻只用了8s,速度提高很大啊,對(duì)電腦

5、配置不好的來說,很有幫助的。(還有我的電腦很爛,1.3GHz,384M內(nèi)存,可能讓大家見笑了.)調(diào)用格式:setdbprefs(datareturnformat,numric)養(yǎng)成良好習(xí)慣,隨手關(guān)閉鏈接對(duì)象和游標(biāo)close當(dāng)不再使用數(shù)據(jù)庫的鏈接對(duì)象時(shí)要及時(shí)關(guān)閉,這樣才能及時(shí)的釋放出內(nèi)存,而且每次鏈接后所需要的內(nèi)存量是非常大的,要是不及時(shí)關(guān)閉的話對(duì)后續(xù)計(jì)算的影響將非常非常的大。(針對(duì)爛機(jī)子而言,要是你的電腦超強(qiáng)也無所謂的.)調(diào)用格式:close(curs)close(conna)查看數(shù)據(jù)相關(guān)信息Rows-查看數(shù)據(jù)行數(shù)調(diào)用格式:numrows=rows(curs)Cols查看數(shù)據(jù)列數(shù)調(diào)用格式:nu

6、mcols=cols(curs)Attr查看數(shù)據(jù)屬性調(diào)用格式:attribute=attr(curs)第二部分:把數(shù)據(jù)寫入到數(shù)據(jù)庫中添加數(shù)據(jù)到表中insert函數(shù)調(diào)用格式:insert(conna,tab,colnames,exdata)conna鏈接對(duì)象tab數(shù)據(jù)庫文件的表名colnames數(shù)據(jù)庫表的列名exdatamatlab變量如:insert(conna,try,a1,a2,4565)commit(conna)%確認(rèn)數(shù)據(jù)更改更新數(shù)據(jù)庫中的數(shù)據(jù)update調(diào)用格式:update(conna,tab,colnames,exdata,whereclause)conna鏈接對(duì)象tab數(shù)據(jù)庫文件

7、的表名colnames數(shù)據(jù)庫表的列名exdatamatlab變量whereclauseSQL的where字句如:update(conna,try,a1,a2,4565,whereXX=XX)commit(conna)%確認(rèn)數(shù)據(jù)更改建立新表exec,creattable調(diào)用格式:conna=database(SampleDB,);exec(conna,createtableTable(namestring,ageint);close(conna);Table表名name,age字段名以上部分是從董振海寫的精通MATLAB7編程與數(shù)據(jù)庫應(yīng)用中根據(jù)我使用databasetoolbox的經(jīng)驗(yàn)摘抄的,在

8、此向作者致謝。第三部分:自己寫的相關(guān)函數(shù)下面是我在matlab的數(shù)據(jù)庫分析項(xiàng)目的過程中自己寫的和用到的關(guān)于數(shù)據(jù)庫操作的相關(guān)函數(shù)的介紹:把數(shù)據(jù)寫入到txt文件中.調(diào)用格式:data=rand(100,100);dlmwrite(data.txt,data,delimiter,newline,pc);由于matlab的數(shù)據(jù)類型默認(rèn)為雙精度的,寫入到txt中也是雙精度的,此時(shí)可以用下面操作來減少有效位數(shù)從而減小文件大小。data=fix(10000*data)/10000;這樣保存的txt文件要更小一些.把字符串分隔為cell數(shù)據(jù)StrSpliteToCell調(diào)用格式:StrSpliteToCell

9、(Str1,Str2)Str1為字符串源,str2為分隔號(hào)如:DataPath=D:ProgramFilesMATLAB71workdata.txtStr=StrSpliteToCell(DataPath,Str)ans=D:ProgramFilesMATLAB71workdata.txtcell數(shù)據(jù)用字符分隔CellStrJoinWithSeparatora=D:ProgramFilesMATLAB71workdata.txtStr=CellStrJoinWithSeparator(a,)Str=Message:ErrNum:0ans:D:ProgramFilesMATLAB71workda

10、ta.txt把txt文件中的數(shù)據(jù)寫到數(shù)據(jù)庫中由于matlab直接向數(shù)據(jù)庫中保存數(shù)據(jù)時(shí)非常非常的費(fèi)時(shí),曾經(jīng)用matlab直接向數(shù)據(jù)庫中寫數(shù)據(jù)時(shí),100萬個(gè)數(shù)據(jù)運(yùn)行了20多分鐘還沒完,等的太久了就結(jié)束了.所以想到了先把數(shù)據(jù)保存為txt,再從txt寫到數(shù)據(jù)庫文件中,這樣這樣做的時(shí)間花費(fèi)相對(duì)直接寫來說幾乎可以忽略了把上面的data.txt中的數(shù)據(jù)寫到數(shù)據(jù)庫文件中conna=database(SampleDB,);DataPath=D:ProgramFilesMATLAB71workdata.txtf=CreateSchema(DataPath)Txt2Access(conna,DataPath)clo

11、se(conna)CreateSchema.m是一個(gè)寫配置文件的函數(shù)Txt2Access.m是把數(shù)據(jù)寫到數(shù)據(jù)庫中第四部分:其他參考資料HYPERLINK/a/a.asp?B=260&ID=1243284/a/a.asp?B=260&ID=1243284DatabaseToolbox2和關(guān)系數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交換Database工具箱可以使你使用MATLAB的數(shù)據(jù)分析和可視化工具對(duì)存儲(chǔ)在數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行分析。在MATLAB工作環(huán)境中,您可以使用結(jié)構(gòu)化查詢語言進(jìn)行:對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行讀寫使用約束條件對(duì)數(shù)據(jù)庫進(jìn)行操作您可以在MATLAB中和絕大多數(shù)的數(shù)據(jù)庫進(jìn)行交互,包括Oracle、Sybase、M

12、icrosoftSQLServer、MySQL、PostgreSQL以及MicrosoftAccess。該工具箱還允許您在單個(gè)的MATLAB任務(wù)中同時(shí)存取多個(gè)數(shù)據(jù)庫并且支持事務(wù)特性。它包含了VisualQueryBuilder(可視化查詢工具),它可以使您在不熟悉SQL的情況下和數(shù)據(jù)庫進(jìn)行交互。VisualQueryBuilder可以快速對(duì)您的數(shù)據(jù)進(jìn)行存取和圖表顯示關(guān)鍵特性支持ODBC/JDBC連接的數(shù)據(jù)庫接口包括Oracle、Sybase、MicrosoftSQLServer、MySQL、PostgreSQL以及MicrosoftAccess從MATLAB中直接執(zhí)行查詢語句對(duì)于大數(shù)據(jù)量查詢,

13、將增量獲取數(shù)據(jù)在所有的數(shù)據(jù)導(dǎo)入和導(dǎo)出的過程中,保留數(shù)據(jù)類型單個(gè)的MATLAB任務(wù)中可以同時(shí)存取多個(gè)數(shù)據(jù)庫從一個(gè)數(shù)據(jù)庫中導(dǎo)入數(shù)據(jù),完成計(jì)算后,將結(jié)果輸出到另外一個(gè)數(shù)據(jù)庫在單個(gè)事務(wù)中獲取大數(shù)據(jù)集,或者分割數(shù)據(jù),通過多個(gè)事務(wù)來完成通過在一個(gè)MATLAB會(huì)話中保持?jǐn)?shù)據(jù)庫連接來減少需要進(jìn)行輸入和輸出數(shù)據(jù)所需要的語句,除非數(shù)據(jù)庫連接被顯式關(guān)閉它可以使您在不熟悉SQL的情況下和數(shù)據(jù)庫進(jìn)行交互在MATLAB中對(duì)MicrosoftAccess數(shù)據(jù)庫進(jìn)行查詢數(shù)據(jù)庫工具箱函數(shù)列表數(shù)據(jù)庫訪問函數(shù)clearwarnings清除數(shù)據(jù)庫連接警告close關(guān)閉數(shù)據(jù)庫連接commit數(shù)據(jù)庫改變參數(shù)database連接數(shù)據(jù)庫ex

14、ec執(zhí)行SQL語句和打開油標(biāo)get得到數(shù)據(jù)庫屬性insert導(dǎo)出MATLAB單元數(shù)組數(shù)據(jù)到數(shù)據(jù)庫表isconnection判斷數(shù)據(jù)庫連接是否有效isreadonly判斷數(shù)據(jù)庫連接是否只讀ping得到數(shù)據(jù)庫連接信息rollback撤銷數(shù)據(jù)庫變化set設(shè)置數(shù)據(jù)庫連接屬性sql2native轉(zhuǎn)換JDBCSQL語法為系統(tǒng)本身的SQL語法update用MATLAB單元數(shù)組數(shù)據(jù)代替數(shù)據(jù)庫表的數(shù)據(jù)數(shù)據(jù)庫游標(biāo)訪問函數(shù)attr獲得的數(shù)據(jù)集的列屬性close關(guān)閉游標(biāo)cols獲得的數(shù)據(jù)集的列數(shù)值columnnames獲得的數(shù)據(jù)集的列名稱fetch導(dǎo)入數(shù)據(jù)到MATLAB單元數(shù)組get得到游標(biāo)對(duì)象屬性querytime

15、out數(shù)據(jù)庫SQL查詢成功的時(shí)間rows獲取數(shù)據(jù)集的行數(shù)set設(shè)置游標(biāo)獲取的行限制width獲取數(shù)據(jù)集的列寬數(shù)據(jù)庫元數(shù)據(jù)函數(shù)bestrowid得到數(shù)據(jù)庫表唯一行標(biāo)識(shí)columnprivileges得到數(shù)據(jù)庫列優(yōu)先權(quán)columns得到數(shù)據(jù)庫表列名稱crossreference得到主健和外健信息dmd創(chuàng)建數(shù)據(jù)庫元數(shù)據(jù)對(duì)象exportedkeys得到導(dǎo)出外部健信息get得到數(shù)據(jù)庫元數(shù)據(jù)屬性importedkeys得到導(dǎo)入外健信息indexinfo得到數(shù)據(jù)庫表的索引和統(tǒng)計(jì)primarykeys從數(shù)據(jù)庫表或結(jié)構(gòu)得到主健信息procedurecolumns得到目錄存儲(chǔ)程序參數(shù)和結(jié)果列procedures得

16、到目錄存儲(chǔ)程序supports判斷是否支持?jǐn)?shù)據(jù)庫元數(shù)據(jù)tableprivileges得到數(shù)據(jù)庫表優(yōu)先權(quán)tables得到數(shù)據(jù)庫表名稱versioncolumns得到自動(dòng)更新表列數(shù)據(jù)庫工具箱讓用戶使用MATLAB強(qiáng)大數(shù)據(jù)分析和可視化工具功能處理存儲(chǔ)在數(shù)據(jù)庫中的數(shù)據(jù)的復(fù)雜分析。在MATLAB環(huán)境下工作,可以用結(jié)構(gòu)化查詢語言SQL)命令:讀,寫數(shù)據(jù)庫的數(shù)據(jù)簡單和高級(jí)條件的數(shù)據(jù)查詢連接MATLAB和數(shù)據(jù)庫包括Oracle,Sybase,MicrosoftSQLServer和Informix??梢杂脝我籑ATLAB同時(shí)訪問多個(gè)數(shù)據(jù)庫,進(jìn)行大數(shù)據(jù)量的事務(wù)處理。不懂SQL的用戶可以用VisualQueryBu

17、ilder處理數(shù)據(jù)。重點(diǎn)魯棒接口能力。用ODBC/JDBC連接數(shù)據(jù)庫,包括Oracle,SybaseSQLServer,SybaseSQLAnywhere,MicrosoftSQLServer,MicrosoftAccess,InformixIngres.SQL語法。在MATLAB環(huán)境直接執(zhí)行SQL查詢動(dòng)態(tài)導(dǎo)入數(shù)據(jù)。調(diào)節(jié)SQL查詢,把數(shù)據(jù)導(dǎo)入MATLAB。數(shù)據(jù)庫工具箱滿足小的和大的查詢。數(shù)據(jù)類型保存。在數(shù)據(jù)導(dǎo)入和導(dǎo)出行為MATLAB保存數(shù)據(jù)類型同時(shí)訪問多個(gè)數(shù)據(jù)庫。從數(shù)據(jù)庫導(dǎo)入數(shù)據(jù),對(duì)該數(shù)據(jù)執(zhí)行計(jì)算,然后導(dǎo)入到另一個(gè)數(shù)據(jù)庫。處理大數(shù)據(jù)集的能力。連續(xù)狀態(tài)的數(shù)據(jù)庫連接:一旦和某個(gè)數(shù)據(jù)庫的連接建立后,

18、數(shù)據(jù)庫一直是打開的,除非在MATLAB中執(zhí)行關(guān)閉語句。這提高了數(shù)據(jù)庫的讀取速度,減少了不必要的命令來調(diào)入,輸出數(shù)據(jù)VisualQueryBuilder.該圖形用戶接口列數(shù)據(jù)源和所有表和字段,不懂SQL的用戶可以訪問和查詢數(shù)據(jù)庫函數(shù)列表數(shù)據(jù)庫訪問函數(shù)clearwarnings清除數(shù)據(jù)庫連接警告close關(guān)閉數(shù)據(jù)庫連接commit數(shù)據(jù)庫改變參數(shù)database連接數(shù)據(jù)庫exec執(zhí)行SQL語句和打開油標(biāo)get得到數(shù)據(jù)庫屬性insert導(dǎo)出MATLAB單元數(shù)組數(shù)據(jù)到數(shù)據(jù)庫表isconnection判斷數(shù)據(jù)庫連接是否有效isreadonly判斷數(shù)據(jù)庫連接是否只讀ping得到數(shù)據(jù)庫連接信息rollback

19、撤銷數(shù)據(jù)庫變化set設(shè)置數(shù)據(jù)庫連接屬性sql2native轉(zhuǎn)換JDBCSQL語法為系統(tǒng)本身的SQL語法update用MATLAB單元數(shù)組數(shù)據(jù)代替數(shù)據(jù)庫表的數(shù)據(jù)數(shù)據(jù)庫游標(biāo)訪問函數(shù)attr獲得的數(shù)據(jù)集的列屬性close關(guān)閉游標(biāo)cols獲得的數(shù)據(jù)集的列數(shù)值columnnames獲得的數(shù)據(jù)集的列名稱fetch導(dǎo)入數(shù)據(jù)到MATLAB單元數(shù)組get得到游標(biāo)對(duì)象屬性querytimeout數(shù)據(jù)庫SQL查詢成功的時(shí)間rows獲取數(shù)據(jù)集的行數(shù)set設(shè)置游標(biāo)獲取的行限制width獲取數(shù)據(jù)集的列寬數(shù)據(jù)庫元數(shù)據(jù)函數(shù)bestrowid得到數(shù)據(jù)庫表唯一行標(biāo)識(shí)columnprivileges得到數(shù)據(jù)庫列優(yōu)先權(quán)columns

20、得到數(shù)據(jù)庫表列名稱crossreference得到主健和外健信息dmd創(chuàng)建數(shù)據(jù)庫元數(shù)據(jù)對(duì)象exportedkeys得到導(dǎo)出外部健信息get得到數(shù)據(jù)庫元數(shù)據(jù)屬性importedkeys得到導(dǎo)入外健信息indexinfo得到數(shù)據(jù)庫表的索引和統(tǒng)計(jì)primarykeys從數(shù)據(jù)庫表或結(jié)構(gòu)得到主健信息procedurecolumns得到目錄存儲(chǔ)程序參數(shù)和結(jié)果列procedures得到目錄存儲(chǔ)程序supports判斷是否支持?jǐn)?shù)據(jù)庫元數(shù)據(jù)tableprivileges得到數(shù)據(jù)庫表優(yōu)先權(quán)tables得到數(shù)據(jù)庫表名稱versioncolumns得到自動(dòng)更新表列MATLABER曰:這是個(gè)很經(jīng)典的介紹,因?yàn)樗婕暗組

21、ATLAB在金融學(xué)中的應(yīng)用,甚至利用它可以作出很好的財(cái)務(wù)軟件.zhimingchen曰:VisualQueryBuilder不支持漢字,所以我覺得使用VisualQueryBuilder不是最好的方法;使用DAO,特別ADO是一種很好方法,可以做到與數(shù)據(jù)庫無關(guān);請(qǐng)看我的一個(gè)訪問數(shù)據(jù)庫的實(shí)例:functionTable=GetTable(ConnectionStr,SqlStr)%ConnectionStr為連接串,比如可以設(shè)置ConnectionStr=DataSource=HistryData2.0;Provider=MSDASQL;UserID=Admin;Password=;%SqlSt

22、r為SQL語句,%利用ADO調(diào)用數(shù)據(jù)源tryMyConnection=actxserver(ADODB.Connection);MyConnection.ConnectionString=ConnectionStr;invoke(MyConnection,Open);MyRecordset=invoke(MyConnection,Execute,SqlStr);%域信息Fields=MyRecordset.Fields;%域個(gè)數(shù)FieldNumber=Fields.Count;FieldNames=cell(1,FieldNumber);%獲取數(shù)據(jù)%invoke(MyRecordset,Mov

23、eFirst);Data=invoke(MyRecordset,GetRows);MyRecordset.Source;%記錄行數(shù)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提供的數(shù)據(jù)庫引擎,以下是MATLAB,DATABASETOOLBOX中的例子,通過ODBC/JDBC接口訪問具體的數(shù)據(jù)庫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.%打開數(shù)據(jù)源SampleDBconnA=database(SampleDB,)%Checkthedatabasestatus.ping(connA)%Opencursorandexecu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論