javaサーブレットでMySQLとコネクションができないといわれてしまう.
tomcatを使ったwebアプリケーションの学習をしています.
MySQLでDBとtableを構築し,そのtableをjavaサーブレットを用いてブラウザのページに表示するアプリケーションegilabを書いています.
eclipseなどは用いておらず,すべてターミナル上で行っています.
しかし,プログラムを実行してブラウザで確認してみると,
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
と表示されてしまいます.
サーブレットの名前はEgilabListServlet.javaで,sqlとのやり取りにMySQL Connector/jを用いているので,javacする際は,
javac -cp /usr/tomcat9/lib/servlet-api.jar:/usr/tomcat9/lib/mysql-connector-java.jar EgilabListServlet.java
としています.
発生している問題・エラーメッセージ
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. java.lang.NullPointerException
二行目のエラーはsqlとやり取りができていないために出現するエラーだと思います.
該当のソースコード
EgilabListServlet.java
java
1import java.sql.*; 2import java.io.*; 3import javax.servlet.*; 4import javax.servlet.http.*; 5 6public class EgilabListServlet extends HttpServlet { 7 public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { 8 response.setContentType("text/html; charset=UTF-8"); 9 PrintWriter out = response.getWriter(); 10 out.println("<html><head>"+"<title>EgilabListServlet</title>"); 11 12 Connection con = null; 13 Statement st = null; 14 ResultSet rs = null; 15 String login = "root"; 16 String passwd = "MySQLのパスワード"; 17 try { 18 Class.forName("com.mysql.jdbc.Driver"); 19 String url = "jdbc:mysql://localhost/egilab_db" + "?useUnicode=true&characterEncoding=UTF-8" + "&autoReconnect=true"; 20 con = DriverManager.getConnection(url, login, passwd); 21 String sql = "SELECT * FROM egilab_tbl;"; 22 23 rs = st.executeQuery(sql); 24 out.println("<table border=\"1\"> "); 25 out.println("<tr><td>name</td>"+"<td>grade</td>"+"<td>group</td></tr>"); 26 27 while (rs.next()) { 28 out.println("<tr><td>" + rs.getString("name")); 29 out.println("</td><td>" + rs.getString("grade")); 30 out.println("</td><td>" + rs.getString("group") + "</td></tr>"); 31 } 32 out.println("</table>"); 33 } catch (Exception e) { 34 out.println("<p>" + e.toString() +"</p>"); 35 } finally { 36 try { 37 rs.close(); 38 st.close(); 39 con.close(); 40 } catch (Exception e) { 41 out.println("<p>" + e.toString() + "</p>"); 42 } 43 } 44 out.println("</body></html>"); 45 } 46}
ディレクトリの構成図は以下の通りです.
/
|
usr
|
tomcat9
|
webapp
|
egilab
|
WEB-INF
|
classes, web.xml
|
EgilabListServlet.java, EgilabListServlet.class
xmlファイルの問題ではないような気がしていますが,web.xmlのソースも以下に示します.
xml
1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE web-app 3PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 4"http://java.sun.com/dtd/web-app_2_3.dtd"> 5<web-app> 6 <servlet> 7 <servlet-name>egilab</servlet-name> 8 <servlet-class>EgilabListServlet</servlet-class> 9 </servlet> 10 <servlet-mapping> 11 <servlet-name>egilab</servlet-name> 12 <url-pattern>/servlet/EgilabListServlet</url-pattern> 13 </servlet-mapping> 14</web-app>
次にsqlの中身を記します
mysql> show databases; +--------------------+ | Database | +--------------------+ | egilab_db | | information_schema | | music_db | | mysql | | performance_schema | | sys | +--------------------+ 6 rows in set (0.00 sec)
今回使いたいのはegilab_dbのegilab_tblです
mysql> select * from egilab_tbl; +----------+-------+------------+--------+ | name | grade | group_name | number | +----------+-------+------------+--------+ | Taro | M2 | A | 1 | | Jiro | M1 | B | 2 | | Hanako | M1 | A | 3 | | Saburo | M1 | C | 4 | | Ichiro | | | 5 | +----------+-------+------------+--------+ 5 rows in set (0.01 sec)
試したこと
tomcatの再起動とMySQLの再起動は試したが変わらず.
urlの指定の部分か,DriverManager.getConnection のあたりで引っかかっていると思うのですが,わかりません.
補足情報(FW/ツールのバージョンなど)
mysql Ver 8.0.16 for Linux on x86_64
Server version: Apache Tomcat/8.5.40
OS:CentoOS7
###よろしくおねがいいたします
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。