收藏 分销(赏)

网络整理:Matlab通过JDBC和ODBC连接SQL-Server.docx

上传人:仙人****88 文档编号:8882489 上传时间:2025-03-06 格式:DOCX 页数:9 大小:254.32KB
下载 相关 举报
网络整理:Matlab通过JDBC和ODBC连接SQL-Server.docx_第1页
第1页 / 共9页
网络整理:Matlab通过JDBC和ODBC连接SQL-Server.docx_第2页
第2页 / 共9页
点击查看更多>>
资源描述
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);      %关闭数据库连接对象 
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服