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

解決済みの質問

JavaからMySQLへの接続

現在、JavaからMySQLへ接続してデータを抽出する
勉強をしております。
(MySQL Server4.1、ドライバはmysql-connector-java-2.0.14)

どうも接続部分のコードがおかしいのか、
コードをいろいろ変えてみても、エラーになります。
//ドライバクラスをロード
Class.forName("org.gjt.mm.mysql.Driver");

//データベースへ接続
String url = "jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SJIS")
String user = "root";
String pass = "XXXX";
Connection con = DriverManager.getConnection(url,user,pass);

↓↓実行後のエラーメッセージです。
(java.sql.SQLException: Communication failure during handshake. Is there a server running on localhost:3306?)

ちなみにコマンドプロンプトからMySQLのcardbに接続する際は
mysql -u root hellodb -p
とうてば接続できます。この前に
mysqld --default-character-set=sjis
のようなコードをうつことはありません。(エラーになってしまったので)

接続面で何か不備があるのでしょうか?
JDBCドライバのjarファイルのクラスパスへの設定は済んであります。
どなたかわかるかたいらっしゃいましたら教えていただけると
助かります。
どうぞよろしくお願いいたします。

投稿日時 - 2008-02-13 23:52:51

QNo.3773703

困ってます

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

文字化けに関しては、いつも悩まされるところですね。

原因はさまざまあるのですが、残念ながら私もまだ徹底的に追及していません。参考になるかもしれませんので、いくつかあげてみておきます。
ただしこれも新しいバージョンでないといけないかもしれません。

・mysqlでのコマンドプロンプト操作

   1.\hで    ヘルプ一覧
   2.\s     ステイタス情報
   3.\C utf8  キャラクタセットの変更(クライアント、接続)
   4.show create database hellodb;
   5.show create table テーブル名;
   6.create database hellodb character set sjis;

・jdbc:mysql://localhost:3306/hellodb?useUnicode=true&characterEncoding=Shift_JIS
   のcharacterEncoding=Shift_JISの部分。

・request.setCharacterEncodingg("Windows-31J");

・データを入力したときの文字コード(ファイルからの場合等)

・mysqlのメニューの[Mysql Server Instance Configuration Wizard]で文字コードの変更。

--------------------------------------------------------------------------------
以上のようなことをいろいろとチェックしながらうまくいく方法見つけてみてください。

可能なら、新しいバージョンでインストールし直すのも、いろいろ確認できるし、うまくいくかもしれません。

投稿日時 - 2008-02-14 18:37:14

お礼

autyさん、何度も気にかけていただきありがとうございます。

検索もしていろいろ試してみましたが、結局うまくいきません
でした。

今回、MySQLには初めて触れたのですがJavaから接続するという
作業を通して、接続とはこんな風にやるのか、MySQLとはこんな
形になっているのか、と漠然とした形ですが理解することが
できました。

まだ勉強の途中、形だけわかっただけでも進歩なので、
このまま先に進めようと思います。(現在使用している本が、
あまり細かく説明されたものではないので・・)
どこかで不備があって、きっとそのうち解決法が見つかると思います。
バージョンの不相性も関係しているでしょうし。

せっかく接続できたのに文字化けかよ、という心残りは
ありますが。。(笑)

何度も丁寧な説明をしていただき、どうもありがとうございました。
また質問して、見かけることがありましたらまた助けて
いただけると幸甚です。

投稿日時 - 2008-02-15 10:58:03

ANo.3

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

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

回答(3)

ANo.2

調べてみたところ、MySQL 4.1以降、password()関数の返す長さが
   20バイト から 41バイト
に変換されているようです。

ひょっとすると今使ってるテーブルは、パスワードの長さが21バイトかもしれません。

その場合は、テーブルを作成しなおすか修正すればよいと思いますが、下記のページにかなり詳しく載っているので参考になるかと思います。

参考URL:http://www.onflow.jp/blog/archives/mysql/

投稿日時 - 2008-02-14 14:55:22

お礼

お調べいただき、大変恐縮です。

記載URLを参考にしてみましたが、password()関数の
変更のしかたがよくわからず、
下のほうで紹介されていた記事(MySQLとJDBCのバージョンが
合ってない)を参照して少し新しめのJDBC(mysql-connector-java-3.0.17-ga)
をダウンロードしてみましたところ、接続が多分?うまくいきました。

・・とここまではよかったのですが、
SQLの結果セットが文字化けしていました。
これもやはり、JDBCとバージョンが合っていないせいなのでしょうか。
少し新しめのJDBCをいくつか試しましたが、それぞれ違った
エラーになります。JDBCの数が多すぎて、どれが良いのか???
です。。

投稿日時 - 2008-02-14 17:29:38

ANo.1

>>> (java.sql.SQLException: Communication failure during handshake. Is there a server running on localhost:3306?)
   のエラーメッセージが出ていますね。

ポート番号3306が使われているかをコマンドプロンプトで確認すると、使われている場合、
   
--------------------------------------------------------------------------------
>netstat -a -v | find "3306"
TCP 0.0.0.0:3306 vista:0 LISTENING
--------------------------------------------------------------------------------
のように、3306が見つかりますが使われていないときは何も出ません。

そこで、Mysqlのインストールディレクトリがわかれば、そのルートに
   my.ini
が見つかると思うので、開くと
--------------------------------------------------------------------------------
[client]

port=3306

--------------------------------------------------------------------------------
のように、ポート番号がわかります。
--------------------------------------------------------------------------------
String url = "jdbc:mysql://localhost:ポート番号/hellodb?useUnicode=true&characterEncoding=SJIS");
--------------------------------------------------------------------------------
のように直してみてください。

投稿日時 - 2008-02-14 00:38:49

お礼

とても丁寧なご回答ありがとうございます。

netstat -a -v | find "3306"
と打ちますと、
ご指摘のような応答メッセージが出てきます。(LISTENING)

my.ini
にはport=3306とあり、
String url = "jdbc:mysql://localhost:3306/hellodb?useUnicode=true&characterEncoding=SJIS";

と直してみましたが同じエラーが返ってきます。
ポート番号を変えると良いのでしょうか?
恥ずかしながら、どのポート番号を使えばよいかもわかりません。
(この場合、my.iniで書き換えるのでしょうか。)

恐縮ですが、またご指摘いただけると助かります。。
よろしくお願いいたします!

投稿日時 - 2008-02-14 08:41:16

あなたにオススメの質問