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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

Q&A

解決済

2回答

1836閲覧

VPS上でデータベース(H2 Database)にアクセスできません。

kumaGoro_95

総合スコア1

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

0グッド

1クリップ

投稿2020/09/27 05:23

編集2020/09/27 08:51

前提

Eclipseで簡単なJavaアプリを作成し、VPS上にデプロイしたのですが、データベースにアクセスできず困っています。

具体的な症状としては
・ アカウント情報をDBに登録しているが、ログイン画面で、登録済みのID,パスワードを入力してもログインできない 
とった感じです。

EclipseのTomcatサーバーで実行した際は、問題なくデータベースにアクセスできていました。

環境

VPS
・さくらのVPS
・OS:CentOS Linux release 7.8.2003

JDK
・バージョン:1.8.0_262

Tomcat
・バージョン:apache-tomcat9.0.37

DB
・H2 Database
・URL(jdbc:h2:tcp://localhost/~/testJavaApp)

DAOクラスのコード

Java

1package dao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8 9import model.Account; 10import model.User; 11 12public class AccountDAO { 13 //データベース接続に使用する情報 14 private final String JDBC_URL = "jdbc:h2:tcp://localhost/~/testJavaApp"; 15 private final String DB_USER = "sa"; 16 private final String DB_PASS = ""; 17 18 public Account findByLogin(User user) { 19 Account account = null; 20 21 //データベースへ接続 22 try (Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS)) { 23 24 ~以下略~

接続を試みた時に表示されたエラー

catalina.out

1java.sql.SQLException: No suitable driver found for jdbc:h2:tcp://localhost/~/testJavaApp 2 at java.sql.DriverManager.getConnection(DriverManager.java:689) 3 at java.sql.DriverManager.getConnection(DriverManager.java:247) 4 at dao.AccountDAO.signupAccount(AccountDAO.java:55) 5 at model.SignupLogic.execute(SignupLogic.java:8) 6 at servlet.SignupServlet.doPost(SignupServlet.java:57) 7 at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) 8 at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) 9 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 10 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 11 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 12 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 13 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 14 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) 15 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 16 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) 17 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 18 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 19 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) 20 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) 21 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 22 at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:431) 23 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) 24 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) 25 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589) 26 at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 27 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 28 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 29 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 30 at java.lang.Thread.run(Thread.java:748) 31java.sql.SQLException: No suitable driver found for jdbc:h2:tcp://localhost/~/testJavaApp 32 at java.sql.DriverManager.getConnection(DriverManager.java:689) 33 at java.sql.DriverManager.getConnection(DriverManager.java:247) 34 at dao.AccountDAO.signupAccount(AccountDAO.java:55) 35 at model.SignupLogic.execute(SignupLogic.java:8) 36 at servlet.SignupServlet.doPost(SignupServlet.java:57) 37 at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) 38 at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) 39 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 40 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 41 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 42 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 43 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 44 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) 45 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 46 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) 47 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 48 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 49 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) 50 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) 51 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 52 at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:431) 53 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) 54 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) 55 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589) 56 at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 57 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 58 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 59 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 60 at java.lang.Thread.run(Thread.java:748) 61Caused by: java.net.ConnectException: Connection refused (Connection refused) 62 at java.net.PlainSocketImpl.socketConnect(Native Method) 63 at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 64 at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 65 at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 66 at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 67 at java.net.Socket.connect(Socket.java:607) 68 at org.h2.util.NetUtils.createSocket(NetUtils.java:103) 69 at org.h2.util.NetUtils.createSocket(NetUtils.java:83) 70 at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:115) 71 at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:431) 72 ... 33 more

やってみたこと

H2 Databaseのjarファイル「h2-1.4.199.jar」をtomcatのlibディレクトリに保存する。

コメント

今までQiitaの記事や動画等参考にしてがんばってみましたが、知識が圧倒的に不足しており、何が原因なのか判断できません。無い頭を振り絞り、「JDBC_URL」の「localhost」という部分が問題なのかと思い、色々いじってはみましたが、状況は全く好転せず・・・
設定を変更するたびにsystemctl restartしてはいますが、うまくいく気配が全くありません。
初心者のため質問に至らない点もあると思いますが、原因・解決策等ご教示いただければ幸いです。

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

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

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

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

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

guest

回答2

0

自己解決

H2Databaseの使用を諦め、MySQLを導入した結果エラーが解消されました。

投稿2020/09/30 13:03

kumaGoro_95

総合スコア1

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

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

0

H2Databaseの接続子を拝見したところ、

jdbc:h2:tcp://localhost/~/testJavaApp

ですので、H2のサーバモードで起動されていることが前提です。こちら起動済みでしょうか。

投稿2020/09/27 07:14

A-pZ

総合スコア12011

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

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

kumaGoro_95

2020/09/27 07:37

コメントありがとうございます。 H2は起動済みです。念のため、起動を確認してから再度チャレンジしてみましたが、挙動は変わりませんでした。
A-pZ

2020/09/27 08:00

DB接続した際に何もエラーは出ていない状態ですか?
kumaGoro_95

2020/09/27 08:50

すみません、今tomcatのエラーログを確認したところ、エラー表示がありました! 他のエラー文と勘違いし、見落としていました。 こちらのエラー文が表示されていました。 下記については質問本文にも追記致します。 ----------------------------- java.sql.SQLException: No suitable driver found for jdbc:h2:tcp://localhost/~/testJavaApp at java.sql.DriverManager.getConnection(DriverManager.java:689) at java.sql.DriverManager.getConnection(DriverManager.java:247) at dao.AccountDAO.signupAccount(AccountDAO.java:55) at model.SignupLogic.execute(SignupLogic.java:8) at servlet.SignupServlet.doPost(SignupServlet.java:57) at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) 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 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.ajp.AjpProcessor.service(AjpProcessor.java:431) 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:1589) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) java.sql.SQLException: No suitable driver found for jdbc:h2:tcp://localhost/~/testJavaApp at java.sql.DriverManager.getConnection(DriverManager.java:689) at java.sql.DriverManager.getConnection(DriverManager.java:247) at dao.AccountDAO.signupAccount(AccountDAO.java:55) at model.SignupLogic.execute(SignupLogic.java:8) at servlet.SignupServlet.doPost(SignupServlet.java:57) at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) 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 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.ajp.AjpProcessor.service(AjpProcessor.java:431) 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:1589) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:607) at org.h2.util.NetUtils.createSocket(NetUtils.java:103) at org.h2.util.NetUtils.createSocket(NetUtils.java:83) at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:115) at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:431) ... 33 more
A-pZ

2020/09/27 09:53

h2用のjdbcドライバ(h2-1.4.199.jar)を tomcat/libディレクトリへ格納した後、Tomcatの再起動はされましたでしょうか。H2用に配置しているjarファイルはそれで問題ないかと思います。
kumaGoro_95

2020/09/27 12:35

色々ご指摘くださってありがとうございます。何か変更を加える度に再起動はしてありますが、中々難しいですね。エラー文から察するに、サーブレットからDBが認識されていないということだと思うのですが・・・
A-pZ

2020/09/27 13:21

サーブレットからJDBCドライバを使って接続した際に、ドライバが正しく設定されていないときに出る例外です。 Tomcatのlibに配置してダメで、もしTomcatへ搭載するWebアプリケーションのWEB-INF/libに入れてみても動作しないかを確認してください。
kumaGoro_95

2020/09/30 13:02

返信が遅くなり申し訳ありません。Tomcat,WebアプリのWEB-INF/libへの配置、どちらも試してみたのですが、うまくいきませんでした。色々調べてみたのですが、H2 Databaseをローカルで操作しているのに対し、Webアプリ自体はVPSに配置しているため、JDBCのURLはlocalhostではなく、PCのIPアドレスで設定するべきであることがわかりました。 URL部分を変更して色々試していく内に、エラー文が変わるなど挙動の変化は見られたのですが、エラー解消には至りませんでした。 結果的に、H2Databaseの使用を諦め、MySQLを導入して解決しました。 色々とご教示いただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問