- ベストアンサー
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のデータベースに更新する事はできないのでしょうか? あるいは、構文のミスで(エラーには構文ミスと出てきます) 何か他の方法があるのでしょうか? 初心者なもので、どうすれば解決できるのか非常に困っております。 ご存知の方いらっしゃいましたら、御指導・御教授願います。 宜しくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
実行可能な場合の記述が '花子' であるのに対し、構文エラーが出ると言うソースはただstr="花子"(中身はただの 花子 )となっているからではないでしょうか。 つまりデータベースにSQL文を送ったときにシングルクォーテーションが入っていないのかと。 ソース全体が見えないので、他にエラーがあるのかもしれませんし、JAVAでのエラーなのかSQL側でのエラーなのかも分かりませんので憶測になってしまいます。すいません。 ただ自分もやっていることなので不可能ではないはずです。
その他の回答 (1)
- spieder
- ベストアンサー率59% (13/22)
実行するクエリの入っている変数"qry"を何か(ログや画面)に出力してみてください。 こんな表示になるはずです。 UPDATE sample_table SET name =花子WHERE number = '1' これでは実行できないSQL文ですよね。ちゃんと文字列(花子)をダブルクオーテーションかシングルクオーテーションで囲ってください。 String qryを書くならこうなるはずです。 String qry = "UPDATE sample_table SET name = \\"" + str + "\\" WHERE number = '1'"; それと、このままだとSQLインジェクションの餌食になりかねないので、出来ればプリペアドステートメントを使ってください。
お礼
ご回答、ありがとうございます。 >ちゃんと文字列(花子)をダブルクオーテーションかシングルクオーテーションで囲ってください。 なるほど、基本がなっていませんでした。 String str = "'花子'"; と指定したところ、すんなりと更新することが出来ました。 助かりました。 ご回答、ありがとうございました。
お礼
早急なご回答、ありがとうございます。 なるほど、確かにプログラム内では String str = "花子"; としか指定していませんでした。 Rycle様の仰るとおりに String str = "'花子'"; と指定したところ 見事にデータベースを更新することが出来ました。 本当に助かりましたっ ありがとうございました。