Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在MATLAB中使用SQLServer-JDBC驱动程序_Java_Sql Server_Matlab_Jdbc - Fatal编程技术网

Java 在MATLAB中使用SQLServer-JDBC驱动程序

Java 在MATLAB中使用SQLServer-JDBC驱动程序,java,sql-server,matlab,jdbc,Java,Sql Server,Matlab,Jdbc,我需要从Matlab内部连接到SQLServer数据库 注意事项: 购买Matlab数据库工具箱的许可证不是一个选项——我只能使用核心Matlab和Java 当Matlab初始化时,我不能假设Java路径的任何内容 请不要告诉我使用Python。我已经知道了,但是我工作的公司不 这是我到目前为止所做的 我已经从下载了SQL Server JDBC驱动程序 我已经创建了一个沙盒目录,内容如下图所示 这是我的Matlab代码 % Connection params server = 'mySe

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

注意事项:

  • 购买Matlab数据库工具箱的许可证不是一个选项——我只能使用核心Matlab和Java
  • 当Matlab初始化时,我不能假设Java路径的任何内容
  • 请不要告诉我使用Python。我已经知道了,但是我工作的公司不

  • 这是我到目前为止所做的

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

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


    这是我的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
    
    有没有办法解决这个问题,或者我应该直接通过驱动程序本身进行连接?我想不出一个重要的原因。会有什么后果吗?我应该改用数据源方法吗


    谢谢

    您可能希望尝试将驱动程序添加到静态Java路径,而不是动态Java路径。每当我使用数据库驱动程序时,如果它们在动态路径上,它们似乎会遇到问题;我不知道确切的原因,但它们似乎需要以一种特殊的方式加载,如果它们在动态路径上,则无法很好地工作。

    我不懂Matlab,因此有此评论。“正常”方法是使用
    DriverManager.getConnection
    ,而不是
    DriverManager.getDriver
    ,后面紧跟
    Driver.getConnection
    。该错误表明驱动程序尚未加载(注册)到驱动程序管理器,因此该
    javaObjectEDT
    无法按广告的方式工作,或者Matlab在类加载中应用了限制,阻止了该功能的工作。请注意,
    DriverManager.getConnection
    DriverManager.getDriver
    应用了一些额外的技巧,所以我会先试试。@markrottveel。我的理解是,
    DriverManager.getDriver(url)
    只是搜索DriverManager,看看是否有加载的驱动程序可以处理给定的url。它实际上对加载的驱动程序没有任何作用。我看不出这会如何改变下面的一行,即,
    DriverManager.getConnection
    @markrotterveel。也就是说,Matlab很可能限制了一些类加载。让我在那里挖点东西。
    Java exception occurred:
    java.sql.SQLException: No suitable driver
    
        at java.sql.DriverManager.getDriver(Unknown Source)