2016-08-30 37 views
0

HTTPサーブレットプログラムでSQL Serverデータベースを使用したいだけですが、プログラムがデータベースに接続できないようです。次のエラーが表示されます。JDBC経由でSQL Serverに接続できません。 jdbc:sqlserverのドライバが見つかりません://

No suitable driver found for jdbc:sqlserver://localhost:1433;databaseName=Bookyard;integratedSecurity=true;

これは私の接続方法です。

package practice.bookyard.server.util; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

public class Database { 

    public static Connection getConnection() { 
     String url = "jdbc:sqlserver://(LocalDb)\\MSSQLLocalDB:1433;databaseName=Bookyard;integratedSecurity=true;"; 
     Connection connection = null; 

     try { 
      connection = DriverManager.getConnection(url); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

     return connection; 
    } 

} 

私は以前localhost:1433としてサーバ名を持っていたが、私はSQL Serverインスタンス名(LocalDb)\\MSSQLLocalDB:1433にそれを変更し、まだ古い名前をピックアップしているようです。

また、SQL Server localdbに接続するときに適切な接続文字列を指定する方法がわかりません。

私はEclipse for Java EE、Mars 2を使用していますが、SQL 6.0のMicrosoft JDBCドライバはthis websiteからダウンロードしました。

インストールを実行し、結果のフォルダの内容を解凍しました。次に、sqljdbc42.jarファイルをJDK 1.8をターゲットにしてビルドパスに追加しました。怖いウォンバットの提案の際

enter image description here

UPDATE

、私も自分のクラスパスにsqljdbc42.jarファイルへのパスを追加しました。

enter image description here

しかし、私はまだ同じエラーを取得します。

これはリフレクションの問題であり、タイプローダーがドライバのタイプを自分の接続文字列から解決できないという点でかなり確信しています。つまり、使用している接続文字列の構文が間違っています。

次のように私は読むために私の接続文字列を変更:

String url = "jdbc:sqlserver://localhost:1433; 
instance=(LocalDb)\\MSSQLLocalDB; 
databaseName=Bookyard;integratedSecurity=true;"; 

をしかし、私はまだ同じエラーを取得するだけでなく、私が受け取る例外メッセージはまだ私の古い接続文字列を持っています。だから、明らかに、キャッシングもいくつかありますが、私はちょうどどこを知りません。誰が私の接続文字列をキャッシュしていますか、そのキャッシュをリフレッシュ/クリアするにはどうすればいいですか?

localdbに接続していて、メインのSQL Serverインスタンスに接続していない場合、SQL Serverインスタンス名を指定する方法を教えてください。

あなたが

String url = "jdbc:sqlserver://YOUR PC NAME;instanceName=SQLEXPRESS;DatabaseName=dbname;integratedSecurity=true"; 

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
Connection myCon = DriverManager.getConnection(url); 

以下のノートのように行うことができます
+0

SQL Server Configuration ManagerでTCP/IPが有効になっているかどうかチェックできますか?有効になっていない場合は、有効にする必要があります。私が正しく覚えていれば、この変更を行った後でシステムを再起動する必要があるかもしれません。 –

+2

jarファイルはクラスパスだけでなく、ビルドパスにもなければなりません。ビルドパスはコンパイル専用です –

+0

@ScaryWombatどうすればクラスパスに入れるのですか?私は初心者ですか?それは環境変数ですか? –

答えて

0

@ScaryWombatと@JozefChocholacekは暗黙のうちに、クラスパスの問題であることが判明しました。どうやら、sqljdbc42.jarファイルだけをコピーして貼り付け、このファイルはサブフォルダ内でなくWEB-INF\libフォルダに直接コピーして貼り付ける必要があります。

私はまだそれが私にエラーを与えたことをしました。

WEB-INFのフォルダ構造は、Project Explorerで見たときに古いフォルダ構造が残っていたためです。そこで、Project ExplorerWEB-INFフォルダを右クリックし、Refreshコマンドを選択しました。

また、環境変数CLASSPATHWEB-INFフォルダに指定するように更新しましたが、そのエラーはなくなりました。

-2

:ただ、ユーザー名とパスワードを追加することによって、それを試しにClass.forName

-1

を使用して手動でドライバクラスをロードするためのJDBCドライバの新バージョンのためしかしそのnecceaaryありません

Connection con=DriverManager.getConnection("jdbc:sqlserver://10.100.10.100:1433;databaseName=DB","username","password"); 


はそれが作品かもしれない願って、私のために動作します。

関連する問題