実現したいこと
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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
>データベースを参照する箇所
ちなみに上記、どのタイミングで行っていますか?
また念のためschema.sqlの配置場所も記載いただきたく。
ご回答ありがとうございます。
追記を行いましたので、ご確認いただけると幸いです。
足りない箇所がありましたら申し訳ありません。
なるほど、
置き場所が違うとか、
参照しようとしているテーブルと作ろうとしてるテーブルの名前があってないとか
そのあたりを疑ったのですが、
src/main/resources配下にあって、テーブル名も一致してそうですね。
alwaysに指定しているから起動時に毎回実行するし、if not existsを入れているから毎回実行されても問題はないと。
念のためalwaysではなくEMBEDDED にしてみたらどうなりますか?
h2等の埋め込みDB使ってると挙動が違うのかもしれません。
ご回答とご指摘、ありがとうございます。
alwaysからembededに変更を行いましたが、エラーに変化はありませんでした。
また別の方にご教授いただいた方法で解決する事ができました。
m.ts10806様、この度はご尽力くださりありがとうございました。
バージョンは大事ですね。
次から分かりやすいように提示してもらえると解決も早いかもしれません。
ありがとうございます。
バージョンの大切さを知る良い機会になりました。
以後気を付けます。

回答1件
あなたの回答
tips
プレビュー