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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

1266閲覧

データベースをH2 DatabaseからMySQに変更したいがうまくいかない

ronboo

総合スコア13

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2022/12/27 13:48

編集2023/01/04 22:12

前提

Spring bootを利用して簡単なアンケート入力アプリを作成しました。
当初このアプリのデータベースはH2 Databaseを利用していたのですが、これをMySQLに変更したいと思い、コードを修正しているのですがうまくいきません。

実現したいこと

このアプリには入力したアンケート一覧を表示する機能があるのですが、
データベースをMySQLに変更してから
この機能を実行するURLをブラウザに打つと次のエラーが表示されます。
(H2 Databaseを利用している際は問題なく動作していました。)
このエラーを解決したいです。

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

Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Tue Dec 27 22:19:12 JST 2022 There was an unexpected error (type=Internal Server Error, status=500). class java.time.LocalDateTime cannot be cast to class java.sql.Timestamp (java.time.LocalDateTime is in module java.base of loader 'bootstrap'; java.sql.Timestamp is in module java.sql of loader 'platform') java.lang.ClassCastException: class java.time.LocalDateTime cannot be cast to class java.sql.Timestamp (java.time.LocalDateTime is in module java.base of loader 'bootstrap'; java.sql.Timestamp is in module java.sql of loader 'platform') at com.example.demo.dao.SurveyDaoImpl.getAll(SurveyDaoImpl.java:40) at com.example.demo.dao.SurveyDaoImpl$$FastClassBySpringCGLIB$$cb637662.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) at com.example.demo.dao.SurveyDaoImpl$$EnhancerBySpringCGLIB$$26335129.getAll(<generated>) at com.example.demo.service.SurveyServiceImpl.getAll(SurveyServiceImpl.java:29) at com.example.demo.app.survey.SurveyController.index(SurveyController.java:31) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:670) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:779) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

該当のソースコード

package com.example.demo.dao; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import com.example.demo.entity.Survey; @Repository public class SurveyDaoImpl implements SurveyDao { @Autowired JdbcTemplate jdbcTemplate; @Override public void insertSurvey(Survey survey) { jdbcTemplate.update("INSERT INTO survey(age, satisfaction, comment, created) VALUES(?,?,?,?)", survey.getAge(), survey.getSatisfaction(), survey.getComment(), survey.getCreated()); } @Override public List<Survey> getAll() { String sql = "SELECT id, age, satisfaction, comment, created FROM survey"; List<Map<String, Object>> resultList = jdbcTemplate.queryForList(sql); List<Survey> list = new ArrayList<Survey>(); for(Map<String, Object> result : resultList) { Survey survey = new Survey(); survey.setId((int)result.get("id")); survey.setAge((int)result.get("age")); survey.setSatisfaction((int)result.get("satisfaction")); survey.setComment((String)result.get("comment")); survey.setCreated(((Timestamp) result.get("created")).toLocalDateTime()); list.add(survey); } return list; } }

試したこと

・エラーメッセージからして、コード40行目のLocalDateTimeとTimestampのキャストがうまくいっていないことが原因だと思っていますが、どうれば改善するかは調べても見つけることができませんでした。
・MySQL側から確認する限り、アンケートの入力はデータベースに反映されているので、MySQLとの接続は問題ないと考えています。

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

Eclipse:バージョン2019-12 (4.14.0)
java:バージョン11
MySQL:バージョン8.0.28

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

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

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

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

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

ronboo

2022/12/27 13:50

ソースコードがどうしても枠内に入らなかったので、枠からはみ出している部分があります。申し訳ございません。
jimbe

2022/12/27 14:40

「```」の行でコードの前後を囲むだけですので、入らないということはありません。 書き込み限界を超えてしまってということであれば、どこかのネットストレージを利用してその URL を貼る等してください。 (エラーメッセージもコードのマークダウンで囲った方が良いと思います。)
y_waiwai

2022/12/27 22:40

このままではコードが読みづらいので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
ronboo

2022/12/27 23:13

すいません、「```」でコードの冒頭と文末を囲ったのですが、どうも何かを間違えているようです。また帰宅したら試してみます。
ronboo

2022/12/28 03:39

コードの表示について訂正できました。お手数をおかけしました。 また、エラーの方も何かアドバイスいただけるようであればお願いできればと思います。
guest

回答1

0

ベストアンサー

class java.time.LocalDateTime cannot be cast to class java.sql.Timestamp

このエラーメッセージは、LocalDateTime を、Timestamp にキャストできない、という意味です。

該当コードは、 (Timestamp) result.get("created") になりますので、result.get("created")の型をご確認ください。
java.time.LocalDateTime になっているはずです。

改善方法は、取得される値が目的の型なのですから、キャストも、toLocalDateTime() もしない、になります。

投稿2022/12/28 07:18

YT0014

総合スコア1708

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

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

ronboo

2023/01/03 00:43

ご指摘ありがとうございます。 上記コードの40行目を「survey.setCreated( result.get("created"));」としてみたのですが、 エラーで「型Surveyのメソッド setCreated(LocalDateTime)は引数(Object)に適用できません」となりました。 また、このコードの教材を見返してみたのですが、result.get("created")の型はMap<String, Object>ということでString型と Object型が混合した状態であるためにTimestamp型へのキャストが必要のようです。 私も十分に理解できておらず申し訳ないのですが、どのようにしたらいいかわかるでしょうか?
YT0014

2023/01/03 01:44

Mapの型を失念しておりました。すみません。 その場合、素直にLocalDateTimeでキャストしてください。 survey.setCreated((LocalDateTime) result.get("created")); ・関数の返り型は、Object ・実際に返されるのは、H2の場合はTimestampだったが、MySQLではLocalDateTimeに変わった ということです。
ronboo

2023/01/04 13:12

その方法で解決しました! ご丁寧に教えていただきありがとうございました。 大変助かりましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問