Matlab与数据库连接


最近要实现复杂网络相关的实现,每次有个新想法就要重新写程序,着实让人呕吐啊~~所以决定这次花点功夫做个通用点的,所以也就需要接触很多以前没有看到的内容,今晚的任务就是实现Matlab与Access数据库的连接,在baidu搜了一圈,回答倒是有,但答案都一样,也不知是从哪抄来的程序,可是适用了一下总是出问题,最后才知道,这些人啊,就知道抄,也不动手试试,或者他们觉得这是基础知识,所以就忽略了,着实让我这个新手头疼啊~~~不过好在最后还是找到了根源,虽然为了这个小功能花费了不少时间,但最终还是很有成就感的哈,废话不多说,现在就来说说如何实现吧

Step1:当然是要建立一个数据库啦,哈哈,这个大家应该不用说了吧;

Step2:这一步是很多帖子都忽略的,就是需要用ODBC进行数据库连接,当我发现这个功能的时候,才发现其实暑假在做项目的时候就已经用到了,可是那时候只是一味依赖师兄,所以没好好看,哎呀,真是不该偷懒,嘿嘿

方法就是:控制面板--》管理工具--》数据源(ODBC)---》用户DSN--》添加

然后再数据源名处随意命个名,比如Dataset~~然后点击选择加入在第一步建立的数据库,这一步就ok了~~~

Step3:这就是用到Matlab了,建立一个新的M文件,将以下代码拷贝进去:

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 1984-2002 The MathWorks, Inc.
% $Revision: 1.9 $   $Date: 2002/06/17 12:00:49 $
% Set maximum time allowed for establishing a connection.
timeoutA=logintimeout(5)
% Connect to a database.
connA=database('Dataset','','')--%这个Dataset就是刚刚命的名称,(*^__^*) 嘻嘻……
% Check the database status.
ping(connA)--%如果没有第二步,就会在这里报错~~
%错误的:
%正确的:
 
 
 
% Open cursor and execute SQL statement.
cursorA=exec(connA,'select * from Zachary空手道俱乐部');
% 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)

嗯~~到此为止,应该就结束了,哈哈,自己动手试试看吧~~~


 

 

 

 

 

 

1 首先创建数据库,就不废话了。

2 建立ODBC数据源:控制面板->管理工具->ODBC数据源->用户DNS。如图



点击“添加”




 选择“SQL Server”,“完成”。

 



数据源名称--编程时要用到,可任意命名。服务器选择自己指定的

 








3 编程(来自网络)这段程序已经过验证。

sourceName=input('Enter the source Name:','s');       %获取数据源的名称(dbtest)
Timeout=logintimeout(5);                         %允许登录连接时间最长为5s
cnotallow=database(sourceName,'sa','123');                    %获取数据库连接对象
ping(conn)                                     %测试数据库连接状态
dbmeta=dmd(conn);                           %获取数据元对象
t=tables(dbmeta,'tutorial');                      %获取cata为tutorial的表名
[trow,tcolumn]=size(t);                         %获取返回数组的大小
index=1;                               
for i=1:trow                                  %由于表中既包含了系统表格
    if strcmp(t{i,2},'TABLE')                   %又包含了用户表格,需要在其中
        tablename{1,index}=t{i,1};             %找出用户表格,对t数组的每一行
        index=index+1;                       %的第二个元素判断是table则为用
    end                                     %户表。
end

 

tabletosee=input('Which one would you want to use? ','s'); %获取欲查看的表格的名称
    sql=['select * from ',tabletosee];                   %构造查询的sql语句
    curs=exec(conn,sql);                            %执行该sql语句
    setdbprefs('DataReturnFormat','cellarray');           %设定数据返回格式
    curs=fetch(curs);                               %获取结果集对象
    numrows=rows(curs);                           %获取返回数据的行数
    numcols=cols(curs);                             %获取返回数据的列数
disp('--------------------------------------------------------------'); %在屏幕中显示表格信息
   fprintf('          Information of Table %s . ',tabletosee);
    disp('--------------------------------------------------------------');
    fprintf('number of rows=%d, number of columns=%d ',numrows,numcols);
    disp('    FieldName     typeName typeValue columnWidth nullable');
for k=1:numcols                                 %分别获取相关信息
        attributes=attr(curs,k);
   
        tableinfo{k,1}=attributes.fieldName;              %获取字段名称
        tableinfo{k,2}=attributes.typeName;              %获取字段类型名
        tableinfo{k,3}=attributes.typeValue;              %获取字段类型代码
        tableinfo{k,4}=attributes.columnWidth;           %获取字段的宽度
        tableinfo{k,5}=attributes.nullable;               %获取字段是否可空
    end
disp(tableinfo);                                       %显示数据表的结构信息
    disp('-------------------------------------------------------------');
    fprintf('          Data of Table %s . ',tabletosee);
    disp('--------------------------------------------------------------');
    for i=1:numcols
        fprintf(' %s',tableinfo{i,1});
    end
    fprintf(' ');
    tabledata=curs.data;                               %获取结果集对象的数据
disp(tabledata);                                  %显示数据表中的数据