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

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で作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

6167閲覧

パラメタがうまくSQLに渡っていない?

usako

総合スコア31

MySQL

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

JDBC

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

Java

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

0グッド

0クリップ

投稿2019/06/04 04:13

前提・実現したいこと

閲覧いただき、ありがとうございます。
Eclipse,Springを使ってJAVAの勉強をしている(超)初心者です。
マスタメンテ画面で更新機能を作成しようとしています。
データベース(unit02.addressbook)はid(int),name(String),phone(String),address(String)の項目でなりたっています。
いざ更新ボタンを押下すると、下記のようなエラーがでてしまい、
どうもパラメタがうまくSQLに渡っていないように思えます。
どこに問題があるのかご教授いただけないでしょうか。

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

HTTPステータス 500 - Request processing failed; nested exception is org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [update unit02.addressbook set name = ? , tel = ?, address = ? where id = ? ]; Can not issue data manipulation statements with executeQuery().; nested exception is java.sql.SQLException: Can not issue data manipulation statements with executeQuery().

type 例外レポート

メッセージ Request processing failed; nested exception is org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [update unit02.addressbook set name = ? , tel = ?, address = ? where id = ? ]; Can not issue data manipulation statements with executeQuery().; nested exception is java.sql.SQLException: Can not issue data manipulation statements with executeQuery().

該当のソースコード

java

1@Controller 2@RequestMapping(value = "/book") 3public class AddressBookController { 4---省略 5 private RecordManager recordManager; 6---省略 7 public AddressBookController(RecordManager recordManager) { 8 this.recordManager = recordManager; 9 } 10 @RequestMapping(value = "/start")  //初期画面 11 public String init(AddressBookForm form, Model model) { 12 model.addAttribute("message", INIMSG); 13 return INIT; 14 } 15---省略 16 @RequestMapping(params = "reflection") //更新ボタン押下時 17 public String reflection(AddressBookForm form, Model model) { 18 Employee employee = new Employee(form.getId(), form.getName(), form.getPhone(), form.getAddress()); 19 recordManager.updateEmployee(form.getId(), form.getName(), form.getPhone(), form.getAddress()); 20 } 21---省略 22

java

1 public Employee updateEmployee(String id,String name, String phone, String address){ 2 System.out.println("para=" + id + name + phone + address); 3 try{ 4 return jdbcTemplate.queryForObject("update unit02.addressbook set name = ? , tel = ?, address = ? where id = ? ", 5 new Object[]{ name , phone , address, id }, 6 new RowMapper<Employee>() { 7 @Override 8 public Employee mapRow(ResultSet rs, int rowNum) throws SQLException { 9 Employee employee = new Employee("","","",""); 10 employee.setId(rs.getString("id")); 11 employee.setName(rs.getString("name")); 12 employee.setPhone(rs.getString("tel")); 13 employee.setAddress(rs.getString("address")); 14 return employee; 15 } 16 }); 17 } catch (IncorrectResultSizeDataAccessException e) { 18 System.out.println("data incorrect ERR"); 19 return null; 20 } 21 }

試したこと

  • updateEmployeeクラスにFormからのパラメタは正しく渡っている。
  • 同じ文法で Mysqlを実行すると正常に更新できる。

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

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

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

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

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

guest

回答1

0

ベストアンサー

jdbcTemplate.queryForObject() を使うのは適切でしょうか?

  1. JDBC によるデータアクセス (5) | TECHSCORE(テックスコア) https://www.techscore.com/tech/Java/Others/Spring/5-5/

を見ると、jdbcTemplate.update() のような気がしますが。

投稿2019/06/04 06:39

mobilefan8

総合スコア85

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

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

usako

2019/06/05 04:43

サジェスチョンありがとうございます。 jdbcTemplate.update() を使ってコードを書いてみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問