2
Matlab内からSQLServerデータベースに接続する必要があります。MATLABでSQLServer JDBCドライバを使用
警告:
- MATLABのデータベースツールボックスにライセンスを購入、私は唯一のコアのMatlabとJavaを使用することができますでもOption--ではありません。
- Matlabが初期化されたときにJavaパスについて何も仮定することはできません。
- Pythonを使用するように教えてください。私はすでにそれを知っているが、私は働いている会社にはありません...
ここ
は、私がこれまで行ってきたものだ...
私は、SQL ServerのJDBCドライバをダウンロードしましたhere
私はサンドボックスディレクトリを作成した、下図の内容...
ここに私の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.getDriver'に続いて' Driver.getConnection'を使用するのではなく、 'DriverManager.getConnection'を使用することです。このエラーは、ドライバーがドライバーマネージャーでロード(登録)されていないことを示しています。したがって、この 'javaObjectEDT'は宣言されたとおりに動作しないか、Matlabがこれを動作させないクラスローディングに制限を適用します。 'DriverManager.getConnection'は' DriverManager.getDriver'よりも少し余計なトリックを適用するので、まずそれを試してみます。 –
@MarkRotteveel。 'DriverManager.getDriver(url)'は、DriverManagerを検索して、指定されたURLを処理できるロードされたドライバがあるかどうかを調べるだけであると私は理解しています。ロードされたドライバには実際には何もしません。私はそれが 'DriverManager.getConnection'である次の行をどのように変更するのか分かりません。 – Evan
@MarkRotteveel。つまり、Matlabはクラスの読み込みを制限する可能性が高くなります。そこに掘り起こしてみましょう。 – Evan