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文だけではなく、幅広く使えそうなので是非覚えておきたい書き方です。

MySQL に接続できない問題

簡単に

クラスパスを本当にちゃんと通したか?
java -classpath .:./[jarファイル] [Classファイル]
だぞ!!

です。

詳しく

どうやらMySQLの新しいバージョンが出たことにより色々と仕様が変わっているらしい。そのせいで混乱したところもあるので、ver8に絞ってみて行く。

まずはサンプルプログラムを

teratail.com

土台が必要ということで、ここの回答者さんのプログラムを実行してみる。

f:id:rhe_9:20210108114520p:plain

これはmain関数だけなので、class Main として一つのクラスファイルとしてMain.java を作成した。

問題だったのは、「クラスパス」をよく理解していなかったこと。つなげたい二つのファイルが同じディレクトリに入っていればいいと思っていたが、そうではなかった。

teratail.com

ここのサイトのように「クラスパスを通せばいいよ」と言ってくれる人は多かったが、それを具体的にどうすればいいかを教えてくれる人があまりいなかった。

そこで、クラスパスの通し方を検索したところ、このサイトがヒット。

www.searchman.info

もし理解していない人は、全文をきっちり読んで欲しい。すぐに理解できる。

コマンドラインからクラスパスを実行した場合、
どこにクラスパスが通るのか?

そういう話をきっちりしておきましょう。

例えば、
c:\tmpには、以下の二つのファイルがあって、

Sample.class
mysql-connector-java-5.1.7-bin.jar(mysqlのドライバ)

Sampleを実行するためには、
mysql-connector-java-5.1.7-bin.jarファイルが必要
(つまり、クラスパスを通す必要があったとします)
そういう関係だったとしましょう。
よくやってしまう間違いが二つあります。


●一つ目の間違い

C:\tmp>java -classpath . Sample
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

カレントにクラスファイルも、jarファイルもあるんだから、
これでいいだろ?

と思われるかもしれませんが、
クラスパスでカレントを指定した場合は、
クラスファイルにしかクラスパスが通りませんからね。
jarファイルは、きっちり指定する必要があります。

●二つ目の間違い

じゃあ、ってんで、↓のようにやると、
C:\tmp>java -classpath ./mysql-connector-java-5.1.7-bin.jar Sample

Exception in thread "main" java.lang.NoClassDefFoundError: Sample

またエラーがでます。
これだと、
カレントのクラスファイルにクラスパスが通らない。

「カレントには環境変数でクラスパスを通してあるよ」
と思うかもしれませんが、

java -classpath ホニャララ

とやってしまった時点で、
環境変数のクラスパスはご破算になりますからね。

●だから、正しくは、
java -classpath .;./mysql-connector-java-5.1.7-bin.jar Sample

みたいに、
カレントのクラスファイル(Sample.class)
と、
カレントのjarファイル(mysql-connector-java-5.1.7-bin.jar)

にきっちりとクラスパスを通す必要があります。

このように書かれていました。まさかと思い、この通りに実行すると、

$ java -classpath .:./mysql-connector-java-8.0.22.jar Main

Connected....

Connection Failed. : java.sql.SQLSyntaxErrorException: Table 'test.busyou' doesn't exist

Exception in thread "main" java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: Table 'test.busyou' doesn't exist

at Main.main(Main.java:36)

Caused by: java.sql.SQLSyntaxErrorException: Table 'test.busyou' doesn't exist

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)

at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)

at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200)

at Main.main(Main.java:22)

エラーが変わった!

接続できているということです。

貼り付けたサイトは若干間違っています。

java -classpath .;./mysql-connector-java-5.1.7-bin.jar Sample
ではなく

java -classpath .:./mysql-connector-java-5.1.7-bin.jar Sample
です。わかりやすくすると、

java -classpath .:./[jarファイル] [Classファイル]

と並べることでクラスパスを通すことができました。

 

また出たエラーは次の問題ですね、、、

 

まとめ

【2020 17位】Better When You're Gone - David Guetta, Brooks

YouTube

www.youtube.com

