• ベストアンサー

JavaからMySQL-DBへのデータ更新について

JAVA から JDBC を経由して MySQL のデータを更新する方法 について質問があります。 MySQL使用者の初心者です。 ここで、データベース(sample_table)は以下のようになっているものとします。 | num | name | | 1  | 太郎 | | 2  | 次郎 | | 3  | 三郎 | num・・・int型 name・・・・varchar型 例えば num = 1 の name を変えたい場合 String qry = "UPDATE sample_table SET name = '花子' WHERE num = '1'"; st.executeUpdate(qry); 等のようにする事は分かっています。 しかし Javaのプログラムにおいて事前に String str = "花子"; のように指定しておいて String qry = "UPDATE sample_table SET name = " + str + "WHERE number = '1'"; st.executeUpdate(qry); とすることが出来ません。 (データベースがvarchar型で、指定しているのがString型だからでしょうか???) やはり Javaのプログラムで事前に指定したものを MySQLのデータベースに更新する事はできないのでしょうか? あるいは、構文のミスで(エラーには構文ミスと出てきます) 何か他の方法があるのでしょうか? 初心者なもので、どうすれば解決できるのか非常に困っております。 ご存知の方いらっしゃいましたら、御指導・御教授願います。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#131718
noname#131718
回答No.1

実行可能な場合の記述が '花子' であるのに対し、構文エラーが出ると言うソースはただstr="花子"(中身はただの 花子 )となっているからではないでしょうか。 つまりデータベースにSQL文を送ったときにシングルクォーテーションが入っていないのかと。 ソース全体が見えないので、他にエラーがあるのかもしれませんし、JAVAでのエラーなのかSQL側でのエラーなのかも分かりませんので憶測になってしまいます。すいません。 ただ自分もやっていることなので不可能ではないはずです。

Fishermans
質問者

お礼

早急なご回答、ありがとうございます。 なるほど、確かにプログラム内では String str = "花子"; としか指定していませんでした。 Rycle様の仰るとおりに String str = "'花子'"; と指定したところ 見事にデータベースを更新することが出来ました。 本当に助かりましたっ ありがとうございました。

その他の回答 (1)

  • spieder
  • ベストアンサー率59% (13/22)
回答No.2

実行するクエリの入っている変数"qry"を何か(ログや画面)に出力してみてください。 こんな表示になるはずです。 UPDATE sample_table SET name =花子WHERE number = '1' これでは実行できないSQL文ですよね。ちゃんと文字列(花子)をダブルクオーテーションかシングルクオーテーションで囲ってください。 String qryを書くならこうなるはずです。 String qry = "UPDATE sample_table SET name = \\"" + str + "\\" WHERE number = '1'"; それと、このままだとSQLインジェクションの餌食になりかねないので、出来ればプリペアドステートメントを使ってください。

参考URL:
http://www.atmarkit.co.jp/fjava/javatips/025jspservlet016.html
Fishermans
質問者

お礼

ご回答、ありがとうございます。 >ちゃんと文字列(花子)をダブルクオーテーションかシングルクオーテーションで囲ってください。 なるほど、基本がなっていませんでした。 String str = "'花子'"; と指定したところ、すんなりと更新することが出来ました。 助かりました。 ご回答、ありがとうございました。

関連するQ&A