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

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

新規登録して質問してみよう
ただいま回答率
85.35%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

1回答

8453閲覧

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

koume2

総合スコア0

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

2クリップ

投稿2020/08/12 15:41

編集2020/08/13 01:29

前提・実現したいこと

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

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

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

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

該当のソースコード

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

Java

1package Action; 2import dao.study_test_dao; 3 4public class PositionMasterSerach { 5 public void Select() { 6 7 //検索用 DAO宣言 8 study_test_dao study_test = new study_test_dao(); 9 study_test.main(); 10 11 return ; 12 } 13}

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

Java

1package dao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.ResultSet; 6import java.sql.SQLException; 7import java.sql.Statement; 8public class study_test_dao { 9 10 public static void main(String[] args) { 11 12 Connection conn = null; 13 14 try { 15 String url = "jdbc:sqlserver://localhost\SQLEXPRESS;database=study"; 16   String user = "test"; 17 String pass = "test"; 18 19 try { 20 // JDBCドライバをロード 21 // SQL Serverに接続 22 Connection con = DriverManager.getConnection(url, user, pass); 23 con.close(); 24 } catch (Exception e) { 25 // その他の例外 26 e.printStackTrace(); 27 } 28 } finally { 29 try { 30 if (conn != null && !conn.isClosed()) { 31 conn.close(); 32 } 33 } catch (SQLException ex) { 34 ex.printStackTrace(); 35 } 36 } 37 } 38}

試したこと

①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アプリケーション」で実行すると接続できます。ただ、サーブレットから「実行→サーバで実行」をすると上記のエラーとなります。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

javahack

2020/08/13 00:05

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

2020/08/13 01:31

コメントありがとうございます。 javaコードを囲みました。 study_test_daoは接続テストのためにmain()を書いています。 Servletから呼び出す際も同様のまま試しています。
javahack

2020/08/13 01:48

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

2020/08/13 04:24

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

回答1

0

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

java

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

投稿2020/08/13 03:40

編集2020/08/13 03:44
yureighost

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koume2

2020/08/13 04:28 編集

検索した際に、JAVAのバージョンによってはConnection時に設定してくれると読んで、抜いていました。 下記文面を追加しましたが、依然と実行時にエラーとなります。 ``` // JDBCドライバをロード Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); ```
yureighost

2020/08/13 04:37

エラー内容はどうなっています。 この文でエラーが出るのはJDBCドライバのjarファイルがインポートできていない可能性が高いと思われるのですが。
koume2

2020/08/13 05:03

現状、下記のエラーが出ています。 重大: パス[/study]を持つコンテキスト内のサーブレット[action.PositionMastarAction]のServlet.service() が例外[サーブレットの実行により例外を投げました]が根本的要因と共に投げられました。 [木 8月 13 14:00:29 JST 2020]
koume2

2020/08/13 05:46 編集

例外処理を追加して、エラー内容を確認しました。 エラー内容は下記となります。 java.lang.NoClassDefFoundError: java/sql/Driver at java.base/java.lang.ClassLoader.findBootstrapClass(Native Method) at java.base/java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:1258) at java.base/java.lang.System$2.findBootstrapClassOrNull(System.java:2131) at java.base/jdk.internal.loader.ClassLoaders$BootClassLoader.loadClassOrNull(ClassLoaders.java:118) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:616) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:315) at dao.study_test_dao.main(study_test_dao.java:17) at action.PositionMasterSerach.Select(PositionMasterSerach.java:10) at action.PositionMastarAction.doPost(PositionMastarAction.java:51) at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at filter.EncodingFilter.doFilter(EncodingFilter.java:44) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:834)
yureighost

2020/08/13 06:18

NoClassDefFoundErrorなのでやはりJDBCドライバのjarが読み込めていませんね。 JAVAアプリケーションとしての実行では接続できて、ということは、 TOMCAT実行での設定が正しくできていないと思われます。
koume2

2020/08/13 06: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
yureighost

2020/08/13 07:15

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

2020/08/13 07:19

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問