2017-09-22 7 views
2

Matlab内からSQLServerデータベースに接続する必要があります。MATLABでSQLServer JDBCドライバを使用

警告:

  1. MATLABのデータベースツールボックスにライセンスを購入、私は唯一のコアのMatlabとJavaを使用することができますでもOption--ではありません。
  2. Matlabが初期化されたときにJavaパスについて何も仮定することはできません。
  3. 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がドライバを適切にロードしていないようです。 DriverManager.getDriver(url)が例外を投げている方法...

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

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

この問題を解決するか、私はちょうどドライバ自体を介して直接接続することに転がる必要があります方法はあり

?なぜそれが重要なのか考えることができません。結果はありますか?代わりにDataSourceのアプローチを使用する必要がありますか?

ありがとうございます!

+0

私はMatlabを知らないので、このコメントです。通常の方法は、 'DriverManager.getDriver'に続いて' Driver.getConnection'を使用するのではなく、 'DriverManager.getConnection'を使用することです。このエラーは、ドライバーがドライバーマネージャーでロード(登録)されていないことを示しています。したがって、この 'javaObjectEDT'は宣言されたとおりに動作しないか、Matlabがこれを動作させないクラスローディングに制限を適用します。 'DriverManager.getConnection'は' DriverManager.getDriver'よりも少し余計なトリックを適用するので、まずそれを試してみます。 –

+0

@MarkRotteveel。 'DriverManager.getDriver(url)'は、DriverManagerを検索して、指定されたURLを処理できるロードされたドライバがあるかどうかを調べるだけであると私は理解しています。ロードされたドライバには実際には何もしません。私はそれが 'DriverManager.getConnection'である次の行をどのように変更するのか分かりません。 – Evan

+0

@MarkRotteveel。つまり、Matlabはクラスの読み込みを制限する可能性が高くなります。そこに掘り起こしてみましょう。 – Evan

答えて

0

ダイナミックJavaパスではなく静的Javaパスにドライバを追加してみてください。私がデータベースドライバを使って作業しているときは、動的パス上にいると問題があるようです。なぜ正確にはわかりませんが、動的パス上にあるとうまく動作しない特定の方法でロードする必要があるようです。

関連する問題