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

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

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

2回答

1301閲覧

DB更新処理の実装方式を教えてください。

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2019/06/05 05:57

前提・実現したいこと

閲覧いただき、ありがとうございます。
Eclipse,Springを使ってJAVAの勉強をしている(超)初心者です。
現在、マスタメンテナンス画面の更新処理を作成中ですが、更新ボタン
押下時に下記のようなエラーが発生してしまいます。
RecordManager.javaのjdbcTemplate.update命令がうまくいっていないのと、
そのjdbcTemplate.updateの戻り値(int)をAddressBookController.java側で
Employee型で受けようとしているからうまくいかないのかなと思っている
のですが、ではどのように実装すべきなのかが検討つかない状況です。
ご教示いただけないでしょうか。

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

nested exception is org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [update unit02.addressbook set name = ? , tel = ?, address = ? where id = ? ]; Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException

該当のソースコード

AddressBookController.java

java

1 @RequestMapping(params = "reflection") 2 public String reflection(AddressBookForm form, Model model) { 3 recordManager.updateEmployee(form.getId(), form.getName(), form.getPhone(), form.getAddress()); 4 if (employee != null) { 5 form.setName(employee.getName()); 6 form.setPhone(employee.getPhone()); 7 form.setAddress(employee.getAddress()); 8 model.addAttribute("message", UPDMSG2); 9 return INIT; 10 } else { 11 model.addAttribute("message", ERRMSG2); 12 return INIT; 13 } 14 } 15

RecordManager.java

java

1 public int updateEmployee(String id,String name, String phone, String address){ 2 System.out.println("para1=" + id + name + phone + address); 3 try{ 4 return jdbcTemplate.update("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 System.out.println("para2=" + rs + rowNum); 10 Employee employee = new Employee("","","",""); 11 employee.setId(rs.getString("id")); 12 employee.setName(rs.getString("name")); 13 employee.setPhone(rs.getString("tel")); 14 employee.setAddress(rs.getString("address")); 15 return employee; 16 } 17 }); 18 } catch (IncorrectResultSizeDataAccessException e) { 19 System.out.println("data incorrect ERR"); 20 return 0; 21 } 22 } 23

試したこと

RecordManager.javaの
System.out.println("para1=" + id + name + phone + address);
は正常値が表示されています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

spring実は使ったことないので、的外れでしたらゴメンなさい。

えっと、やりたいことと使っているメソッドはあっているでしょうか?

https://docs.spring.io/spring/docs/current/javadoc-api/

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html

updateの引数で、RowMapperを使うのでしょうか?

単純に更新値だけ渡せばよいのではないでしょうか。

java

1return jdbcTemplate.update("update unit02.addressbook set name = ? , tel = ?, address = ? where id = ? ", 2 new Object[]{ name , phone , address, id });

投稿2019/06/05 08:05

編集2019/06/06 01:21
momon-ga

総合スコア4820

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

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

usako

2019/06/06 08:10

momon-ga様、コメントありがとうございます。 ご教授いただいたように、シンプルにしたらうまく動作するようになりました!
guest

0

Invalid argument value

無効な引数値 とのことで、引数がおかしいとのことですね。

マニュアル見ますと

public int update(String sql,

@Nullable Object... args) throws DataAccessException

んー合ってそうに見えますが・・

解決するか分かりませんが、ArrayListにしてみては?

あとidなど数値型は文字列から数値にパースしたほうが良さそうです。

java

1ArrayList<Object> param = new ArrayList<>(); 2param.add(name); 3param.add(phone); 4param.add(address); 5param.add(Integer.parseInt(id));

java

1return jdbcTemplate.update("update unit02.addressbook set name = ? , tel = ?, address = ? where id = ? ", 2 param ,

投稿2019/06/05 06:08

編集2019/06/06 00:55
m.ts10806

総合スコア80850

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

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

退会済みユーザー

退会済みユーザー

2019/06/05 13:00

質問者の第3引数はRowMapだから update(String sql, Object... args) が使われてる気がするんだが
m.ts10806

2019/06/05 21:37

あ、確かに でしたらつぎにかいてるstringで渡してるidが問題ですかね。
usako

2019/06/06 08:08

mts10806様、asahina1979様、コメントありがとうございます。 ArrayListも試してみたのですが、私の理解(スキル)が及ばずうまくいきませんでした・・・
m.ts10806

2019/06/06 08:10

回答は2つ案を書いています。2つ目(idをパースする)をお試しください。
usako

2019/06/06 08:15

mts10806様、コメントありがとうございます。 タイミングが悪くてBAを決めてしまいました。こちらの案も試してご報告させていただきます。
m.ts10806

2019/06/06 08:25

MySQLでしたらあまり関係ないかもしれませんが(PostgreSQLなどには必要)、型は合わせておくとトラブルは少ないと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問