- PR -

MySQLについて教えてください。

投稿者投稿内容
たーぞう
ぬし
会議室デビュー日: 2003/08/08
投稿数: 317
お住まい・勤務地: お花畑
投稿日時: 2004-08-26 17:13
引用:

fuuさんの書き込み (2004-08-26 16:55) より:
私も、そう思って、試みたのですができませんでした。

characterEncodingが何か確かめる方法はあるのですか。
my.iniとかに書いてあったりしますか。
見てみたのですが、sjisとはは見当たらなかったのですが・・・。


スラッシュは3本にしましたか?
characterEncodingは "SHIFT_JIS" にしましたか?
未記入
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 80
投稿日時: 2004-08-26 17:32
たーぞう様、返信ありがとうございます。

String url = "jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SHIFT_JIS";

テーブルhello_world_tableはC:\mysql\data\hellodbにあるのですが、そのため、スラッシュは2本だと思ったのですが・・・・。

characterEncoding=のあとをSHIFT_JISに書き換えて、試してみましたが、エラーのままでした。
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2004-08-26 17:50
MySQLのデフォルト文字コードを明示的に指定するのでしたら
my.ini の[mysqld] 項に
default-character-set=sjis
の1行を追加しておけばよろしいかと思います。

とりあえず文字コードの問題で接続できないわけではないので、
○CLASSPATH で指定された箇所にドライバーがあるかどうか?(ついでにドライバーの
ファイルサイズが0バイトになっていないかどうか→この場合ファイルが破損している恐れあり。
○CLASSPATH指定にスペルミスや余分なスペース等を入れていないか?
あたりは大丈夫でしょうか?

※管理上の問題なので、直接エラーの原因になるわけではありませんが
自分で設定する場合、ドライバーは tomcat 内のcommon¥lib の下に入れています。

#追記
mysqld サービスは起動していますよね?

[ メッセージ編集済み 編集者: Ken-Lab 編集日時 2004-08-26 18:14 ]
tabby
ベテラン
会議室デビュー日: 2002/06/26
投稿数: 55
お住まい・勤務地: 埼玉県・東京都
投稿日時: 2004-08-26 18:45
必要最低限のコードで試してみてください。
jdbc:mysql:/// ←ここのスラッシュは3つ必要です。

"jdbc:mysql://"でドライバーを判定して、その後ろの"host/db"で書式チェックを
していると思います。今回の場合はhost名を省略しているので"///"になります。

コード:
public class Test {
  public static void main(String[] args) {
    try {
      Class.forName("org.gjt.mm.mysql.Driver");

      String url = "jdbc:mysql:///hellodb";
      java.sql.DriverManager.getConnection(url);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}



ちなみに"jdbc:mysql://hellodb"だと"No suitable driver"が出ました。
上記の確認のみであればmysqlは必要ありません。
DBがなければ"Unable to connect to any hosts 〜(略)"になりますが、これは正常です。
DBがあってもパラメータがないのでエラーになるかもしれませんが、
とりあえず、"No suitable driver"が出なくなれば解決かと。

#URLの書式で接続に使うドライバを選択するJDBCの仕様に問題有りまくり
未記入
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 80
投稿日時: 2004-08-26 18:45
Ken-Lab様、返信ありがとうございます。

>#追記
>mysqld サービスは起動していますよね?

1つのコマンドプロンプトで、
C:\mysql\bin>mysql
として、mysqldを起動して、

もう1つのコマンドプロンプトで、
C:\作業フォルダ\JavaHello>javac HelloWorldJDBCMySQL.java

などをしているのですが・・・。これでは、起動されていないのでしょうか。

>○CLASSPATH で指定された箇所にドライバーがあるかどうか?(ついでにドライバーのファイルサイズが0バイトになっていないかどうか→この場合ファイルが破損している恐れあり。

ドライバーとは、mysql-connector-java-3.0.14-production-bin.jarですよね??
間違っていますか・・・。
232KBとなっているのですが。

CLASSPATHは、
C:\mysql-connector-java-3.0.14-production\mysql-connector-java-3.0.14-production-bin.jar
です。

スペルミスがないように、そのファイルの名前をそのままコピーしました。
余分なスペース等も確認しました。

「ClassNotFoundExceptionが発生するようなら、CLASSPATHの設定が間違っています。」
というのを、見つけて、ClassNotFoundExceptionがなかったので、CLASSPATHの設定はあっていると思っていたのですが・・・。

未記入
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 80
投稿日時: 2004-08-26 18:57
tabby様、返信ありがとうございます。

>jdbc:mysql:/// ←ここのスラッシュは3つ必要です。
より、

String url = "jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SJIS";
としたところ、

C:\作業フォルダ\JavaHello>java HelloWorldJDBCMySQL
java.sql.SQLException: General error, message from server: "Access denied for user: '@localhost' to database 'hellodb'"
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1977)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1900)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:950)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1771)
at com.mysql.jdbc.Connection.<init>(Connection.java:440)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:400)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at HelloWorldJDBCMySQL.main(HelloWorldJDBCMySQL.java:16)

というエラーになりました。

>#URLの書式で接続に使うドライバを選択するJDBCの仕様に問題有りまくり

とは・・・・、詳しく教えていただけないでしょうか。
tabby
ベテラン
会議室デビュー日: 2002/06/26
投稿数: 55
お住まい・勤務地: 埼玉県・東京都
投稿日時: 2004-08-26 19:06
とりあえず、パラメータでユーザーIDとパスワードを指定してみてください。

引用:

java.sql.SQLException: General error, message from server: "Access denied for user: '@localhost' to database 'hellodb'"



>#URLの書式で接続に使うドライバを選択するJDBCの仕様に問題有りまくり

接続文字列の書式でドライバー選択する仕様って何か変じゃないですか?
JDBC自体そういうものと割り切って使うしかないんでしょうけど、
なんかこう、漠然と違和感有りまくりなんです(^^;
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2004-08-26 19:27
引用:

fuuさんの書き込み (2004-08-26 18:45) より:
>#追記
>mysqld サービスは起動していますよね?

1つのコマンドプロンプトで、
C:mysqlbin>mysql
として、mysqldを起動して、

もう1つのコマンドプロンプトで、
C:作業フォルダJavaHello>javac HelloWorldJDBCMySQL.java

などをしているのですが・・・。これでは、起動されていないのでしょうか。


コマンドプロンプトからMySQLへ接続できて、SQLが発行できればOKでしょう。

引用:

とりあえず、パラメータでユーザーIDとパスワードを指定してみてください。


うーん、恐らくこれが原因ではないでしょうか。

スキルアップ/キャリアアップ(JOB@IT)