JDBCを使ってSQLServerに接続するのに大変苦労したので解決方法を紹介します。
因みに名前付きインスタンスのサーバーに接続しています。
環境はWindows10、Java11、JDBCドライバは7.0です。
https://www.microsoft.com/ja-JP/download/details.aspx?id=57175
先ずソースコードは以下の通り
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ConnectURL { public static void main(String[] args) { try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch(ClassNotFoundException e){ e.printStackTrace(); return; } String connectionUrl = "jdbc:sqlserver://localhost\\MSSQLSERVER2017;databaseName=Login;user=sa;password=パスワード"; try { Connection con = DriverManager.getConnection(connectionUrl); Statement stmt = con.createStatement(); String SQL = "SELECT TOP 10 * FROM LOGIN"; ResultSet rs = stmt.executeQuery(SQL); while (rs.next()) { System.out.println(rs.getString("ID") + " " + rs.getString("PWD")); } rs.close(); con.close(); } catch (SQLException e) { e.printStackTrace(); } } }
通常のJava環境ではドライバを認識できなかったのでEclipseでドライバを参照設定すると成功した。
しかし通常のJava環境で実現したかったのでYahoo!知恵袋で質問した所、ドライバをカレントディレクトリに展開してクラスパスをカレントディレクトリに指定せよとの回答。
展開コマンドは以下の通り
>jar -xvf mssql-jdbc-7.2.1.jre11.jar
次にクラスパスを指定してコンパイル
>javac ConnectURL.java -cp .
実行時にはクラスパスは必要ありません
>java ConnectURL
あとでわかったことですがカレントディレクトリに展開しておけばコンパイル時も実行時にもクラスパスは必要ありませんでした。
Eclipseでも同様の事が行われているかは疑問ですがどんな環境構築しているのか興味が湧きますね。しかし通常のJava開発環境で簡単に実装出来ない(ドライバを展開しなければならない)のは問題があると思います。