如何从Matlab连接到Microsoft SQL Server 2008 (MSSQL)?

11

这可能是一个简单的问题:

  • 如何从Matlab连接到Microsoft SQL Server 2008 R2?
  • 如何在给定某个SQL查询的情况下将表读入矩阵中?

更新

我希望使用一种不需要手动设置ODBC的方法。

1个回答

26
我在下面给出了一份与MATLAB数据库访问不同方法的回顾。以下是一些相关问题的Stack Overflow列表:

Java

MATLAB带有嵌入式Java JVM,允许您直接从MATLAB调用JDBC驱动程序。您首先需要在MATLAB的Java classpth中使它们可用:

javaclasspath('sqljdbc4.jar');

%# load driver and create connection
driver = com.microsoft.sqlserver.jdbc.SQLServerDriver;
conn  = driver.connect('jdbc:sqlserver://<HOST>:<PORT>;databaseName=<DB>');

%# query database
q = conn.prepareStatement('select * from <TABLE>');
rs = q.executeQuery();
while rs.next()
    char(rs.getString(0))
end
rs.close();
conn.close();

数据库工具箱

如果您可以访问数据库工具箱,它可以简化上述过程,因为它作为JDBC / ODBC的封装器:

conn = database('<DB>', '<USER>','<PASS>', ...
    'com.microsoft.sqlserver.jdbc.SQLServerDriver', ...
    'jdbc:sqlserver://<HOST>:<PORT>;database=<DB>');
curs = exec(conn, 'select * from <TABLE>');
curs = fetch(curs);
curs.Data
close(curs)
close(conn)

您还可以通过ODBC访问数据库。首先创建到MSSQL Server的DSN(控制面板 > ODBC数据源),然后从数据库工具箱中使用它:

conn = database('myDB', '', '');    %# User/System DSN
%...
close(conn)

COM

您可以直接从MATLAB使用ADO OLEDB组件。一种方法是指定连接字符串(无需DNS):

conn = actxserver('ADODB.Connection');
conn.Open('Provider=sqloledb;Data Source=<HOST>;Initial Catalog=<DB>;User Id=<USER>;Password=<PASS>;');
conn.Execute('select * from <TABLE>').GetRows
conn.Close()

.NET

最近版本的MATLAB添加了从MATLAB中调用.NET的功能。因此,您可以使用ADO.NET数据提供程序:

import System.Data.SqlClient.*
NET.addAssembly('System.Data');
conn = SqlConnection('Data Source=<HOST>;Initial Catalog=<DB>');
conn.Open();
q = SqlCommand('select * from <TABLE>', conn);
r = q.ExecuteReader();
while r.Read()
    char(r.GetString(0))
end
r.Close()
conn.Close()

很好的总结。我认为值得补充(来自您发布的链接之一)直接提到这个工具箱:http://www.mathworks.com/matlabcentral/fileexchange/29615-adodbtools 它非常简单和快速。将查询输出为单元表或结构数组! - Dan
这些方法中是否有任何一种可以让您将数据库内容的位精确副本导入Matlab?还是您必须将数字或二进制块(例如)作为字符字符串读取并将它们重构为Matlab类型(这将非常缓慢)? - Ahmed Fasih
@nojetlag 不,我是作为工具风险评估的一部分提出这个问题的,谢天谢地不是因为我需要答案。祝好运。 - Ahmed Fasih
如果有其他人像我一样遇到问题,你需要确保在使用上述Java方法时,你使用的sqljdbc*.jar文件将在Matlab使用的Java版本中运行。最初,我尝试使用sqljdbc41.jar(需要Java 1.7 / JRE 7),但我的Matlab(R2012a)使用Java 1.6。该类不会加载,但会悄悄失败。 - Michael Repucci
JSONlab是一个MATLAB/Octave工具箱,用于编码/解码JSON/UBJSON文件。 - Stefan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接