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

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

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

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Spring Boot

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

Q&A

解決済

2回答

2338閲覧

spring data jdbcを使ってDBに情報を書き込むやり方

syoshinsya-

総合スコア21

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Spring Boot

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

0グッド

0クリップ

投稿2020/08/31 10:50

前提・実現したいこと

springbootを使ってWEBサイト(とりあえず自分のPCだけのローカル環境)を作ってみる過程でデータベースに触れてみようと思ったのですが、
うまく動きません。

具体的には、
HTMLのformで入力した内容をDB上に保存する

ということをやりたいと思っています。
DBに情報を書き込めるようにするにはどのようにすればいいかを教えていただきたいです。

springboot自体、先日初めて触ったので本来ならありえないようなミスや勘違いをしているかもしれません...よろしくお願いします

###できたこと
HTMLから入力した内容を受け取ってString型の変数に格納するまではできています。

発生している問題

DBに情報を書き込むこと(接続の段階から失敗しているかもしれません)
また、下記の画像の一番下のschema.sqlで書き込むテーブル(USERDATA)がなかったら作成してくれると思っているのですが、
作成されません
イメージ説明

###DBとの接続部分
application.yml

spring: datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:memo username: memo password: pass initialization-mode: never

schema.sql

create table if not exists USERDATA( USERId integer not null primary key , USERNAME varchar(10) not null, PASSWORD varchar(20) not null );

USERDATA.java

package DB.Domain; import lombok.Data; import javax.persistence.Id; @Data public class USERDATA { @Id private Integer USERId; private String USERNAME; private String PASSWORD; public USERDATA(Integer id, String username, String password) { } }

RegisterR.java

package DB; import DB.Domain.USERDATA; import DB.Repository.USERDATARepository; import com.web.memo.register.Register; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.data.jdbc.DataJdbcTest; @DataJdbcTest public class RegisterR { @Autowired USERDATARepository userdataRepository; public void add(Integer Id, String username, String password){ USERDATA userdata = new USERDATA(Id, username, password); USERDATA inserted = userdataRepository.save(userdata); } }

###RegisterR.javaを使って処理をする部分

import DB.RegisterR; public class Register { private String username; private String password; Register(String username, String password){ this.username = username; this.password = password; } public void insert(){ //ここは入力したものが表示されることからここまではうまくいっているはずです System.out.println("受け取ったよ" + username + password); RegisterR registerR = new RegisterR(); registerR.add(null, username , password); } public String getUsername() { return username; } public String getPassword() { return password; } }

###HTMLからの受取部分
受け取ったusernameとpasswordをregister.insert()でDBに書き込みたいと思っています。

import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @Controller public class registerController { @GetMapping("/register") public String register(Model model){ return "register"; } @PostMapping("register") public String reg(String username, String password, Model model){ Register register = new Register(username, password); register.insert(); return null; } }

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

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

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

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

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

guest

回答2

0

initialization-mode: never の場合、初期化は行いません。

H2DBをお使いの場合は、alwaysないしはembeddedのどちらかで良いです。

Qiita:Spring Boot 2.0のカテゴリ別重要プロパティ一覧

投稿2020/08/31 10:56

A-pZ

総合スコア12011

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

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

syoshinsya-

2020/08/31 13:12

回答ありがとうございます。 initialization-mode: neverをalwaysに変えて初期化が毎回行われるように変更しました。 しかし、DBにはschema.sqlに書いたテーブル(USERDATA)が追加されていないというのと、 やはりweb上で送信ボタンを押すとDBとのエラーが起きてしまいます。 エラーコードは ERROR 11176 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause というものでした。 このエラーの原因を教えていただくことは可能でしょうか よろしくお願いします
guest

0

自己解決

RegisterR.javaにてnewを使用しているところを@Autowirdeに変更したら治りました!

投稿2020/09/02 18:47

syoshinsya-

総合スコア21

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問