在MATLAB中使用SQLServer JDBC Driver

时间:2017-09-22 17:27:42

标签: java sql-server matlab jdbc

我需要从Matlab内部连接到SQLServer数据库。

注意事项:

  1. 向Matlab的数据库工具箱购买许可证不是一种选择 - 我只能使用核心Matlab和Java。
  2. 初始化Matlab时,我无法假设Java路径。
  3. 请不要告诉我使用Python。我已经知道了,但我工作的公司没有......

  4. 这是我到目前为止所做的......

    我已经从here下载了SQL Server JDBC驱动程序。

    我已经创建了一个沙箱目录,内容如下图所示......

    Sandbox

    这是我的Matlab代码。

    % Connection params
    server = 'myServerName';
    port   = 1433;
    dbname = 'myDatabase';
    user   = 'user1';
    pass   = 'password';
    
    url = sprintf('jdbc:sqlserver://%s:%d;DatabaseName=%s',server,port,dbname);
    
    
    % Importing Java libraries
    import java.sql.*;
    import java.sql.DriverManager;
    import java.sql.DriverManager.*;
    
    % Add the Microsoft SQL Server JAR to Java path
    javaaddpath('<path_to_this_folder>\sqljdbc41.jar'); %for JRE7
    import com.microsoft.sqlserver.jdbc.*
    
    
    % Try to instantiate the JDBC Driver
    % This way DOES work
    % (https://stackoverflow.com/questions/24438359/connecting-matlab-and-mysql-with-the-jdbc-driver)
    if true
        d = com.microsoft.sqlserver.jdbc.SQLServerDriver;
    
        urlValid = d.acceptsURL(url);
    
        props = java.util.Properties;
        props.put('user',user);
        props.put('password',pass);
    
        con = d.connect(url, props);
    
    % This way DOES NOT work.
    %I referred to the sample code included with the JDBC to write this.
    else
        % Matlab Doc says this is similar to calling...
        %   Class.forName(...)
        javaObjectEDT('com.microsoft.sqlserver.jdbc.SQLServerDriver');
    
        driver = DriverManager.getDriver(url);
    
        con = DriverManager.getConnection(url, user, pass);
    
    end
    

    看来无论出于何种原因,DeviceManager都没有正确加载驱动程序。方法DriverManager.getDriver(url)抛出异常......

    Java exception occurred:
    java.sql.SQLException: No suitable driver
    
        at java.sql.DriverManager.getDriver(Unknown Source)
    

    有没有办法解决这个问题,还是应该直接通过驱动程序本身进行连接?我无法想出它重要的原因。会有什么后果吗?我应该采用DataSource方法吗?

    谢谢!

1 个答案:

答案 0 :(得分:0)

您可能希望尝试将驱动程序添加到静态Java路径而不是动态Java路径。每当我使用数据库驱动程序时,如果它们处于动态路径上,它们似乎就会遇到麻烦;我不确定为什么,但是他们似乎需要以特定的方式加载,如果它们处于动态路径上则不能很好地工作。