前提・実現したいこと
Eclipseとmysqlを接続したいのですが、JDBCを読み込む所でエラーが出てしまいます。
EclipseのDBViwerとmysqlは接続できています。(DBViwerからsql文を送信してmysqlにはんえいされていました。)
このような質問が何度かされており、対策法も試したのですが上手くいきません。
よろしくお願いいたします。
発生している問題・エラーメッセージ
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=JST at java.sql.DriverManager.getConnection(DriverManager.java:689) at java.sql.DriverManager.getConnection(DriverManager.java:247) at todo.controller.ShowServlet.doGet(ShowServlet.java:44) at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) 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:52) 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:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471) 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)
該当のソースコード
package todo.controller; import java.io.*; import java.sql.*; import java.util.ArrayList; import java.util.HashMap; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ShowServlet */ @WebServlet("/ShowServlet") public class ShowServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ShowServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub /*DB処理*/ try { // Class.forName("com.mysql.jdbc.Driver"); String URL = "jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=JST"; String USERNAME = "text"; String PASSWORD = "test"; Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); Statement statement = connection.createStatement(); /*DBにformからの値を保存するsql*/ String select_memo = "SELECT * FROM memo_data"; /*HashMapを要素としたArrayListを定義する(キーで取り出せるが順番はArraylistのルール?みたいな*/ ArrayList<HashMap<String, String>> record_list = new ArrayList<HashMap<String,String>>(); /*executeQuery()の結果は、そのままだとConnectionのクローズ後では使用できないので、 受け渡し用の変数を作成しその中へレコード情報をコピーする。*/ ResultSet result = statement.executeQuery(select_memo); /* * next()を使う理由 * カーソルを現在の位置から 1 行下に移動します。ResultSet のカーソルは、初 期状態では最初の行の前に位置付けられています。メソッド next の最初の呼び 出しによって、最初の行が現在の行になります。2 番目の呼び出しによって 2 行目が現在の行になり、以降同様に続きます。 */ while (result.next()) { //<String, Integer> というのは,Stringを目印にしてIntegerを記録すると言う意味 HashMap<String, String> record = new HashMap<String, String>(); //配列にキー(ここでいう"title"と値(result.getString("title"))を入れる) record.put("id",result.getString("id")); record.put("title", result.getString("title")); record.put("memo", result.getString("memo")); record.put("create_date", result.getString("create_date")); //配列に上記のsqlから持ってきたものを入れていく。 record_list.add(record); } //System.out.println(record_list); /*手順 * recordという連想配列(HashMap)を作る。 * その連想配列に、record.putでキーと値を入れていく。 * 入れ終わったら連想配列のrecord_listにrecordを入れる。 * それをjspに移動させる。 */ request.setAttribute("record_list", record_list); /*--*/ } catch (SQLException e) { e.printStackTrace(); } String view = "/WEB-INF/view/index.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(view); dispatcher.forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
試したこと
DBViwerとmysqlがちゃんとつながっているか。(接続確認済み)
Class.forName("com.mysql.jdbc.Driver");を追加するとできるとの回答があったためtryの中に記述しましたが上手くいかず
補足情報(FW/ツールのバージョンなど)
eclipse 2018
tomcat 8
java 8
mysql
DBViwerに入れたjarファイル名:mysql-connector-java-8.0.17.jar
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。