资源描述
Matlab通过ODBC连接SQL Server两种方法:程序设计方法和图形界面设计方法
(1) 程序设计方法
matlab连接SQL数据库
1 首先创建数据库,就不废话了。
2 建立ODBC数据源:控制面板->管理工具->ODBC数据源->用户DNS。如图
点击“添加”
旋转“SQL Server”,“完成”。
数据源名称--编程时要用到,可任意命名。服务器选择自己指定的
选择默认数据库,下一步
下一步
旋转SQL Server验证,完成。
3 编程(来自网络)这段程序已经过我验证。
sourceName=input('Enter the source Name:','s'); %获取数据源的名称(dbtest)
Timeout=logintimeout(5); %允许登录连接时间最长为5s
conn=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); %显示数据表中的数据
(2) 图形界面设计方法
首先在Windows的ODBC数据源管理器中设置好服务器的地址,具体做法就是在"用户DSN"页面中添加SQL Server,然后在弹出的窗口中设置好名称(例如macro2)、服务器地址,至于密码等等则不一定需要,因为Matlab中需要另外输入密码 。
打开Matlab,运行querybuilder,在左边的"Data Source"里面应该可以看到"macro2"。点击,如果数据库有密码,则输入密码,否则直接就可以看到数据库中的table显示在querybuilder的tables中。
值得一提的是,和SAS等不同,Matlab可能将一些不是table的信息(如index等)也显示在tables中。
点击其中一个table名称,在Fields中就可以看到字段啦。选择需要导出的字段,当然还可以点击 where、 Group by、等等来限定需要导出数据的条件。
最后必须做的是在"Matlab workspace variable"栏中输入用于导出数据的变量名称。点击, Execute即可导出数据。
总体而言导出的速度还可以,(由于Matlab通过Java间接连接ODBC数据库,比直接连接,如SAS等软件慢一些)。我下载2011年1月份的上证综指每6秒钟取样一次的高频交易数据,用来约15秒钟,在Matlab中的变量占用83M的空间。
PS:如果你是x64的Matlab软件,那么恭喜你了,此路不通。
Matlab通过JDBC连接SQL Server
上一篇写的是通过ODBC连接SQL Server,那种方法存在两大问题,
第一是速度慢,因为Matlab需要用一个叫做JDBC/ODBC Bridge的东西作为桥梁间接地连接ODBC数据库,因此速度肯定比JDBC要慢。如果说慢一点可以容忍的话,那么第二个问题可就忍无可忍了。那就是64位Matlab无法通过ODBC接口访问SQL Server--因为这个悲剧,我还不得不新安装一个32位的Matlab!
既然ODBC那么不爽,我们可以跳出ODBC,而直接使用JDBC来访问数据库。
第一步,从Microsoft.COM 下载Microsoft SQL Server JDBC Driver 3.0,下载地址可以将上述关键字扔进Google中搜索就得到了。解压缩可以得到很多文件,我们需要的是其中的sqljdbc4.jar和sqljdbc.jar这两个文件。
其中后者是前者的子集,只要不出问题,直接使用前者就可以了。
第二步,在Matlab中加入jar。具体做法是找到"classpath.txt"文件,例如我的这个文件位置是 "D:\Matlab2010B\toolbox\local\classpath.txt",在文件的最后加入sqljdbc4.jar的完整路径,例如我的是: "D:/sqljdbc30/enu/sqljdbc4.jar",注意斜杠怎么写。
第三步,启动Matlab,启动过程中如果没有出错,那么这个JDBC Connector就可以用了。
上面三步就把JDBC Connector建好了。接下来我们就开始连接数据库。
第一步,建立一个到数据库的连接。假设SQL Server地址是 192.30.1.117, 端口是 1433, 数据库名称是RTQ,用户名user,密码 pwd,那么用下面的语句建立一个到该数据库的连接。
conn=database('RTQ','user','pwd','com.microsoft.sqlserver.jdbc.SQLServerDriver',...
'jdbc:sqlserver://192.30.1.117:1433;databaseName=RTQ');
第二步,建立一个查询,假设我们想获得名叫 tbl 的table中的所有顺序,那么可以用:
curs=exec(conn,'select * from tbl');
第三步,获取数据
curs=fetch(curs);
获取的数据就储存在 curs.Data 中。如果我们想将其保存到xls文件中,可以使用
xlswrite('data.xls',curs.Data);
依据测试,在我的Win 7 Professional x64, Matlab 2010B x64 系统上成功获取了数据,但是速度测试不太好做,因为可能与数据库本身的速度有关。我从三个数据库分别下载70万行左右的数据,使用时间在10到25秒不等。
在Matlab用JDBC驱动连接SQL Server 2008(其他仅连接符url和driver不同)
%在运行此段代码前先确保配置好了JDBC驱动,方法如下:
%1.Microsoft官网下载sqljdbc3.0驱动——Microsoft SQL Server JDBC Driver 2.0.exe(4M左右)
%2.解压后能看到sqljdbc4.jar和sqljdbc.jar文件,针对电脑上JDK的版本选择导入文件,如JDK6.0导入sqljdbc4.jar
%3.在command windows中输入:edit classpath.txt 打开路径配置文件 在文件最后一行添加sqljdbc4.jar的完整路径,
%(不能同时加载sqljdbc4.jar和sqljdbc.jar的路径,否则不能正常连接数据库)。
%4.在SQL Server中新建一个登录名godman,并设置密码为godman
%5.采用如下代码在Matlab中连接SQL Server 2008
%Godman 2010.12.20 tntuyh@
代码如下:
clear;close all
%url
databaseurl='jdbc:sqlserver://localhost:1433;';
%driver
driver='com.microsoft.sqlserver.jdbc.SQLServerDriver';
username='godman'; %登录名
password='godman'; %密码
databasename='Test'; %数据源名称
conn = database(databasename,username,password,driver,databaseurl)
tic
curs=exec(conn,'select * from 处理前数据')
curs=fetch(curs); %将SQL执行结果返回到MATLAB工作空间
data=curs.Data; %得到SQL执行结果中的数据
toc
close(curs); %关闭游标对象
close(conn); %关闭数据库连接对象
展开阅读全文