IT大生、洋楽和訳とプログラミング

これからのIT時代を生き抜くブログ。

MySQL の構文をJavaのfor文でラクラク作る方法

簡単に

String b = "";
に対して、
for() b = b + 「ほにゃらら」;

です。

詳しく

MySQL とデータをやり取りするための構文が結構面倒ですよね。具体的にいうと、Statement クラスやPreparedStatement クラスに送るString の文字列が

String sql = "INSERT INTO edm VALUES (NULL,'" + title + "', '" + artist1 + "', '" + artist2 + "', '" + artist3 + "', '" + artist4 + "'";

こんな感じでありえないほど複雑になります。どうして複雑になるのかというと、SQL へ送信する文を""で囲むため、その中にJava の変数を直接入れることはできません。(printf関数使えばいけないことはないですが)。となると、変数が入るたび、いったん""を区切って+ しなければならず煩雑になってしまいます。

これはまだかわいい方で、私の作りたいデータベースは

  • 曲のタイトル名(String title)
  • 曲のアーティスト名(String artist[4])
  • 曲のムード(Boolean mood[21])

を送信したいわけです。アーティストまでならまだしも、ムード21個って。。

これが面倒すぎたわけです。仮にもプログラマですから冗長的なコーディングは避けたいわけです。どれほど冗長的か、面倒ですが書いてみました。

String sql = "INSERT INTO edm VALUES (NULL,'" + title + "', '" + artist1 + "', '" + artist2 + "', '" + artist3 + "', '" + artist4 + "', " + mood[0] + ", " + mood[1] + ", " + mood[2] + ", " + mood[3] + ", " + mood[4] + ", " + mood[5] + ", " + mood[6] + ", " + mood[7] + ", " + mood[8] + ", " + mood[9] + ", " + mood[10] + ", " + mood[11] + ", " + mood[12] + ", " + mood[13] + ", " + mood[14] + ", " + mood[15] + ", " + mood[16] + ", " + mood[17] + ", " + mood[18] + ", " + mood[19] + ", " + mood[20] + ");";

キモッッッッッッッッ!!!

これではもし間違えていた時の修正も、配列の数を変えようと思った時も、非常に修正が困難です。だが、何よりもカッコ悪い。見栄えが悪すぎますよね。

どうしようかなと考えた時このサイトがヒットしました。

www.dicre.com

なるほど!String型の変数を用意しておいて、そこに「+」で後ろに付け加えてfor文回していけばいいのか!非常に明快ですね。

// 先頭の文をsql に入れる
String sql = "INSERT INTO edm VALUES (NULL,'" + title;
// Artist シリーズ
for(int i=0; i<4; i++)
sql = sql + "', '" + artist[i];
sql = sql + "'"; // 'アーティスト4' の右側を閉じてあげる
// ムードシリーズ
for(int i=0; i<21; i++)
sql = sql + ", " + mood[i];
sql = sql + ");"; // 「1, 0, ..., 1); 」の); をつけてあげる

ここまでシンプルになりました。

かなりスッキリしましたし、修正も簡単ですね!一発で代入しようとダブルクォーテーションを連発したり、printf()関数で%を連発したりせずとも、簡単にSQL構文を書くことに成功しました。

まとめ

ということで、SQL文で同じようなものを連ねて書くときは「for文で str = str + α」と回していけばいいんだな〜と思ってください。

これは何もSQL文だけではなく、幅広く使えそうなので是非覚えておきたい書き方です。