【发布时间】:2018-03-04 08:32:16
【问题描述】:
我需要从 Matlab 内部连接到 SQLServer 数据库。
注意事项:
- 购买 Matlab 数据库工具箱的许可证不是一种选择 -- 我只能使用核心 Matlab 和 Java。
- 在初始化 Matlab 时,我无法假设有关 Java 路径的任何事情。
- 请不要告诉我使用 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.getConnection对DriverManager.getDriver应用了一些额外的技巧,所以我会先尝试。 -
@MarkRotteveel。据我了解,
DriverManager.getDriver(url)只是搜索 DriverManager 以查看是否有加载的驱动程序可以处理给定的 url。它实际上并没有对加载的驱动程序做任何事情。我看不出这会如何改变以下行,即DriverManager.getConnection -
@MarkRotteveel。话虽如此,Matlab 更有可能限制某些类加载。让我在那里挖掘一下。
标签: java sql-server matlab jdbc