こんな悲しい失恋ソングだったんだ!?

 恋人や夫婦の「円満な離別」はどのくらいの確率で存在するのでしょうか?私の体感ですと、お互いが納得していて、その後の関係が恋愛関係より親密度を下げた友人関係として続くケースは滅多にないのではない気がします。
 その理由は色々あるとは思いますが、「どちらかが別れを惜しむために完全に断ち切るしかない」場合や、喧嘩などで「完全に関係が崩れてしまい修復不可能になってしまう」場合などが考えられます。

 この曲のストーリーは前者と思われます。まだ主人公は元恋人のことを忘れることができないでいますが、届かぬ思いに苦しめられるくらいなら断ち切ったほうがマシ、という選択をしています。

 曲調がBrooks 様のテンション上がりまくりのBounce だっただけに、こんな切ない曲だとは思いませんでした。笑

 

和訳

[Verse 1: Emma Lov Block]

I got pain from my waist up
And I wake up and I take drugs
体が痛い
目が覚めたら薬を飲んで

And I say stuff that I make up, like "I hate love"
And I hate that I can't lie, couldn't hate you if I tried
自分に言い聞かせるの、「恋なんて大っ嫌い」って
気持ちに嘘をつけないのが辛い、どうやったって君を嫌いになんかなれない

It'll suck for all week, then hurt more on the weekend
When I go out and see your friends
週の間はずっと私を苦しめて、週末にはもっと苦しくなる
出かけて友達と会うときでさえ

And I don't know what to tell 'em
I can't lie, couldn't hate you if I tried
なんて話せばいいの?
嘘をつけない、どうやっても君を嫌いになんてなれない

 

[Chorus: Emma Lov Block]

I'm comin' around to see you, comin' around to leave you
What is the point of hoping when it's already broken?
君に会おうと、サヨナラしようと君の少し遠くをうろつく
もう関係は壊れているのに何期待してるんだろ?

It hurts to let you go and it's worse to hold on
But I know that I'll be better when you're gone
君を手放すのも辛いし、やり直すのはもっと辛い
でも分かる、君がいなくなってしまえばいいんだって

Said I know that I'll be better when you're gone
君がいないほうがいいって言い聞かせよう

 

[Post-Chorus: Emma Lov Block]

When you're gone
Said I know that I'll be better when you're gone
君が行ってしまえば
君がいないほうがいいって言い聞かせよう

 

[Drop]

 

[Verse 2: Emma Lov Block]

You gave me just eighty
When I needed all hundred percent of you lately
80%しかくれなかった
あなたの全てが欲しかったのに

It's obvious you don't even try, you don't even try
そうしようともしてくれなかった

 

[Chorus: Emma Lov Block]

I'm comin' around to see you, comin' around to leave you
What is the point of hoping when it's already broken?
君に会おうと、サヨナラしようと君の少し遠くをうろつく
もう関係は壊れているのに何期待してるんだろ?

It hurts to let you go and it's worse to hold on
But I know that I'll be better when you're gone
君を手放すのも辛いし、やり直すのはもっと辛い
でも分かる、君がいなくなってしまえばいいんだって

Said I know that I'll be better when you're gone
君がいないほうがいいって言い聞かせよう

 

[Post-Chorus: Emma Lov Block]

When you're gone
Said I know that I'll be better when you're gone
君が行ってしまえば
君がいないほうがいいって言い聞かせよう


Said I know that I'll be better when you're gone
君がいないほうがいいって言い聞かせよう

 

[Drop]

日記など

 

 

いかがでしたか? 「スター」や「コメント」はブログの励みになりますので是非ともお寄せいただければと思います。 ここまで読んでいただきありがとうございました!

【秒で解決】VSCodeでJavaとMySQLを一緒に使いたい(Mac)

簡単に

MySQL拡張機能を入れて適応して、一覧に出てくるMySQL+ボタンをクリックして、host, user, password などを順に入力。
この際のhost とuser がわからなければターミナルで確認
仕上げにエラーをMySQLから3行クエリ実行VSCode をリフレッシュして完成!

です。

詳しく

1. VSCode にMy SQL拡張機能をインストール

「Shift + Command + X」で「拡張機能」のメニューを開きます。
そして、MySQLと検索し、以下の拡張機能をダウンロードします。自動的に有効になるはずです。

f:id:rhe_9:20210104225539p:plain

 

2. メニューバーのMySQLから読み込む

f:id:rhe_9:20210104230312p:plain

有効になっていれば、上記のようにメニューバーにMYSQLが現れるはずです。
このメニューバーを開くと、右に「+」ボタンが現れます。これをクリックして、順にhost, user, password などを入力していきます。

