2010-12-11 7 views
0

Voici une partie de mon programme:MysqlDataSource Invoque "Connexion refusée" Exception

try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     InitializeData data = new InitializeData(); 

     Connection con = null; 
     try { 
      Context ctx = data.getContext(); 
      MysqlDataSource ds = (MysqlDataSource)ctx.lookup("database"); 
      con = ds.getConnection(); 
     ... 

public InitializeData() { 

    // configuring data source (data base) 
    ds = new MysqlDataSource(); 
    ds.setUser("root"); 
    ds.setPassword("%"); 
    ds.setServerName("localhost"); 
    ds.setPort(3306); 

    // configuring jndi 
    try { 
     Properties env = new Properties(); 

     try { 
      env.load(new FileInputStream(env_props)); 
     } catch (FileNotFoundException e) { 
      System.err.println("Unable to load jndi properties"); 
      System.exit(1); 
     } catch (IOException e) { 
      System.err.println("IOException"); 
      System.exit(1); 
     } 

     ctx = new InitialContext(env); 
     ctx.rebind("database", ds); 

    } catch (NamingException e) { 
     System.err.println("Naming Exception"); 
     System.exit(1); 
    } 


} 

public Context getContext() { 
    return ctx; 
} 

Comme vous pouvez le voir, j'essaie de se connecter à MySQL. En fait, MySQL est intégré dans mon programme Java. Lorsque je me connecte via DriverManager (en utilisant con = DriverManager.getConnection("jdbc:mysql:mxj://localhost", "root", "");) tout fonctionne. Mais en utilisant un objet DataSource comme indiqué ci-dessus invoque une exception:

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.ConnectException 
MESSAGE: Connection refused: connect 

STACKTRACE: 

java.net.ConnectException: Connection refused: connect 
at java.net.PlainSocketImpl.socketConnect(Native Method) 
at java.net.PlainSocketImpl.doConnect(Unknown Source) 
at java.net.PlainSocketImpl.connectToAddress(Unknown Source) 
at java.net.PlainSocketImpl.connect(Unknown Source) 
at java.net.SocksSocketImpl.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at java.net.Socket.<init>(Unknown Source) 
at java.net.Socket.<init>(Unknown Source) 
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256) 
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271) 
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771) 
at com.mysql.jdbc.Connection.<init>(Connection.java:1555) 
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) 
at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:425) 
at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:140) 
at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:110) 
at statistics.DatabaseWorks.main(DatabaseWorks.java:26) 

Quelqu'un pourrait, s'il vous plaît, aidez-moi?


Certains tests vu que mon programme tente de se connecter à un serveur MySQL, qui n'est pas intégré (voir la réponse de BalusC). Si je démarre le serveur (non intégré) tout fonctionne. J'ai donc besoin d'un moyen de dire mon programme pour démarrer le local. Pour une raison quelconque, ds.setUrl("jdbc:mysql:mxj://"); ne fonctionne pas

Répondre

1

Vous essayez de vous connecter à un vrai serveur MySQL au lieu d'un serveur MySQL intégré.

Je ne l'ai jamais essayé, mais ce qui suit devrait dans le travail de la théorie:

ds.setUrl("jdbc:mysql:mxj://localhost"); 
ds.setUser("root"); 
ds.setPassword(""); 

Donc, avec exactement les mêmes paramètres que dans votre DriverManager#getConnection(). Par ailleurs, le InitializeData est assez compliqué. Je suggère de simplifier cela. Puisque vous créez manuellement la source de données, vous n'avez pas besoin de la mettre dans la portée JNDI. Il suffit de créer ds et d'utiliser ds.getConnection() directement. Le JNDI n'est utile que si vous avez délégué la création de la source de données à un conteneur JNDI comme un serveur d'application Java EE.


Mise à jour selon les commentaires: il regarde comme ça MysqlDataSource n'a pas été conçu pour MySQL embarqué du tout. Si tout ce que vous voulez est une source de données de connexion, essayez c3p0. Cela devrait fonctionner universellement puisque tout ce dont il a besoin est l'URL complète JDBC, le nom d'utilisateur et le mot de passe, exactement les mêmes que ceux que vous passez à DriverManager.

+0

J'ai essayé ceci mais ces changements ont fourni à nouveau l'exception de refus de connexion. – Dmitry

+0

également juste ds.setUrl ("jdbc: mysql: mxj: //"); ne fonctionne pas – Dmitry

+0

Eh bien, je pense (d'accord avec vous =)) que j'essaie de me connecter à un serveur MySQL qui n'est pas intégré. Comment puis-je faire mon programme pour utiliser celui intégré? – Dmitry

Questions connexes