2017-09-22 23 views
2

我需要從Matlab內部連接到SQLServer數據庫。在MATLAB中使用SQLServer JDBC驅動程序

注意事項:

  1. 購買許可證Matlab的數據庫工具箱不是option--我只能用核心與Matlab和Java。
  2. 當初始化Matlab時,我不能假設任何有關Java路徑的東西。
  3. 請不要告訴我使用Python。我已經知道,但我工作的公司不...


這是我到目前爲止已經完成了...

我已經下載了SQL Server JDBC驅動程序從here

我創建了一個sandbox目錄,如下圖所示內容...

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方法嗎?

謝謝!

+0

我不知道Matlab,所以這個評論。 '正常'的方式是使用'DriverManager.getConnection',而不是'DriverManager.getDriver'然後是'Driver.getConnection'。該錯誤表明驅動程序尚未與驅動程序管理器一起加載(註冊),所以或者'javaObjectEDT'不能像廣告一樣工作,或者Matlab在類加載中應用限制,從而阻止它的工作。請注意,'DriverManager.getConnection'在'DriverManager.getDriver'上應用了一些額外的技巧,所以我會先嚐試一下。 –

+0

@MarkRotteveel。這是我的理解,'DriverManager.getDriver(url)'只是搜索DriverManager,看看是否有加載的驅動程序可以處理給定的網址。它實際上並沒有對加載的驅動程序做任何事情。我不明白這會怎樣改變下面這一行,即'DriverManager.getConnection' – Evan

+0

@MarkRotteveel。話雖如此,但Matlab很可能會限制某些類加載。讓我在那裏做一些挖掘。 – Evan

回答

0

您可能想嘗試將驅動程序添加到靜態Java路徑而不是動態Java路徑。每當我使用數據庫驅動程序時,如果它們處於動態路徑上,似乎都會遇到麻煩;我不確定爲什麼,但他們似乎需要以一種特殊的方式加載,如果他們處於動態路徑中,那麼這種加載方式不能很好地工作。

相關問題