2
我需要從Matlab內部連接到SQLServer數據庫。在MATLAB中使用SQLServer JDBC驅動程序
注意事項:
- 購買許可證Matlab的數據庫工具箱不是option--我只能用核心與Matlab和Java。
- 當初始化Matlab時,我不能假設任何有關Java路徑的東西。
- 請不要告訴我使用Python。我已經知道,但我工作的公司不...
這是我到目前爲止已經完成了...
我已經下載了SQL Server JDBC驅動程序從here。
我創建了一個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都沒有正確加載驅動程序。
Java exception occurred:
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(Unknown Source)
有沒有辦法解決這個問題還是應該我只是直接通過驅動程序本身連接滾動的方法DriverManager.getDriver(url)
拋出一個異常...?我想不出爲什麼重要。會有什麼後果嗎?我應該使用DataSource方法嗎?
謝謝!
我不知道Matlab,所以這個評論。 '正常'的方式是使用'DriverManager.getConnection',而不是'DriverManager.getDriver'然後是'Driver.getConnection'。該錯誤表明驅動程序尚未與驅動程序管理器一起加載(註冊),所以或者'javaObjectEDT'不能像廣告一樣工作,或者Matlab在類加載中應用限制,從而阻止它的工作。請注意,'DriverManager.getConnection'在'DriverManager.getDriver'上應用了一些額外的技巧,所以我會先嚐試一下。 –
@MarkRotteveel。這是我的理解,'DriverManager.getDriver(url)'只是搜索DriverManager,看看是否有加載的驅動程序可以處理給定的網址。它實際上並沒有對加載的驅動程序做任何事情。我不明白這會怎樣改變下面這一行,即'DriverManager.getConnection' – Evan
@MarkRotteveel。話雖如此,但Matlab很可能會限制某些類加載。讓我在那裏做一些挖掘。 – Evan