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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JDBC

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

Java

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

Spring Boot

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

Q&A

解決済

1回答

4973閲覧

クエリは結果を返却しませんでした

JackOguro

総合スコア4

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JDBC

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

Java

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

Spring Boot

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

0グッド

0クリップ

投稿2022/10/17 23:24

前提

O/RマッパーであるSpring Data JDBCを用いてJavaから入力したデータをMySQLデータベースへ挿入したいと考えています。save()メソッドを用いてInsertを実行したいのですが、save()メソッドは主キーがnullのでない場合、updateになってしまいます。しかし、主キーの値をnullでは挿入できないため、Insertのみを実行するメソッドを作成したいのですが、”クエリは結果を返却しませんでした。”とエラーメッセージが発生してしまいます。

実現したいこと

  • O/RマッパーはSpring Data JDBCを用いたい
  • @Queryを用いてInsertのみを実行するメソッドを実行したい

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

Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) Caused by: org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [INSERT INTO sample VALUES(?, ?)]; クエリは結果を返却しませんでした。; nested exception is org.postgresql.util.PSQLException: クエリは結果を返却しませんでした。 at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:104) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79) at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:713) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:738) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:794) at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.queryForObject(NamedParameterJdbcTemplate.java:243) at org.springframework.data.jdbc.repository.query.AbstractJdbcQuery.lambda$singleObjectQuery$1(AbstractJdbcQuery.java:120) at org.springframework.data.jdbc.repository.query.StringBasedJdbcQuery.execute(StringBasedJdbcQuery.java:136) at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:160) at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:139) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) at com.sun.proxy.$Proxy80.InsertData(Unknown Source) at com.example.demo.service.SampleServiceImpl.InsertOnly(SampleServiceImpl.java:16) at com.example.demo.SpringDataJdbcSampleApplication.executeInsertOnly(SpringDataJdbcSampleApplication.java:33) at com.example.demo.SpringDataJdbcSampleApplication.execute(SpringDataJdbcSampleApplication.java:26) at com.example.demo.SpringDataJdbcSampleApplication.main(SpringDataJdbcSampleApplication.java:16) ... 5 more Caused by: org.postgresql.util.PSQLException: クエリは結果を返却しませんでした。 at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:120) at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:722) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:651) ... 30 more

該当のソースコード

SampleCrudRepository.java

1package com.example.demo.repository; 2 3import org.springframework.data.jdbc.repository.query.Query; 4import org.springframework.data.repository.CrudRepository; 5import org.springframework.data.repository.query.Param; 6 7import com.example.demo.entity.Sample; 8 9public interface SampleCrudRepository extends CrudRepository<Sample, Integer> { 10 // 主キー”id”と”name”に値を代入するメソッド 11 @Query(value = "INSERT INTO sample VALUES(:id, :name)") 12 void InsertData(@Param("id") Integer id, @Param("name") String name); 13 14 // データベース内に入っているデータを見るメソッド 15 @Query("SELECT * FROM sample order by id") 16 Iterable<Sample> findAllOrderASC(); 17}

Sample.java

1package com.example.demo.entity; 2 3import org.springframework.data.annotation.Id; 4 5import lombok.AllArgsConstructor; 6import lombok.Data; 7import lombok.NoArgsConstructor; 8 9@Data 10@NoArgsConstructor 11@AllArgsConstructor 12public class Sample { 13 @Id 14 private Integer id; 15 private String name; 16}

SpringDataJdbcSample.java

1package com.example.demo; 2 3import org.springframework.beans.factory.annotation.Autowired; 4import org.springframework.boot.SpringApplication; 5import org.springframework.boot.autoconfigure.SpringBootApplication; 6 7import com.example.demo.entity.Sample; 8import com.example.demo.repository.SampleCrudRepository; 9import com.example.demo.service.SampleService; 10 11@SpringBootApplication 12public class SpringDataJdbcSampleApplication { 13 14 public static void main(String[] args) { 15 SpringApplication.run(SpringDataJdbcSampleApplication.class, args) 16 .getBean(SpringDataJdbcSampleApplication.class).execute(); 17 } 18 19 @Autowired 20 SampleCrudRepository repository; 21 22 private void execute() { 23 executeInsertOnly(); 24 executeSelect(); 25 } 26 // @Queryで作成したメソッドの実行(InsertData()) 27 private void executeInsertOnly() { 28 repository.InsertData(2, "Takahashi"); 29 } 30 31  // @Queryで作成したメソッドの実行(findAllOrderASC()) 32 private void executeSelect() { 33 System.out.println("---全件取得します---"); 34 Iterable<Sample> members = repository.findAllOrderASC(); 35 for (Sample member : members) { 36 System.out.println(member); 37 } 38 } 39}

試したこと

Insertのみを実行するメソッドを作成しました。

@Query(value = "INSERT INTO sample VALUES(:id, :name)") void InsertData(@Param("id") Integer id, @Param("name") String name);

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

Spring boot ver2.7.4
MySQL ver8.0.31

作成したDB(sampleDB)

Sample

1CREATE TABLE SAMPLE( 2  id INT PRIMARY KEY NOT NULL, 3  name VARCHAR(45) NOT NULL);

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

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

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

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

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

guest

回答1

0

ベストアンサー

Insert、Update、Deleteのように結果(ResultSet)を返さないクエリの場合、
@Modifyingアノテーションも必要になります。

参考:Modifying Query

SampleCrudRepository.java

1 // 主キー”id”と”name”に値を代入するメソッド 2 @Modifying 3 @Query(value = "INSERT INTO sample VALUES(:id, :name)") 4 void InsertData(@Param("id") Integer id, @Param("name") String name);

投稿2022/10/18 00:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

JackOguro

2022/10/18 10:27

ありがとうございます。 無事解決することができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問