【问题标题】:How to connect to Microsoft SQL Server 2008 (MSSQL) from Matlab?如何从 Matlab 连接到 Microsoft SQL Server 2008 (MSSQL)?
【发布时间】:2011-09-29 10:13:01
【问题描述】:

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

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

更新

我更喜欢一种不需要使用 ODBC 进行手动设置的方法。

【问题讨论】:

    标签: sql-server sql-server-2008 matlab


    【解决方案1】:

    我在下面回顾了在 MATLAB 中访问数据库的不同方法。以下是讨论了其中一些问题的 Stack Overflow 问题列表:

    Java

    MATLAB 有一个嵌入式 Java JVM,允许您直接从 MATLAB 调用 JDBC drivers。您首先需要使它们在 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();
    

    数据库工具箱

    如果您有权访问Database Toolbox,它可以简化上述操作,因为它充当 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 (Control Panel &gt; ODBC Data Sources) 的 DSN,然后从数据库工具箱中使用它:

    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 增加了call .NET from MATLAB 的功能。因此您可以使用 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()
    

    【讨论】:

    • 很棒的总结。我认为值得添加(从您发布的链接之一)直接提及此工具箱:mathworks.com/matlabcentral/fileexchange/29615-adodbtools 它非常简单且快速。将查询输出为单元格表或结构数组!
    • @Dan:是的,我以前遇到过这个工具箱,绝对有用。下面,它使用上面 COM 方法中显示的相同方法(不幸的是,就像 .NET 一样,COM/ActiveX 方法是一种仅限 Windows 的解决方案,移植性较差)
    • 这些方法中是否有任何一种方法可以让您将数据库内容的位精确副本导入 Matlab?或者您是否必须将数字或二进制 blob(例如)读取为字符串并将它们重构为 Matlab 类型(这将非常慢)?
    • @Ahmed,你找到问题的答案了吗?我们现在解决这个问题,我们在 sql server 中有 bigint 并将其作为字符串取回。这在性能方面是无稽之谈。
    • @nojetlag 不,我问这个问题是作为工具风险评估的一部分,谢天谢地不是因为我需要答案。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多