SQLの文法エラー
解決したいこと
以下を参考にしながら日記アプリを作成していますが、エラーが発生しページを表示することができません。
解決方法を教えて下さい。
発生している問題・エラー
2022-12-15T14:58:07.975+09:00 ERROR 75049 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [ SELECT d.id, d.category, d.title, d.content, TO_CHAR(d.date, 'YYYY/MM/DD') AS date, d.update_datetime, c.name FROM diary AS d INNER JOIN code AS c ON d.category = c.cd WHERE c.group_cd = '01']] with root cause
java.sql.SQLSyntaxErrorException: Table 'diary.code' doesn't exist
該当するソースコード
package diary.repository;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
import diary.entity.Diary;
import diary.form.diary.GetForm;
@Repository
public class DiaryDao implements IDiaryDao {
private final NamedParameterJdbcTemplate jdbcTemplate;
@Autowired
public DiaryDao(NamedParameterJdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public List<Diary> findList(GetForm form) {
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.append(" SELECT d.id, d.category, d.title, d.content, TO_CHAR(d.date, 'YYYY/MM/DD') AS date, d.update_datetime, c.name"
+ " FROM diary AS d INNER JOIN code AS c ON d.category = c.cd"
+ " WHERE c.group_cd = '01'");
// パラメータ設定用Map
Map<String, String> param = new HashMap<>();
// パラメータが存在した場合、where句にセット
if(form.getCategory() != null && form.getCategory() != "") {
sqlBuilder.append(" AND c.cd = :cd");
param.put("cd", form.getCategory());
}
if(form.getDate() != null && form.getDate() != "") {
sqlBuilder.append(" AND TO_CHAR(d.date, 'YYYY/MM') = :date");
param.put("date", form.getDate());
}
String sql = sqlBuilder.toString();
//タスク一覧をMapのListで取得
List<Map<String, Object>> resultList = jdbcTemplate.queryForList(sql, param);
//return用の空のListを用意
List<Diary> list = new ArrayList<Diary>();
//データをDiaryにまとめる
for(Map<String, Object> result : resultList) {
Diary diary = new Diary();
diary.setId((int)result.get("id"));
diary.setCategory((String)result.get("category"));
diary.setTitle((String)result.get("title"));
diary.setContent((String)result.get("content"));
diary.setDate((String)result.get("date"));
diary.setUpdate_datetime((Timestamp)result.get("update_datetime"));
diary.setName((String)result.get("name"));
list.add(diary);
}
return list;
}
}
テーブル
CREATE TABLE IF NOT EXISTS diary(
id serial,
category varchar(2),
title varchar(50) NOT NULL,
content text,
date date NOT NULL,
update_datetime timestamp,
PRIMARY KEY(id)
);
CREATE TABLE IF NOT EXISTS category_code(
id serial,
group_cd varchar(2),
cd varchar(2),
name varchar(20),
PRIMARY KEY(id)
);
CREATE TABLE IF NOT EXISTS users(
id serial,
user_id varchar(10) NOT NULL,
password varchar(60) NOT NULL,
username varchar(50),
PRIMARY KEY(id)
);
エラー文を見るとsqlの文法エラーが原因であると思うのですが何が悪いのかわからず手詰まっております。
0 likes