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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Spring Boot

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

Q&A

解決済

1回答

1626閲覧

spring bootでschema.sqlが作動しない

ito_234

総合スコア2

Spring Boot

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

0グッド

0クリップ

投稿2022/09/11 04:00

編集2022/09/11 04:37

実現したいこと

shema.sqlが動くようにする

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

org.h2.jdbc.JdbcSQLSyntaxErrorException: テーブル "TASKLIST" が見つかりません Table "TASKLIST" not found; SQL statement: select * from tasklist [42102-214]

該当のソースコード

application.properties

properties

1spring.datasource.driver-class-name=org.h2.Driver 2spring.datasource.url=jdbc:h2:~/taskdb 3spring.datasource.username=gihyo 4spring.datasource.password=gihyodb 5spring.datasource.initialization-mode=always 6spring.h2.console.enabled=true

schema.sql

sql

1create table if not exists tasklist( 2id varchar(8) primary key, 3task varchar(256), 4deadline varchar(10), 5done BOOLEAN 6);

試したこと

データベースを参照する箇所を外した結果、問題なくページが開けました。
エラーの内容は/listの際にエラーが出てしまいページが表示されないといったものです。

外した箇所は以下3行目です。

java

1 @GetMapping("/list") 2 String listItems(Model model) { 3 List<TaskItem> taskItem=dao.findAll(); 4 model.addAttribute("taskList", taskItems); 5 return "home"; 6 } 

「dao.findAll();」については以下の通りです。

java

1 public List<TaskItem> findAll(){ 2 String query ="select * from tasklist"; 3 4 List<Map<String,Object>> result = jdbcTemplate.queryForList(query); 5 List<TaskItem>taskItems =result.stream() 6 .map((Map<String,Object>row)-> new TaskItem( 7 row.get("id").toString(), 8 row.get("task").toString(), 9 row.get("deadline").toString(), 10 (Boolean)row.get("done"))) 11 .toList(); 12 13 return taskItems;

→データベース周辺の問題である可能性が高い事が分かりました

「spring.datasource.schema=classpath:schema.sql」を追記しました
→エラーに変化はありませんでした

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

当該sqlファイルの場所は以下の通りです。
イメージ説明

ここにより詳細な情報を記載してください。

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

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

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

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

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

m.ts10806

2022/09/11 04:22

>データベースを参照する箇所 ちなみに上記、どのタイミングで行っていますか? また念のためschema.sqlの配置場所も記載いただきたく。
ito_234

2022/09/11 04:35

ご回答ありがとうございます。 追記を行いましたので、ご確認いただけると幸いです。 足りない箇所がありましたら申し訳ありません。
m.ts10806

2022/09/11 04:45

なるほど、 置き場所が違うとか、 参照しようとしているテーブルと作ろうとしてるテーブルの名前があってないとか そのあたりを疑ったのですが、 src/main/resources配下にあって、テーブル名も一致してそうですね。 alwaysに指定しているから起動時に毎回実行するし、if not existsを入れているから毎回実行されても問題はないと。 念のためalwaysではなくEMBEDDED にしてみたらどうなりますか? h2等の埋め込みDB使ってると挙動が違うのかもしれません。
ito_234

2022/09/11 17:03 編集

ご回答とご指摘、ありがとうございます。 alwaysからembededに変更を行いましたが、エラーに変化はありませんでした。 また別の方にご教授いただいた方法で解決する事ができました。 m.ts10806様、この度はご尽力くださりありがとうございました。
m.ts10806

2022/09/11 21:12

バージョンは大事ですね。 次から分かりやすいように提示してもらえると解決も早いかもしれません。
ito_234

2022/09/11 22:06

ありがとうございます。 バージョンの大切さを知る良い機会になりました。 以後気を付けます。
guest

回答1

0

ベストアンサー

ご利用のバージョンは、Spring Boot 2.7でしょうか?
Spring Boot 2.7だと、initialization-mode ⇒ init.modeに変わっているので、以下をお試しください。

# 以下はSpring Boot 2.5から非推奨 ⇒ Spring Boot 2.7で削除されました #spring.datasource.initialization-mode=always # Spring Boot 2.5からの書き方は、こちらです spring.sql.init.mode=always

投稿2022/09/11 08:38

編集2022/09/11 08:53
KT001

総合スコア618

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

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

ito_234

2022/09/11 17:05

KT001様 ご教授くださった方法を試したところ、エラーが解消し問題なく動くようになりました! この度はご対応くださり誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問