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

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

ただいまの
回答率

88.82%

SpringでJDBC経由でMySQLにアクセスするとHTTP500エラーとなってしまいます。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,685

usako

score 31

前提・実現したいこと

Eclipse,Springを使ってJAVAの勉強をしている初心者です。
元々、受講していた通信教育の課題がDBを使用しておらず、
内部にテーブルを保持している構造だったので、それを
MySQL,jDBCで外部化しようとしています。
ネット等で参考となるプログラムのコードを追記したのですが、
以下のようなエラーメッセージが発生しました。
諸先輩方、程度の低い質問かとは思いますが、何とぞご教授ください
ますよう、お願いいたします。

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

HTTPステータス 500 - Request processing failed; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: The server time zone value '���� (�W����)' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

type 例外レポート

メッセージ Request processing failed; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: The server time zone value '���� (�W����)' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

説明 The server encountered an internal error that prevented it from fulfilling this request.

例外 
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: The server time zone value '���� (�W����)' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

該当のソースコード

◆Controller.java
import java.util.List;
import java.util.Map;

/start */ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; /e n d*/

@Controller
@RequestMapping(value = "/book")
public class AddressBookController {
private static final String INIT   = "init";
private static final String REFER  = "refer";
private static final String UPDATE = "update";
private static final String LIST   = "list";
private static final String INIMSG = "従業員番号を入力してください";
private static final String REFMSG = "情報が取得できました";
private static final String UPDMSG = "情報を更新してください";
private static final String ERRMSG = "該当するデータはありません";

/start */ @Autowired private JdbcTemplate jdbcTemplate; /e n d*/

@RequestMapping(value = "/start")
public String init(AddressBookForm form, Model model) {
/start */ System.out.println("step1"); List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from unit02.addressbook"); model.addAttribute("data", list.get(0).get("name") ); /e n d*/
model.addAttribute("message", INIMSG);
return INIT;
}

@RequestMapping(params = "reference")
public String refer(AddressBookForm form, Model model) {
Employee employee = RecordManager.selectEmployee(form.getId());
if (employee != null) {
form.setName(employee.getName());
form.setPhone(employee.getPhone());
form.setAddress(employee.getAddress());
model.addAttribute("message", REFMSG);
return REFER;
} else {
model.addAttribute("message", ERRMSG);
return INIT;
}
}

@RequestMapping(params = "toInit")
public String toInit(AddressBookForm form, Model model) {
model.addAttribute("message", INIMSG);
return INIT;
}

@RequestMapping(params = "update")
public String update(AddressBookForm form, Model model) {
Employee employee = RecordManager.selectEmployee(form.getId());
if (employee != null) {
form.setName(employee.getName());
form.setPhone(employee.getPhone());
form.setAddress(employee.getAddress());
model.addAttribute("message", UPDMSG);
return UPDATE;
} else {
model.addAttribute("message", ERRMSG);
return INIT;
}
}

@RequestMapping(params = "reflection")
public String reflection(AddressBookForm form, Model model) {
Employee employee = new Employee(form.getId(), form.getName(), form.getPhone(), form.getAddress());
RecordManager.updateEmployee(employee);
model.addAttribute("message", INIMSG);
return INIT;
}

@RequestMapping(params = "list")
public String list(Model model) {
List<Employee> employeeList = RecordManager.getEmployeeList();
model.addAttribute("employeeList", employeeList);
model.addAttribute("employeeCount", employeeList.size());
return LIST;
}
◆init.jsp
<%@ page session="false" language="java"
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.time.LocalDate"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css"
href="/address/resources/css/common.css" />
<title>住所録(初期画面)</title>
</head>
<body>
<form:form modelAttribute="addressBookForm" action="/address/book">
<div class="header">
<span class="titleName">住所録</span>
<div class="date"><%=LocalDate.now()%></div>
</div>
<div class="main">
<div class="message">
<c:out value="${message}" />
</div>
<div>
<span class="itemName">従業員番号:</span>
<form:input path="id" size="31" />
</div>
</div>
<div class="footer">
<div>
<input type="submit" name="reference" value="参照" />
</div>
<div>
<input type="submit" name="update" value="更新" />
</div>
<div>
<input type="submit" name="list" value="一覧" />
</div>
</div>
<!-- start -->
<p>  DB's data is ${data}. </p>
<!-- end -->
</form:form>

</body>
</html>
◆pom.xlmに追記
<!-- start  -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- end -->

◆servlet-context.xlmに追記
<!-- start  -->
<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
<beans:property name="url" value="jdbc:mysql://127.0.0.1:3306/unit02" />
<beans:property name="username" value="root" />
<beans:property name="password" value="mippy333" />
</beans:bean>

<beans:bean class="org.springframework.jdbc.core.JdbcTemplate">
<beans:constructor-arg ref="dataSource" />
</beans:bean>
<!-- end -->

試したこと

MySQLのサービスは起動を確認しています。
MySQLのjdbcもeclipseのビルドパスに外部jarとして登録しました。

補足情報(FW/ツールのバージョンなど)

MySQL(jdbc) 8.0.16
Eclipse4.5 Mars Pleiades

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/05/22 10:26

    細かいですが「springs」ではなく「Spring」です。
    名前が決まっているものの表記はなるべく正確にすべきと思います。そこで間違えると話にならない場合があります。

    エラーやコードはマークダウンのcode機能を利用してご提示ください。
    https://teratail.com/help#about-markdown
    (※ファイルが別の場合はブロックはわけてください)

    キャンセル

  • usako

    2019/05/22 10:31

    ご指摘ありがとうございます。早速修正しました。

    キャンセル

  • m.ts10806

    2019/05/22 10:32

    投稿反映されていないようです。

    キャンセル

  • usako

    2019/05/22 10:42

    すみません、きちんと反映されているのを確認していませんでした。

    キャンセル

回答 1

checkベストアンサー

+1

https://blogs.yahoo.co.jp/dk521123/37507213.html

こちらの記事と同内容に見えるので、

解決案
 * 「serverTimezone」を指定する
  => 「serverTimezone=JST」みたいな。

をやってみるのはいかがでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/22 10:46

    ご教授いただいたように、sevlet-context.xmlに?serverTimezone=JSTを追記したらエラーが解消されました。
    本当いありがとうございました。

    キャンセル

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

  • ただいまの回答率 88.82%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る