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

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

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

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

解決済

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

ito_234
ito_234

総合スコア2

Spring Boot

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

1回答

0リアクション

0クリップ

288閲覧

投稿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

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

schema.sql

sql

create table if not exists tasklist( id varchar(8) primary key, task varchar(256), deadline varchar(10), done BOOLEAN );

試したこと

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

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

java

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

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

java

public List<TaskItem> findAll(){ String query ="select * from tasklist"; List<Map<String,Object>> result = jdbcTemplate.queryForList(query); List<TaskItem>taskItems =result.stream() .map((Map<String,Object>row)-> new TaskItem( row.get("id").toString(), row.get("task").toString(), row.get("deadline").toString(), (Boolean)row.get("done"))) .toList(); return taskItems;

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

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

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

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

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

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

適切な質問に修正を依頼しましょう。

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

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

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Spring Boot

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