Matlab資料庫編程-轉載兩篇

來源:互聯網
上載者:User

有感於網上查到了大量相當有協助的技術性文章,這裡也把我前段時間實現的一個功能程式公布出來,供需者參考。
   功能簡介:伺服器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 = {'COLUMNA','COLUMNB','rCOLUMNC'};%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環境中配置編譯器,輸入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 工作環境中, 您可以使用結構化查詢語言 (SQL)進
行:
■ 對資料庫中的資料進行讀寫
■ 使用約束條件對資料庫進行操作
您可以在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 中直接執行查詢語句
■ 對於大資料量查詢, 將增量擷取資料
■ 在所有的資料匯入和匯出的過程中,
保留資料類型
■ 單個的MATLAB 任務中可以同時
存取多個資料庫
■ 從一個資料庫中匯入資料,完成計
算後, 將結果輸出到另外一個資料庫
■ 在單個事務中擷取大資料集, 或者分
割資料, 通過多個事務來完成
■ 通過在一個MATLAB 會話中保持數
據庫串連來減少需要進行輸入和輸出
資料所需要的語句, 除非資料庫連接
被顯式關閉
■ 它可以使您在不熟悉SQL 的情況下
和資料庫進行互動
在MATLAB 中對Microsoft Access 資料庫進行查詢

資料庫工具箱函數列表

資料庫訪問函數
clearwarnings 清除資料庫連接警告
close 關閉資料庫連接
commit 資料庫改變參數
database 串連資料庫
exec 執行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 得到資料庫列優先權
columns 得到資料庫表列名稱
crossreference 得到主健和外健資訊
dmd 建立資料庫中繼資料對象
exportedkeys 得到匯出外部健資訊
get 得到資料庫中繼資料屬性
importedkeys 得到匯入外健資訊
indexinfo 得到資料庫表的索引和統計
primarykeys 從資料庫表或結構得到主健資訊
procedurecolumns 得到目錄存放程式參數和結果列
procedures 得到目錄存放程式
supports 判斷是否支援資料庫中繼資料
tableprivileges 得到資料庫表優先權
tables 得到資料庫表名稱
versioncolumns 得到自動更新表列

 

Xinsoft,2004-08-11 20:28:15

資料庫工具箱讓使用者使用MATLAB強大資料分析和視覺化檢視功能處理儲存在資料庫中的資料的複雜分析。在MATLAB環境下工作,可以用結構化查詢語言 (SQL)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環境直接執行SQL查詢
動態匯入資料。 調節SQL查詢,把資料匯入MATLAB。資料庫工具箱滿足小的和大的查詢。

資料類型儲存。 在資料匯入和匯出行為MATLAB儲存資料類型
同時訪問多個資料庫。 從資料庫匯入資料,對該資料執行計算,然後匯入到另一個資料庫。
處理大資料集的能力。
連續狀態的資料庫連接:一旦和某個資料庫的串連建立後,資料庫一直是開啟的,除非在MATLAB中執行關閉語句。這提高了資料庫的讀取速度,減少了不必要的命令來調入,輸出資料 Visual Query Builder. 該圖形使用者介面列資料來源和所有表和欄位,不懂SQL的使用者可以訪問和查詢資料庫函數列表

資料庫訪問函數
clearwarnings 清除資料庫連接警告
close 關閉資料庫連接
commit 資料庫改變參數
database 串連資料庫
exec 執行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 得到資料庫列優先權
columns 得到資料庫表列名稱
crossreference 得到主健和外健資訊
dmd 建立資料庫中繼資料對象
exportedkeys 得到匯出外部健資訊
get 得到資料庫中繼資料屬性
importedkeys 得到匯入外健資訊
indexinfo 得到資料庫表的索引和統計
primarykeys 從資料庫表或結構得到主健資訊
procedurecolumns 得到目錄存放程式參數和結果列
procedures 得到目錄存放程式
supports 判斷是否支援資料庫中繼資料
tableprivileges 得到資料庫表優先權
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{i}=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,2004-08-11 20: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) 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 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 2000以下版本的資料庫,優點是功

齊全,具體可以參考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 2000及以上版本的資料庫應盡量通過ADO訪問,優點是可

通過較少的對象訪問資料庫,ADO與今後微軟的資料庫技術發展方向一致,目前支援的功

稍微少了一些)具體訪問的可以參考MSDN的協助檔案和ADO 類型庫的方法原型。

四、通過dde進行動態資料交換,可以查看help

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.