- PR -

DB接続エラー

投稿者投稿内容
hirom
常連さん
会議室デビュー日: 2005/08/17
投稿数: 22
投稿日時: 2005-09-26 15:01
いつもお世話になっております。

・MySQL Server 4.1
・tomcat-5.0.28
・mysql-connector-java-3.1.10

にバージョンアップをし、DB接続の処理を行おうとしています。
しかし、

[mysql接続]
C:\\Documents and Settings\\Administrator>mysql -u root -p
Enter password: *****
Welcome to the MySQL monitor. Commands end with ; or \\g.
Your MySQL connection id is 7 to server version: 4.1.14-nt

Type 'help;' or '\\h' for help. Type '\\c' to clear the buffer.

mysql>use kadaidb

としているので、

[接続プールクラス]
package kadai;
import java.sql.*;
import java.util.*;

public class DBConnectionPool {
private String driver; //ドライバクラス
private String url; //URL
private String user; //ユーザー名
private String password; //パスワード

private int maxConnection; //最大接続数
private int checkedOut; //貸し出している接続数
private Vector connectionPool = new Vector();
private static DBConnectionPool instance;

/**
*インスタンスを取得
*/
public static synchronized DBConnectionPool getInstance() {
if (instance == null) {
instance = new DBConnectionPool();
}
return instance;
}

/**
*コンストラクタ
*/
private DBConnectionPool() {
this.driver = "org.gjt.mm.mysql.Driver";
this.url = "jdbc:mysql:///kadaidb?useUnicode=true&charcterEncoding=Shift_JIS";
this.user = "root";
this.password = "****"; ←rootのパスワードを入力
this.maxConnection = 10;
}

/**
*コネクションを取得
*/
public synchronized Connection getConnection() throws Exception {
Connection con = null;
if(connectionPool.size() > 0) {
con = (Connection) connectionPool.firstElement();
connectionPool.removeElementAt(0);
try {
if (con.isClosed()) {
con = getConnection();
}
}catch (SQLException e) {
con = getConnection();
}
}else if (maxConnection == 0 || checkedOut < maxConnection) {
con = newConnection();
}
if (con != null) {
checkedOut++;
}
return con;
}

/**
*新規にコネクションを作成
*/
private Connection newConnection() throws Exception {
Class.forName(driver);
return DriverManager.getConnection(url,user,password);
}

/**
コネクションを返却
*/
public synchronized void freeConnection(Connection con) {
connectionPool.addElement(con);
checkedOut--;
notifyAll();
}

/**
*すべてのコネクションを開放
*/
public synchronized void release() {
Enumeration enumConnections = connectionPool.elements();
while (enumConnections.hasMoreElements()) {
Connection con = (Connection)enumConnections.nextElement();
try {
con.close();
} catch (SQLException e) {
}
}
connectionPool.removeAllElements();
}
}

としたのですが、

[TOMCATエラー]
致命的: データソース org.apache.struts.action.DATA_SOURCE の初期化
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFact
ory, cause:
java.sql.SQLException: Invalid authorization specification message from server:
Access denied for user 'root'@'localhost' (using password: YES)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1997)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1906)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:2520)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:817)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1782)
at com.mysql.jdbc.Connection.<init>(Connection.java:450)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java
:411)
at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(Driv
erConnectionFactory.java:82)
at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(Poolable
ConnectionFactory.java:300)
at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(Bas
icDataSource.java:838)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSou
                  ・
                  ・
                  ・
とエラーが出てきてしまいます。
エラーの内容はパスワードが違うとでてますが、
きちんとmysqlに接続する際に使用するパスワードではいけないのでしょうか?

いろいろ調べてみたのですが、思うような情報に行き着きません。
どなたかご教授のほど宜しくお願いいたします。
ちょま吉
大ベテラン
会議室デビュー日: 2004/08/04
投稿数: 112
投稿日時: 2005-09-26 19:51
引用:
this.url = "jdbc:mysql:///kadaidb?useUnicode=true&charcterEncoding=Shift_JIS";


