【问题标题】:Using SQLServer JDBC Driver in MATLAB在 MATLAB 中使用 SQLServer JDBC 驱动程序
【发布时间】:2018-03-04 08:32:16
【问题描述】:

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

注意事项:

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


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

我已经从here 下载了 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

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

Java exception occurred:
java.sql.SQLException: No suitable driver

    at java.sql.DriverManager.getDriver(Unknown Source)

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

谢谢!

【问题讨论】:

  • 我不知道 Matlab,因此有此评论。 “正常”方式是使用DriverManager.getConnection,而不是DriverManager.getDriver,后跟Driver.getConnection。该错误表明驱动程序尚未加载(注册)到驱动程序管理器,因此这个javaObjectEDT 不能像宣传的那样工作,或者Matlab 在类加载中应用了阻止它工作的限制。请注意,DriverManager.getConnectionDriverManager.getDriver 应用了一些额外的技巧,所以我会先尝试。
  • @MarkRotteveel。据我了解,DriverManager.getDriver(url) 只是搜索 DriverManager 以查看是否有加载的驱动程序可以处理给定的 url。它实际上并没有对加载的驱动程序做任何事情。我看不出这会如何改变以下行,即DriverManager.getConnection
  • @MarkRotteveel。话虽如此,Matlab 更有可能限制某些类加载。让我在那里挖掘一下。

标签: java sql-server matlab jdbc


【解决方案1】:

您可能想尝试将驱动程序添加到静态 Java 路径而不是动态 Java 路径。每当我使用数据库驱动程序时,如果它们在动态路径上,它们似乎会遇到麻烦;我不知道究竟是为什么,但它们似乎需要以一种特殊的方式加载,如果它们在动态路径上就不能很好地工作。

【讨论】:

    猜你喜欢
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多