ここで問題が発生しました。

これ、host とuser ってなんだ?

とりあえず自分のパソコンの名前などを入れて試したのですが、エラーが直りませんでした。
※エラーは必ず出ますが、その対処法は後ほど出てきます。

そこで、調べたのがこのサイト。
そうです。そもそも、パソコン自体のホスト名とMySQL内のホスト名が同じとは限らないのです。

パソコン自体のホスト名は

$ uname -n

で確認することができます。しかし、MySQL内部のホスト名は、別の方法で調べることができます。まずは、MySQLにログインします。

$ mysql -u root

私の場合、これを入れてあげるとログインできます。

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 24

Server version: 8.0.22 Homebrew

 

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

そして、ログインしたら次を入力します。

mysql> SELECT user, Host FROM mysql.user; 

すると、このように出力されます。

+------------------+-----------+

| user             | Host      |

+------------------+-----------+

| mysql.infoschema | localhost |

| mysql.session    | localhost |

| mysql.sys        | localhost |

| root             | localhost |

+------------------+-----------+

4 rows in set (0.00 sec)

全然違うやんけ!!!
最初ホスト名を「YamadaTaronoAir」のようなものだと思っていたので、びっくり仰天です。つまり、入力しなければならないのは「localhost」と「root」だったわけです。root は自分で作ったユーザなので、それだとわかりました。

ということで、ユーザ名などがわからない場合はこのコマンドを試してくださいね。

mysql> SELECT user, Host FROM mysql.user; 

 

3. エラーを解消するためMySQL に入ってコマンドを打つ

host, user もわかったところで、一安心。でも、エラーが表示されているはずです。こんな感じ。

f:id:rhe_9:20210104232021p:plain

そこで、ターミナルでroot権限でMySQLにログインします。

$ mysql -u root

 そして、次の3つのコマンドを実行します。実行結果も載せています。

1つ目

ALTER USER "root"@"localhost" IDENTIFIED WITH 'mysql_native_password' BY "";

Query OK, 0 rows affected (0.01 sec)

2つ目

USE mysql;

Database changed

3つ目

SELECT plugin FROM user WHERE User = 'root';

+-----------------------+

| plugin                |

+-----------------------+

| mysql_native_password |

+-----------------------+

1 row in set (0.00 sec)

localhost は変えなくてもいいかもしれませんが、"root" は適宜ご自身のユーザ名に合わせてください!

 

4. VSCode に戻り、リフレッシュ

これで設定が完了しました。先程VSCodeで作ったところに戻り「右クリック」から「Refresh」 を選択します。これでエラーが消え、あなたが作成したデータベースが出現するはずです!

f:id:rhe_9:20210104232814p:plain

 

 まとめ

問題は解決したでしょうか?ここまで読んでいただきありがとうございました!

 

【洋楽和訳】Higher Ground - Martin Garrix

YouTube

Feel Alive って歌詞、良すぎません?

この英語に対する完璧な日本語を持ち合わせていないのが辛い。

"Feel Alive" を直訳すると、「生きていると感じる」となります。
そのまま訳しては洒落がないですよね。

「生きている」#とは

そこで、「生きている」とはどんな状態かを考えました。
「辛くて毎日どん底↓」みたいな気分が「生きている」感じでしょうか。

私はそうではないと思います。
心から喜びを感じて、全身が奮い立つような経験」をしたときに、
「今、生きてる」
だとか、
生きててよかった
と思えるのではないでしょうか。

そうであれば、ここはやはり「幸せ」という言葉がふさわしいのではないでしょうか。どうせ生きているのであれば「幸せ」でいたいものですよね。

意訳ですよこれは


意訳だ!と言われればそこまでではありますが、それが本ブログの根幹であります。
ただ英訳するだけならもはや人間は必要ありません。コンピュータが全部やってくれます。

そんな人間味を帯びた訳を書き上げることができるよう努めている次第です。

じゃあどんな時に"Feel alive" しますか?

答えは元の歌詞にもありますが、"feel alive with you" 、つまり誰かと一緒にいる時じゃないかと思います。

正確にいうと、「あなたと共に、生きていると感じたい」となるので
「あなたといる」=「生きていると感じられる」
ではありませんが、そうとも言っていいのではないでしょうか。