これですが、kadaidbってデータベース名ですよね?
それじゃ、どこのマシンのデータベースですか?
ホスト名とかIPとかって指定しなくて良いのでしたっけ?
hirom
常連さん
会議室デビュー日: 2005/08/17
投稿数: 22
投稿日時: 2005-09-27 09:47
ちょま吉様 お返事ありがとうございます。

ご指摘をうけまして、変更してみたのですが

private DBConnectionPool() {
this.driver = "org.gjt.mm.mysql.Driver";
this.url = "jdbc:mysql://localhost/kadaidb?useUnicode=true&charcterEncoding=Shift_JIS";
this.user = "root";
this.password = "****";
this.maxConnection = 10;

private DBConnectionPool() {
this.driver = "org.gjt.mm.mysql.Driver";
this.url = "jdbc:mysql://IPアドレス/kadaidb?useUnicode=true&charcterEncoding=Shift_JIS";
this.user = "root";
this.password = "****";
this.maxConnection = 10;
など試してみたのですが、
同じエラーがかえってきてしまいます。
どこが正しくないのでしょうか・・・?

お手数をおかけいたしますが、教えてください。
宜しくお願いいたします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-27 11:09
DBCPやTomcatが影響しているとは思えませんが、一応状況をシンプルにするためにも、まずはスタンドアロンのプログラムで検証するのが手軽ではないでしょうか。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-27 11:16
ちょっと調べたところ、ポート番号を明示的にしていしたらうまくいった、という情報がありました。
関係あるかわかりませんが。
http://www.jforum.net/posts/list/459.page#2051
これも参考になるかも?
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=14219&forum=26&start=8
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-09-27 11:21
MySQLへrootユーザで接続できるかも確認してみてください。
http://dev.mysql.com/doc/mysql/ja/access-denied.html
hirom
常連さん
会議室デビュー日: 2005/08/17
投稿数: 22
投稿日時: 2005-09-27 13:24
インギ様、夏椰(かや)様 お返事ありがとうございます。

***インギ様より***
>ちょっと調べたところ、ポート番号を明示的にしていしたらうまくいった、という情報がありました。
>関係あるかわかりませんが。

ということで、

private DBConnectionPool() {
this.driver = "org.gjt.mm.mysql.Driver";
this.url = "jdbc:mysql://3306/kadaidb?useUnicode=true&charcterEncoding=Shift_JIS";
this.user = "root";
this.password = "admin";
this.maxConnection = 10;
}

private DBConnectionPool() {
this.driver = "org.gjt.mm.mysql.Driver";
this.url = "jdbc:mysql://localhost:3306/kadaidb?useUnicode=true&charcterEncoding=Shift_JIS";
this.user = "root";
this.password = "admin";
this.maxConnection = 10;
}
としてみましたが、同じエラーでした。
また、
参考のスレッドを確認してみましたが、私もパスワードは正しく設定しています。

***夏椰(かや)より***
>MySQLへrootユーザで接続できるかも確認してみてください。

とのことで、
コマンドプロンプトより

C:\\Documents and Settings\\Administrator>mysqladmin -u root -padmin ver
mysqladmin Ver 8.41 Distrib 4.1.14, for Win32 on ia32
Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Server version 4.1.14-nt
Protocol version 10
Connection localhost via TCP/IP
TCP port 3306
Uptime: 4 hours 35 min 0 sec

Threads: 1 Questions: 21 Slow queries: 0 Opens: 13 Flush tables: 1 Open tables: 0 Queries per second avg: 0.001

としてみて、rootユーザーで接続できると判断してもよろしいのですよね?

本当にお手数をお掛けして申し訳ございませんが、ご教授宜しくお願いいたします。
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-09-27 13:35
すみません。
接続確認を実行したマシンは
Tomcatが起動しているマシンと同じでしょうか?

MySQLは接続元の限定ができるようなので、
接続確認をしたマシンとTomcatが動いているマシンが
同一でないと意味がないようです。

(参照元URL)
http://dev.mysql.com/doc/mysql/ja/connection-access.html

これで同一だったらJDBCなどの設定になるのかな・・・?

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