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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

1回答

3859閲覧

SQLSyntaxErrorException: Table doesn't exist テーブルが存在しない

goriwo

総合スコア17

Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/05/08 03:36

編集2021/05/08 03:50

前提・実現したいこと

イメージ説明
商品情報を登録を押してDBに保存してform画面に戻りたいのですががテーブルがないとなります

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

There was an unexpected error (type=Internal Server Error, status=500). could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement Caused by: java.sql.SQLSyntaxErrorException: Table 'demo.inquiry2' doesn't exist at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040) at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1347) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025) at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197) ... 108 more

該当のソースコード

package com.example.demo.form; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import lombok.Data; @Data @Entity @Table(name = "inquiry2") public class InquiryForm2 implements Serializable { private static final long serialVersionUID = -6647247658748349084L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @NotBlank @Size(max = 10) private String commodity; @NotNull private Integer price; @NotBlank @Size(max = 400) private String information; public void clear() { commodity = null; price = null; information = null; } }
<!doctype html> <html xmlns:th="http://www.thymeleaf.org" lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>ポートフォリオサイト</title> <link rel="stylesheet" media="all" th:href="@{/css/ress.min.css}" /> <link rel="stylesheet" media="all" th:href="@{/css/style.css}" /> <script th:src="@{/js/jquery-2.1.4.min.js}"></script> <script th:src="@{/js/style.js}"></script> <!-- Favicon --> <link rel="icon" type="image/png" th:href="@{/img/favicon.png}"> </head> <body> <header> <div class="container"> <div class="row"> <div class="col span-12"> <div class="head"> <h1> <a th:href="@{/}">PORTFOLIO</a> </h1> </div> </div> </div> <div class="row"> <div class="col span-12"> <nav> <div id="open"> <img th:src="@{/img/button.png}"> </div> <div id="close"> <img th:src="@{/img/button2.png}"> </div> <div id="navi"> <ul> <li><a th:href="@{/}">ホーム</a></li> <li><a th:href="@{/form}">お問い合わせ</a></li> <li><a th:href="@{/form2}">商品登録</a></li> </ul> </div> </nav> </div> </div> </div> </header> <div class="mainimg"> <img th:src="@{/img/subimg.jpg}" alt="お問い合わせ画像"> </div> <main> <article> <div class="container"> <div class="row"> <div class="col span-12"> <div class="breadcrumb"> <ul> <li><a th:href="@{/demo}">ホーム</a> > 商品登録</li> </ul> </div> <th:block th:if="message != null"> <h2 th:class="msg" th:text="${message}"></h2> </th:block> <h2 class="underline">商品情報</h2> <form th:action="@{/form2}" th:object="${inquiryForm2}" method="post"> <p> <label for="name">商品名</label> <input class="full-width" type="text" id="commodity" name="commodity" maxlength="10" th:field="*{commodity}"> <span th:if="${#fields.hasErrors('commodity')}" th:errors="*{commodity}" th:class="msg"></span> </p> <p> <label for="email">値段</label> <input class="full-width" type="text" id="price" name="price" th:field="*{price}"><span th:if="${#fields.hasErrors('price')}" th:errors="*{price}" th:class="msg"></span> </p> <p> <label for="message">商品情報</label> <textarea class="full-width" id="information" name="information" th:field="*{information}"></textarea> <span th:if="${#fields.hasErrors('information')}" th:errors="*{information}" th:class="msg"></span> </p> <p> <input class="button" type="submit" value="登録"> </p> </form> </div> </div> </div> </article> </main> <footer> <div class="container"> <div class="row"> <div class="col span-12"> <h5>お知らせ</h5> <p>電話での問合せは承っておりません。</p> <p>回答にお時間頂くことがございます。予めご了承ください。</p> </div> </div> </div> </footer> <p id="pagetop"> <a href="#">TOP</a> </p> </body> </html>
package com.example.demo.repositries; import java.util.List; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.example.demo.form.InquiryForm2; @Repository public interface InquiryRepository2 extends JpaRepository<InquiryForm2, String> { Optional<InquiryForm2> findById(String id); List<InquiryForm2> findAll(); }
CREATE TABLE IF NOT EXISTS inquiry2( id INT PRIMARY KEY, commodity VARCHAR(50), price INT, information VARCHAR(50) );
package com.example.demo.controllers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import com.example.demo.form.InquiryForm; import com.example.demo.form.InquiryForm2; import com.example.demo.repositries.InquiryRepository; import com.example.demo.repositries.InquiryRepository2; @Controller @RequestMapping("/") public class RootController { @Autowired InquiryRepository repository; @GetMapping public String index() { return "root/index"; } @GetMapping("/form") public String form(InquiryForm inquiryForm) { return "root/form"; } @PostMapping("/form") public String form(@Validated InquiryForm inquiryForm, BindingResult bindingResult, Model model) { if (bindingResult.hasErrors()) { return "root/form"; } // RDBと連携できることを確認しておきます。 repository.saveAndFlush(inquiryForm); inquiryForm.clear(); model.addAttribute("message", "お問い合わせを受け付けました。"); return "root/form"; } @Autowired InquiryRepository2 repository2; @GetMapping("/form2") public String form2(InquiryForm2 inquiryForm2) { return "root/form2"; } @PostMapping("/form2") //@Validated バリデーションが実行 //BindingResult エラーを格納する public String form2(@Validated InquiryForm2 inquiryForm2, BindingResult bindingResult2, Model model2) { if (bindingResult2.hasErrors()) { return "root/form2"; } // repository2.saveAndFlush(inquiryForm2); inquiryForm2.clear(); model2.addAttribute("message", "商品登録が完了しました"); return "root/form2"; } }

@Entityで自動でテーブルが作られるを思ったのですが作れてないのでSQL文を書きました
@Entityここでつくれてない時点でおかしいのでしょうか?

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

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

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

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

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

guest

回答1

0

マイグレーションでも書いて実行してない限りは「既に作られているDB、テーブル」に対してプログラムを書くことになります。
結局「エラーの通り、ないものはない」のですから、手動で作れば良いのでは。

投稿2021/05/08 06:51

m.ts10806

総合スコア80842

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

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

goriwo

2021/05/08 07:22

CREATE TABLE IF NOT EXISTS inquiry2( id INT PRIMARY KEY, commodity VARCHAR(50), price INT, information VARCHAR(50) ); これで作成したことにはならないのでしょうか?
m.ts10806

2021/05/08 07:56

そのSQLが実行されたという痕跡はどこかにあるんですか?
goriwo

2021/05/08 09:09

実行の仕方がまったくわからないので勉強してきます
m.ts10806

2021/05/08 09:34

使用しているDBにコマンドからログインするか、DBツールで使うか マイグレーション使うか です。 最低限以上はSQL使えるようになっておいた方がいいですよ。 環境も含めて。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問