質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.48%

JSP/SERVLETからのSQLSERVER接続について

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 2,647

score 0

前提・実現したいこと

JSP/SERVLETから、SQLSERVERに接続したいです。

発生している問題・エラーメッセージ

DBへのConnection確立時に以下のエラーメッセージが発生しました。

java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost\SQLEXPRESS;database=study

該当のソースコード

----DAO呼び出し用クラス(サーブレットから呼び出させます。)

package Action;
import dao.study_test_dao;

public class PositionMasterSerach {
    public void Select() {

        //検索用 DAO宣言
        study_test_dao study_test = new study_test_dao();
        study_test.main();

        return ;
    }
}


-----DBへの接続用クラス

package dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class study_test_dao {

    public static void main(String[] args) {

        Connection conn = null;

        try {
            String url = "jdbc:sqlserver://localhost\\SQLEXPRESS;database=study";
           String user = "test";
            String pass = "test";

            try {
                // JDBCドライバをロード
                // SQL Serverに接続
                Connection con = DriverManager.getConnection(url, user, pass);
                con.close();
            } catch (Exception e) {
                // その他の例外
                e.printStackTrace();
            }
        }  finally {
            try {
                if (conn != null && !conn.isClosed()) {
                    conn.close();
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
    }
}

試したこと

①JDBCのドライバーをダウンロードする。
②jarファイルを所定の場所に格納する。
A.「プロジェクトフォルダ\WebContent\WEB-INF\lib」
B.「TOMCATインストールフォルダ\lib」
③クラスパスを設定する。
ビルドパスの設定から、②AのJARファイルを設定
④実行環境にパスを通す
実行環境の設定から、②BのJARファイルを設定

補足情報(FW/ツールのバージョンなど)

下記を利用しています。
Eclipse2020
JAVA11
TOMCAT9
SQLSERVER2017 EXPRESS
JCDBドライバー:mssql-jdbc-7.2.2.jre11.jar

DBへの接続用クラスを右クリックして、「実行→JAVAアプリケーション」で実行すると接続できます。ただ、サーブレットから「実行→サーバで実行」をすると上記のエラーとなります。

何かしらの環境設定が抜けていたらご教授ください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • javahack

    2020/08/13 09:05

    マークダウンが効いていません。
    以下のようにコードを囲んでください。(出来ればファイル毎に)
    ```Java
    コード
    ```
    study_test_daoクラスは接続テストのためにmain()を書いているのではなく、Servletから呼び出すときも質問文の内容でしょうか?

    キャンセル

  • koume2

    2020/08/13 10:31

    コメントありがとうございます。
    javaコードを囲みました。

    study_test_daoは接続テストのためにmain()を書いています。
    Servletから呼び出す際も同様のまま試しています。

    キャンセル

  • javahack

    2020/08/13 10:48

    main()を呼び出すのは正直気持ち悪いけど置いとくとして、引数設定してないとコンパイルエラーになりませんか?

    キャンセル

  • koume2

    2020/08/13 13:24

    不要な分を消す際に誤って消していました。
    引数にNULLを設定しています。

    キャンセル

回答 1

0

動作検証はできてないですが、
No suitable driver found for jdbc
のエラーならgetConnectionの前にJDBCドライバをロードする一文がいるはずです。

// JDBCドライバをロード
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// SQL Serverに接続
Connection con = DriverManager.getConnection(url, user, pass);

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/08/13 15:51

    色々と教えていただきありがとうございます。
    何度も申し訳ありません。

    TOMCAT実行時の設定としては、下記を行っています。
    何か不足していることがあればご教授いただきたいです。

    ・クラスパスの設定
    1.プロジェクト名を右クリックして、「実行→実行の構成」を選択
    2.クラスパスのタブを選択して、外部JARの追加
    3.mssql-jdbc-7.2.2.jre11.jarを選択

    ・jarファイルの配置
    下記にmssql-jdbc-7.2.2.jre11.jarを配置
    1.C:\Tomcat9\lib
    2.C:\eclipse\pleiades\tomcat\9\lib
    3.C:\workspace\study\WebContent\WEB-INF\lib

    根本的にわかっていないと感じていることは下記です。
    ①TOMCAT実行時にJDBCのjarファイルの配置場所がどこが正しいのか
    ②JDKのバージョンがECLIPSEを介することにより、インストールしたものと異なるのか。

    ※コマンドプロンプトでは下記のようになっていますが、ECLIPSEを介することにより違うバージョンが利用されている可能性を危惧しています。
    java -version
    java version "11.0.8" 2020-07-14 LTS
    Java(TM) SE Runtime Environment 18.9 (build 11.0.8+10-LTS)
    Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.8+10-LTS, mixed mode)

    javac -version
    javac 11.0.8

    キャンセル

  • 2020/08/13 16:15

    動的Webプロジェクトで作ったプロジェクトなら、
    WebContent\WEB-INF\lib
    であっているはずなんですけどね。

    キャンセル

  • 2020/08/13 16:19

    色々とありがとうございます。
    なぜjarファイルが読み込まれていないか、根本的な原因がありそうなのでもう少し探ってみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る