みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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のデータベースに更新する事はできないのでしょうか?

あるいは、構文のミスで(エラーには構文ミスと出てきます)
何か他の方法があるのでしょうか?


初心者なもので、どうすれば解決できるのか非常に困っております。
ご存知の方いらっしゃいましたら、御指導・御教授願います。
宜しくお願いいたします。

投稿日時 - 2008-10-29 00:52:03

QNo.4437818

すぐに回答ほしいです

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

実行可能な場合の記述が '花子' であるのに対し、構文エラーが出ると言うソースはただstr="花子"(中身はただの 花子 )となっているからではないでしょうか。
つまりデータベースにSQL文を送ったときにシングルクォーテーションが入っていないのかと。

ソース全体が見えないので、他にエラーがあるのかもしれませんし、JAVAでのエラーなのかSQL側でのエラーなのかも分かりませんので憶測になってしまいます。すいません。
ただ自分もやっていることなので不可能ではないはずです。

投稿日時 - 2008-10-29 01:09:03

お礼

早急なご回答、ありがとうございます。
なるほど、確かにプログラム内では

String str = "花子";

としか指定していませんでした。
Rycle様の仰るとおりに

String str = "'花子'";

と指定したところ
見事にデータベースを更新することが出来ました。
本当に助かりましたっ

ありがとうございました。

投稿日時 - 2008-10-29 10:43:39

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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

投稿日時 - 2008-10-29 01:18:28

お礼

ご回答、ありがとうございます。

>ちゃんと文字列(花子)をダブルクオーテーションかシングルクオーテーションで囲ってください。

なるほど、基本がなっていませんでした。

String str = "'花子'";

と指定したところ、すんなりと更新することが出来ました。
助かりました。

ご回答、ありがとうございました。

投稿日時 - 2008-10-29 10:47:56

あなたにオススメの質問