新聞中心
隨著數據處理需求的不斷增加,越來越多的人開始關注如何使用軟件工具來更好地處理數據。Matlab是一款優(yōu)秀的數學軟件,它具有強大的計算能力和豐富的功能,能夠在數據處理中起到重要的作用。與此同時,數據庫是一種存儲和管理數據的系統,越來越多的數據都存儲在數據庫中。那么,如何將Matlab與數據庫結合起來,實現高效數據處理呢?

創(chuàng)新互聯公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都做網站、成都網站制作、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的眉縣網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
一、為什么需要將Matlab與數據庫結合
在處理數據過程中,我們需要從數據源中獲取數據,如數據文件、數據庫等。 對于數據量大的情況,從文件直接讀取數據會非常耗時,甚至會造成系統崩潰。而數據庫可以通過索引快速查詢、過濾和更新數據,因此在處理大數據集時,使用數據庫會提高效率。同時,Matlab可以進行數據分析、運算和可視化等操作,所以將數據庫中的數據讀取到Matlab中,并對其進行處理,將這兩者結合起來則是處理大數據集非常有效的途徑。
二、如何實現Matlab與數據庫的結合
使用Matlab可以連接各種數據庫類型,包括MySQL、Microsoft SQL Server、Oracle等。一般情況下,我們可以使用ODBC(Open Database Connectivity)來連接數據庫。該接口定義了一套通用的API,可以讓不同類型的數據庫互相通訊。Matlab也提供了可以使用ODBC連接各種數據庫的工具。
以MySQL數據庫為例,以下是實現Matlab與MySQL的連接方法:
1. 創(chuàng)建ODBC數據源
首先需要在Windows環(huán)境下創(chuàng)建MySQL數據庫的ODBC數據源。方法是:打開“控制面板”→“管理工具”→“ODBC數據源”→選擇“系統DSN”→“添加”→選擇“MySQL ODBC 5.3 ANSI Driver”或“MySQL ODBC 5.3 Unicode Driver” → 輸入數據源名稱、描述、服務器等信息后測試連接。
2. 使用ODBC連接MySQL
在Matlab中使用ODBC連接MySQL需要用到ODBC數據源,具體步驟如下:
“`matlab
db = database(‘MySQL’, ‘root’, ‘password’, ‘com.mysql.jdbc.Driver’, ‘jdbc:mysql://localhost:3306/test’,’com.mysql.jdbc.Driver’);
% ‘MySQL’表示數據庫類型, ‘root’表示用戶名,‘password’表示連接密碼,‘com.mysql.jdbc.Driver’是MySQL的JDBC驅動,‘jdbc:mysql://localhost:3306/test’表示要連接到的MySQL數據庫Server。
“`
3. 連接MySQL數據庫
“`matlab
conn = database(‘test’, ‘root’, ‘password’, ‘com.mysql.jdbc.Driver’, ‘jdbc:mysql://localhost:3306/test’,’com.mysql.jdbc.Driver’);
% ‘test’為我們的數據庫名。
“`
連接后,我們可以運行任何標準SQL查詢語句,以獲得所需的數據。在Matlab中,使用“exec”的方法執(zhí)行SQL語句。Matlab將返回包含查詢結果的數據集對象。
“`matlab
selectQuery = ‘SELECT * FROM table_name’;
results = fetch(exec(conn, selectQuery));
“`
三、Matlab如何高效處理數據庫數據
在連接數據庫后,我們可以通過將數據庫查詢獲得的數據導入到Matlab中,然后對其進行分析、處理和可視化操作。
我們可以使用“fetch”的方法將結果導入到一個MATLAB數據結構中,如下所示:
“`matlab
results = fetch(selectStmt)
“`
這將返回一個MATLAB內部數據類型的結果集,可以直接進行處理和分析。此外,對于大型數據集,我們可以選擇逐塊讀取數據,以減少內存消耗和加快程序的運行速度。例如,可以使用以下代碼將結果逐塊輸出:
“`matlab
warning off;
fetchSize = 1000;
setdbprefs(‘DataReturnFormat’,’table’);
localSelect = [selectStmt,’ LIMIT’];
count = fetch(exec(conn, [‘select count(*) from (‘ selectStmt ‘) tempTable’]));
count = count.Data{1};
localResultSet = cell(1, ceil(count/fetchSize));
tic;
for ii = 1:length(localResultSet)
results = fetch(exec(conn, [localSelect ‘ ‘ num2str((ii-1)*fetchSize) ‘, ‘ num2str(fetchSize)]));
% 將查詢結果轉為數組,執(zhí)行自定義函數
localResultSet{ii} = table2array(results);
end
disp([‘Query Runs in’,num2str(toc),’Seconds’]);
% 將每個區(qū)塊結果拼接成完整的查詢結果
totalResultSet = cat(1, localResultSet{:});
“`
Matlab提供了強大的功能和API,可以與各種類型的數據庫進行連接,從而靈活地處理數據。借助Matlab的分析和處理能力,我們可以更高效、方便地獲取和處理大量數據,從而為科學研究和工程設計提供了有價值的支持。
成都網站建設公司-創(chuàng)新互聯,建站經驗豐富以策略為先導10多年以來專注數字化網站建設,提供企業(yè)網站建設,高端網站設計,響應式網站制作,設計師量身打造品牌風格,熱線:028-86922220Matlab和Mysql數據連接問題。
有感于網上查到了大量相當有幫助的技術性文章,這里也把我前段時間實現的一個功能程序公布出來,供需者參考。
功能簡介:服務器R(remote)只負責網站的運行和訪問,每天獲得一批新的原始數據,服務器L(local)負責后臺運算,自動定時從服務器R的mysql里讀取數據,在L上經過matlab編寫的算法程序運算后再遠程將結果寫回R的數據庫以實現網站的更新。全程無人值守。(L負責后臺運算,安裝matlab;R負責網絡訪問,安裝mysql)
不同于網絡上查到的實現方法,本程序全部在m文件里編寫,不用php 或c++做接口,宗旨就是用簡單的方法實現簡單的想法。(以下假定suanfa.m子程序已經存在)
1.編寫import_data.m子程序,實現從mysql讀取數據到matlab中.
1)下載mysql的jdbc的java驅動,安裝到*:\Program Files\MATLAB71\java\jar\toolbox路徑下;
2)此“路徑\文件名”添到*:\Program Files\MATLAB71\toolbox\local下的classpath.txt文件中;
3)設置mysql下的數據庫名稱為帶有“mysql ”后綴的,比如:abcmysql;
4)服務器R的mysql下,輸入“grant all on *.* to username@”L的IP” Identified by
“password”,允許L遠程訪問;
5)復制如下代碼到import_data文件中
function MM=import_data();
timeoutA=logintimeout(5)
% Set maximum time allowed for establishing a connection.
connA = database(‘mysql’, ‘username’, ‘password’,’com.mysql.jdbc.Driver’,’jdbc:mysql:
//R的IP:3306/abc’)
ping(connA)% Check the database status.
cursorA=exec(connA,’SELECT ALL CONLUMA,CONLUMB,CONLUMC FROM tablename);
setdbprefs(‘DataReturnFormat’,’numeric’); %set numeric format
cursorA=fetch(cursorA) ; % Fetch all rows of data.
MM=cursorA.Data;% Display the data,save the data in MM
close(cursorA) ;% Close the cursor and the connection.
close(connA)
其中username,password,L\R的IP,數據庫名稱abc,tablename,sql語句都是要依實際修改的。
2.編寫export_data.m子程序,實現從matlab寫回數據到mysql中:
原理類似, (tablename2的表要事先建好u)復制以下程序:
timeoutA=logintimeout(5)
% Set maximum time allowed for establishing a connection.
connA = database(‘mysql’, ‘username’, ‘password’,’com.mysql.jdbc.Driver’,’jdbc:mysql:
//R的IP:3306/abc’)
ping(connA)% Check the database status.
%delete the records before updating
cursorA=exec(connA,’delete tablename FROM tablename’);
Colnames = ;%updating
fastinsert(connA, ‘tablename2’, Colnames,newdata);
close(cursorA) ;
close(connA);
其中username,password,R的IP,數據庫名稱abc,tablename,sql語句都是要以實際情況修改的,
newdata就是suanfa.m程序得到結果組成的矩陣,這些結果將寫到數據庫中tablename2的表中。
3.編寫主程序以調用這些子程序:
4.編譯m程序為exe程序:
(注意主程序頭部的也要加“function”呦,否則作為腳本文件不能編譯)
1)在matlab環(huán)境中配置編譯器,輸入mbuild -setup,依提示操作;
2)輸入mcc -m main.m suanfa.m import_data.m export_data.m生成與主程序同名的exe文件;
3)設置windows任務計劃,添加此exe文件便可以自動定時讀取、計算、更新網站數據庫了。
ps:matlab7.0沒有找到deploytool工具,沒法連接數據庫,要使用更高版本的matlab。
Database Toolbox 2
和關系數據庫進行數據交換
Database 工具箱可以使你使用MATLAB 的數據分析
和可視化工具對存儲在數據庫中的數據進行分析。在
MATLAB 工作環(huán)境中, 您可以使用結構化查詢語言進
行:
■ 對數據庫中的數據進行讀寫
■ 使用約束條件對數據庫進行操作
您可以在MATLAB 中和絕大多數的數據庫進行交
互, 包括Oracle、Sybase、Microsoft SQL Server、
MySQL、PostgreSQL 以及Microsoft Access 。該工具箱
還允許您在單個的MATLAB 任務中同時存取多個數據
庫并且支持事務特性。它包含了Visual Query Builder
( 可視化查詢工具), 它可以使您在不熟悉SQL 的情
況下和數據庫進行交互。
Visual Query Builder
可以快速對您的數據
進行存取和圖表顯示
關鍵特性
■ 支持ODBC/JDBC 連接的數據庫接口
包括Oracle、Sybase、Microsoft SQL
Server、MySQL、PostgreSQL 以及
Microsoft Access
■ 從MATLAB 中直接執(zhí)行查詢語句
■ 對于大數據量查詢, 將增量獲取數據
■ 在所有的數據導入和導出的過程中,
保留數據類型
■ 單個的MATLAB 任務中可以同時
存取多個數據庫
■ 從一個數據庫中導入數據,完成計
算后, 將結果輸出到另外一個數據庫
■ 在單個事務中獲取大數據集, 或者分
割數據, 通過多個事務來完成
■ 通過在一個MATLAB 會話中保持數
據庫連接來減少需要進行輸入和輸出
數據所需要的語句, 除非數據庫連接
被顯式關閉
■ 它可以使您在不熟悉SQL 的情況下
和數據庫進行交互
在MATLAB 中對Microsoft Access 數據庫進行查詢
數據庫工具箱函數列表
數據庫訪問函數
clearwarnings 清除數據庫連接警告
close 關閉數據庫連接
commit 數據庫改變參數
database 連接數據庫
exec 執(zhí)行SQL語句和打開油標
get 得到數據庫屬性
insert 導出MATLAB單元數組數據到數據庫表
isconnection 判斷數據庫連接是否有效
isreadonly 判斷數據庫連接是否只讀
ping 得到數據庫連接信息
rollback 撤銷數據庫變化
set 設置數據庫連接屬性
sql2native 轉換JDBC SQL 語法為系統本身的SQL語法
update 用MATLAB單元數組數據代替數據庫表的數據
數據庫游標訪問函數
attr 獲得的數據集的列屬性
close 關閉游標
cols 獲得的數據集的列數值
columnnames 獲得的數據集的列名稱
fetch 導入數據到MATLAB單元數組
get 得到游標對象屬性
querytimeout 數據庫SQL查詢成功的時間
rows 獲取數據集的行數
set 設置游標獲取的行限制
width 獲取數據集的列寬
數據庫元數據函數
bestrowid 得到數據庫表唯一行標識
columnprivileges 得到數據庫列優(yōu)先權
columns 得到數據庫表列名稱
crossreference 得到主健和外健信息
dmd 創(chuàng)建數據庫元數據對象
exportedkeys 得到導出外部健信息
get 得到數據庫元數據屬性
importedkeys 得到導入外健信息
indexinfo 得到數據庫表的索引和統計
primarykeys 從數據庫表或結構得到主健信息
procedurecolumns 得到目錄存儲程序參數和結果列
procedures 得到目錄存儲程序
supports 判斷是否支持數據庫元數據
tableprivileges 得到數據庫表優(yōu)先權
tables 得到數據庫表名稱
versioncolumns 得到自動更新表列
Xinsoft,:28:15
數據庫工具箱讓用戶使用MATLAB強大數據分析和可視化工具功能處理存儲在數據庫中的數據的復雜分析。在MATLAB環(huán)境下工作,可以用結構化查詢語言SQL)命令:
讀,寫數據庫的數據
簡單和高級條件的數據查詢
連接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環(huán)境直接執(zhí)行SQL查詢
動態(tài)導入數據。 調節(jié)SQL查詢,把數據導入MATLAB。數據庫工具箱滿足小的和大的查詢。
數據類型保存。 在數據導入和導出行為MATLAB保存數據類型
同時訪問多個數據庫。 從數據庫導入數據,對該數據執(zhí)行計算,然后導入到另一個數據庫。
處理大數據集的能力。
連續(xù)狀態(tài)的數據庫連接:一旦和某個數據庫的連接建立后,數據庫一直是打開的,除非在MATLAB中執(zhí)行關閉語句。這提高了數據庫的讀取速度,減少了不必要的命令來調入,輸出數據 Visual Query Builder. 該圖形用戶接口列數據源和所有表和字段,不懂SQL的用戶可以訪問和查詢數據庫函數列表
數據庫訪問函數
clearwarnings 清除數據庫連接警告
close 關閉數據庫連接
commit 數據庫改變參數
database 連接數據庫
exec 執(zhí)行SQL語句和打開油標
get 得到數據庫屬性
insert 導出MATLAB單元數組數據到數據庫表
isconnection 判斷數據庫連接是否有效
isreadonly 判斷數據庫連接是否只讀
ping 得到數據庫連接信息
rollback 撤銷數據庫變化
set 設置數據庫連接屬性
sql2native 轉換JDBC SQL 語法為系統本身的SQL語法
update 用MATLAB單元數組數據代替數據庫表的數據
數據庫游標訪問函數
attr 獲得的數據集的列屬性
close 關閉游標
cols 獲得的數據集的列數值
columnnames 獲得的數據集的列名稱
fetch 導入數據到MATLAB單元數組
get 得到游標對象屬性
querytimeout 數據庫SQL查詢成功的時間
rows 獲取數據集的行數
set 設置游標獲取的行限制
width 獲取數據集的列寬
數據庫元數據函數
bestrowid 得到數據庫表唯一行標識
columnprivileges 得到數據庫列優(yōu)先權
columns 得到數據庫表列名稱
crossreference 得到主健和外健信息
dmd 創(chuàng)建數據庫元數據對象
exportedkeys 得到導出外部健信息
get 得到數據庫元數據屬性
importedkeys 得到導入外健信息
indexinfo 得到數據庫表的索引和統計
primarykeys 從數據庫表或結構得到主健信息
procedurecolumns 得到目錄存儲程序參數和結果列
procedures 得到目錄存儲程序
supports 判斷是否支持數據庫元數據
tableprivileges 得到數據庫表優(yōu)先權
tables 得到數據庫表名稱
versioncolumns 得到自動更新表列
MATLABER曰:
這是個很經典的介紹,
因為它涉及到MATLAB在金融學中的應用,甚至利用它可以作出很好的財務軟件.
zhimingchen曰:Visual Query Builder 不支持漢字,所以我覺得使用 Visual Query Builder 不是更好的方法;使用DAO,特別ADO是一種很好方法,可以做到與數據庫無關;請看我的一個訪問數據庫的實例:
function Table=GetTable(ConnectionStr,SqlStr)
%ConnectionStr為連接串,比如可以設置ConnectionStr=’Data Source=HistryData2.0;
Pr
ovider=MSDASQL;User ID=Admin;Password=;’
%SqlStr為SQL語句,
% 利用ADO調用數據源
try
MyConnection=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,’MoveFirst’);
Data=invoke(MyRecordset,’GetRows’);
MyRecordset.Source;
%記錄行數
RecordCount=size(Data,2);
for i=1:size(FieldNames,2)
TempField=get(Fields,’Item’,i-1);
FieldNames=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
Xinsoft,:28:37
一、通過MATLAB 提供的數據庫引擎, 以下是MATLAB ,DATABASE TOOLBOX中的例子,
通過ODBC/JDBC 接口訪問具體的數據庫
function dbimportdemo()
%DBIMPORTDEMO Imports data into Matlab from a database.
% Version 1.0 21-Oct-1997
% Author(s): E.F. McGoldrick, 12/5/1997
% Copyright (c)The MathWorks, Inc.
% $Revision: 1.7 $ $Date: 2023/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 execute SQL statement.
%執(zhí)行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 2023以下版本的數據庫,優(yōu)點是功
能
齊全,具體可以參考MSDN關于DAO的幫助),以下是我自己摸索出來的,在MATLAB幫助文
件
中有關于如何調用EXCEL組件的方法。
Handle=actxserver(‘DAO.DBEngine.36’);
MyWSS=get(Handle,’Workspaces’)
Count=get(MyWSS,’Count’)
MyWS=get(MyWSS,’Item’,0)
%打開數據庫
MyDB=invoke(MyWS,’OpenDatabase’,’D:\My Documents\test.mdb’)
%打開數據庫的表,得到一個指向記錄集的指針
MyRS=invoke(MyDB,’OpenRecordset’,’用戶’)
%獲取“用戶”表的前十行數據
MyRows=invoke(MyRS,’GetRows’,’10’)
%關閉
invoke(MyRS,’Close’)
invoke(MyDB,’Close’)
invoke(MyWS,’Close’)
三、ADO技術(微軟建議ACCESS 2023及以上版本的數據庫應盡量通過ADO訪問,優(yōu)點是可
以
通過較少的對象訪問數據庫,ADO與今后微軟的數據庫技術發(fā)展方向一致,目前支持的功
能
稍微少了一些)具體訪問的可以參考MSDN的幫助文件和ADO 類型庫的方法原型。
四、通過dde進行動態(tài)數據交換,可以查看help
這是我?guī)湍阏襾淼?。不知道對不對。找了很久的?/p>
首先要安裝mysql驅動程序包
Step 1: 將mysql-connector-java-5.1.7-bin.jar文件拷貝到……\MATLAB\R2023a\java\jar\toolbox
Step 2: 到……\MATLAB\R2023a\toolbox\local目錄下,找到classpath.txt文件,打開,并添加用來加載mysql的jdbc驅動語句:
$matlabroot/java/jar/toolbox/mysql-connector-java-5.1.7-bin.jar
Step 3:重新打開MATLAB即可
驅動程序安裝成功后,接來下要是matlab連接mysql數據庫的代碼:
conn =database(‘databasename’,’username’,’password’,’driver’,’databaseurl’)
連接成功后,返回連接對象。
參數如下:
*databasename: 數據庫名稱.
*driver: JDBC driver.
*username and password: 用戶名和密碼.
*databaseurl: 類似于jdbc:subprotocol:subname. subprotocol 是數據庫類型,
subname 類似于//hostname:port/databasename.
如果matlab和數據庫建立了連接,將返回類似于如下信息:
Instance: ‘SampleDB’
UserName: ”
Driver:
URL:
Constructor:
Message:
Handle:
TimeOut: 0
AutoCommit: ‘off’
Type: ‘Database Object’
連接mysql的代碼如下:
conn = database(’tissueppi’,’root’,’root’,’com.mysql.jdbc.Driver’,’jdbc:
連接成功后,就可以用exec函數執(zhí)行sql語句
exec函數執(zhí)行sql語句并返回一個開指針
語法如下:
curs = exec(conn,’sqlquery’)
例如:curs = exec(conn, ‘select * from customers’)
執(zhí)行完查詢后,還要將查詢結果從開放cursor對象導入到對象curs中,該功能是用
cursor.fetch函數實現的。
語法如下:
curs = fetch(curs)
使用curs.Data來顯示數據,curs.Data返回一個CELL結構,可以先把CELL結構轉換成
MATRIX結構再取值:
cur =cell2mat(cur)
a=cur(1,1);
則查詢結果就加到了向量a中
注意:
在exec函數執(zhí)行查詢過程中,有的sql語句要輸入變量,這時可使用strcat函數完成該
功能。
t = strcat(s1, s2, s3, …)
for(t=1:10)
sql1 = strcat(‘select count(did) from rss_genepairs_u where gocc>=’,num2str(t),’ || gomf >= ‘,num2str(t),’ || gobp >= ‘,num2str(t));
end
完整代碼如下:
conn = database(’tissueppi’,’root’,’root’,’com.mysql.jdbc.Driver’,’jdbc:
for t=0.5:0.01:0.91
for x=0.5:0.1:11
sql = strcat(‘select count(did) from rss_genepairs_x2 where score =’,num2str(t),’ || gomf >= ‘,num2str(t),’ || gobp >= ‘,num2str(t),’)’);
aTemp = exec(conn,sql);
aTemp = fetch(aTemp);
a = aTemp.Data;
a = cell2mat(a);
a= a(1,1);
end
end
matlab 與數據庫的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于matlab 與數據庫,探究Matlab如何與數據庫結合實現高效數據處理,Matlab和Mysql數據連接問題。的信息別忘了在本站進行查找喔。
成都創(chuàng)新互聯科技公司主營:網站設計、網站建設、小程序制作、成都軟件開發(fā)、網頁設計、微信開發(fā)、成都小程序開發(fā)、網站制作、網站開發(fā)等業(yè)務,是專業(yè)的成都做小程序公司、成都網站建設公司、成都做網站的公司。創(chuàng)新互聯公司集小程序制作創(chuàng)意,網站制作策劃,畫冊、網頁、VI設計,網站、軟件、微信、小程序開發(fā)于一體。
文章標題:探究Matlab如何與數據庫結合實現高效數據處理(matlab與數據庫)
當前網址:http://m.fisionsoft.com.cn/article/dhohcps.html


咨詢
建站咨詢