一緒にいたいと思う人と一緒にいられて、思いを伝えることができて、それで"Feel alive" できることが人生においての至福ではないかと思うのです。

和訳

[Verse 1: John Martin]

All this time, all this time keeps fading
Feeling trapped inside
今この時も、消え去っていく
閉じ込められたような感じが

So afraid of the darkness talking
In my mind
本当に怖いんだ
自分の心の闇のささやきが

 

[Pre-Chorus: John Martin]

It's been a long time coming
But it wasn't for nothing
長い時間が流れている
けどそれは無駄なんかじゃない

Soul searching for something, for something
心から求めるものを探して

 

[Chorus: John Martin]

I'm down on my knees in the dust
I scream from the top of my lungs
混乱の中で跪く
声を枯らして叫ぶ

I find my way back to a higher ground
Yeah, I just want to feel alive
最高の場所に戻る道を見つけたんだ
ああ、幸せをただ噛み締めたいだけ

Deep in my bones
I know I'm not there but I'm close
骨の髄から感じる
そこではないけど近くにいる

I'll find my way back to a higher ground
Yeah, I just want to feel alive with you
最高の場所に戻る道を見つけたんだ
ただ幸せを感じていたい、君と

 

[Post-Chorus: John Martin]

Yeah, I just want to feel alive with you
ただ幸せを感じていたい、君と

 

[Drop]

Yeah, I just want to feel alive
ああ、幸せをただ噛み締めたいだけ

 

[Verse 2: John Martin]

Try to speak but my voice keeps breaking
Need to say what's wrong
話そうとしても声がうまく出せない
何がダメなのか言って欲しい

So many smiles you have seen me faking
On and on
僕が見てきた数々の君の笑顔は偽りだったのかな
それでも進んでいく

[Pre-Chorus: John Martin]

It's been a long time coming
But it wasn't for nothing
長い時間が流れている
けどそれは無駄なんかじゃない

Soul searching for something, for something
心から求めるものを探しているんだ

[Chorus: John Martin]

I'm down on my knees in the dust
I scream from the top of my lungs
混乱の中で跪く
声を枯らして叫ぶ

I find my way back to a higher ground
Yeah, I just want to feel alive
最高の場所に戻る道を見つけたんだ
ああ、幸せをただ噛み締めたいだけ

Deep in my bones
I know I'm not there but I'm close
骨の髄から感じる
そこではないけど近くにいる

I'll find my way back to a higher ground
Yeah, I just want to feel alive with you
最高の場所に戻る道を見つけたんだ
ただ幸せを感じていたい、君と

 

[Post-Chorus: John Martin]

Yeah, I just want to feel alive with you
ただ幸せを感じていたい、君と

 

[Drop: John Martin]

Yeah, I just want to feel alive
With you, you, yeah
ああ、幸せを噛みしめたいだけ
君と、君と共に

I just want to feel alive
With you, you, yeah
ああ、幸せを噛みしめたいだけ
君と、君と共に

I just want to feel alive with you
ただ幸せを感じていたい、君と

 

日記など

あけましておめでとうございます。まだ言ってなかったですね。
休みだ休みだと思っていたらもう大学が始まろうとしていますね。現実逃避したいです。(え

まあ、大学生は春休みが死ぬほど長いのでその予定も立ててそれを楽しみに耐え抜きたいところですね。

 

学生はポモドーロで勉強しとけ

最近は勉強の方も力を入れていこうと思っています。現在はいわゆるポモドーロ式に休憩をこまめに挟みながら取り組んでいます。

これは、25分ワーク5分レストのサイクルを繰り返すシンプルかつ効果絶大な方法です。

現役時代は27, 3 でサイクルしてましたが今この負荷をかけてしまうと途中でだれてしまい、結局合計時間はいきません。

長距離マラソンの勉強法でもあります。一つ一つを短く区切ることで結果として長期戦まで突入できるシステムですね。

早起きは5000兆円の徳

現在はひとまず8時間を目安に取り組みます。

朝が最も大事だと思っていて、お昼の12時までに3時間できないとその日はクソみたいな1日と言って過言ではありません。

出だしでくじかれると、後半の盛り返しができないからです。

ぜひ、何かに励もうとする方は、午前中3時間の法則を意識してみてください!

 

ここまで読んでいただき、本当にありがとうございました。