サーバではDBに接続不可?
- 評価
- クリップ 0
- VIEW 317
前提・実現したいこと
EclipseのTomcatサーバーでMySQLDBに接続できません。
発生している問題・エラーメッセージ
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
該当のソースコード
ソースコードは正常であると思われます。
Javaファイルで、【MySQL接続用のコード】を
public static void main(String[] args)
にいれて、Javaで実行すれば、正常にDBの内容が表示されます。
st.executeQuery("select * from country");
しかしながら、「サーバで実行」すると、エラーメッセージになります。
サーバで実行の場合、
public void doGet (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
の中が実行されるものと理解しています。この中にも、上記と全く同じ【MySQL接続用のコード】を入れています。
おそらく、サーバ側(Tomcat)の問題であると思われますが、どうしていいのかわかりません。
Eclipse 4とEclipse 3どちらでやっても同じです。
なにか設定で見落としているところがあるのでしょうか?
package test3;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test33 extends HttpServlet {
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/world","root","root");
Statement st = conn.createStatement();
ResultSet rs =
st.executeQuery("select * from country");
while(rs.next()) {
String id = rs.getString(1);
String location = rs.getString(2);
String tid = rs.getString(3);
String time = rs.getString(4);
System.out.println
("ABBREVIATION:"+id+" FULLNAME:"+location+" REGION:"+tid+" SUBREGION:"+time);
}
rs.close();
st.close();
conn.close();
System.exit(0);
} catch (ClassNotFoundException e) {
System.out.println("ドライバを読み込めませんでした "+ e);
} catch (SQLException e) {
System.out.println("データベース接続エラー"+ e);
}
}
public void doGet (HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<head>");
writer.println("<title>Sample Application Servlet Page</title>");
writer.println("</head>");
writer.println("<body bgcolor=white>");
writer.println("<table border=\"0\">");
writer.println("<tr>");
writer.println("<td>");
writer.println("<img src=\"images/tomcat.gif\">");
writer.println("</td>");
writer.println("<td>");
writer.println("<h1>Sample Application Servlet</h1>");
writer.println("This is the output of a servlet that is part of");
writer.println("the Hello, World application.ssss");
writer.println("</td>");
writer.println("</tr>");
writer.println("</table>");
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/world","root","root");
Statement st = conn.createStatement();
ResultSet rs =
st.executeQuery("select * from country");
while(rs.next()) {
String id = rs.getString(1);
String location = rs.getString(2);
String tid = rs.getString(3);
String time = rs.getString(4);
System.out.println
("ABBREVIATION:"+id+" FULLNAME:"+location+" REGION:"+tid+" SUBREGION:"+time);
}
rs.close();
st.close();
conn.close();
System.exit(0);
} catch (ClassNotFoundException e) {
System.out.println("ドライバを読み込めませんでした "+ e);
} catch (SQLException e) {
System.out.println("データベース接続エラー"+ e);
}
}
public void doPost (HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
}
}
試したこと
JAVAアプリケーションで実行した場合、コンソールに下記のように出ますので、public static void main(String[] args) は正常であると思われます。
ABBREVIATION:VAT FULLNAME:Holy See (Vatican City State) REGION:Europe SUBREGION:Southern Europe
ABBREVIATION:VCT FULLNAME:Saint Vincent and the Grenadines REGION:North America SUBREGION:Caribbean
ABBREVIATION:VEN FULLNAME:Venezuela REGION:South America SUBREGION:South America
ABBREVIATION:VGB FULLNAME:Virgin Islands, British REGION:North America SUBREGION:Caribbean
ABBREVIATION:VIR FULLNAME:Virgin Islands, U.S. REGION:North America SUBREGION:Caribbean
ABBREVIATION:VNM FULLNAME:Vietnam REGION:Asia SUBREGION:Southeast Asia
ABBREVIATION:VUT FULLNAME:Vanuatu REGION:Oceania SUBREGION:Melanesia
ABBREVIATION:WLF FULLNAME:Wallis and Futuna REGION:Oceania SUBREGION:Polynesia
ABBREVIATION:WSM FULLNAME:Samoa REGION:Oceania SUBREGION:Polynesia
ABBREVIATION:YEM FULLNAME:Yemen REGION:Asia SUBREGION:Middle East
ABBREVIATION:YUG FULLNAME:Yugoslavia REGION:Europe SUBREGION:Southern Europe
ABBREVIATION:ZAF FULLNAME:South Africa REGION:Africa SUBREGION:Southern Africa
ABBREVIATION:ZMB FULLNAME:Zambia REGION:Africa SUBREGION:Eastern Africa
ABBREVIATION:ZWE FULLNAME:Zimbabwe REGION:Africa SUBREGION:Eastern Africa
次に、Tomcatサーバで実行した場合、public void doGet (HttpServletRequest request, HttpServletResponse response)が実行されると思いますし、実際にWebページはwriter.printlnで出力したHTMLが表示されるのですが、その後にあるDBの中身の結果は表示されず、
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
とコンソールに出てしまいます。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
$CATALINA_HOME/commom/lib/にmysql-connector-java-<Version>-bin.jarをコピーして下さい。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
ソースコードは正常であると思われます。
接続とSELECTを実行できる最低限の設定やコードを載せてもらわないとエスパーきぼんぬになります。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
とりあえず
環境変数 CLASS_PATH は Tomcat は読み込みません。
また
JDBC 4.0(10年程前リリース)では Class.forName は自動化されていて必要ありません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
JDBCドライバーは配置されていますか?
Tomcatプラグインをお使いの場合は、プロジェクト内のWEB-INF/libディレクトリーにJDBCドライバーのJARファイルをコピーして、右クリック→【ビルド・パス】→【ビルド・パスに追加】を実行します。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 90.34%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2018/04/24 11:21