non riesco a connettermi ad un db mysql tramite driver jdbc.
Ho scaricato il driver ufficiale di Oracle, cioè il connectorJ aggiornato all'ultima versione la 5.1.16.
Collegandomi con phpmyadmin o da riga di comanda la connessione riesce. Da codice java no.
Se serve:
- Codice: Seleziona tutto
[andrea@andrea-laptop ~]$ sudo nmap -p 3306 localhost
Password:
Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-22 23:18 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000059s latency).
Other addresses for localhost (not scanned): 127.0.0.1
rDNS record for 127.0.0.1: localhost.localdomain
PORT STATE SERVICE
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds
Ho modificato il file /etc/hosts.allow aggiungendo la riga mysqld : ALL : ACCEPT e poi ho riavviato mysqld.
Ho commentato la riga skip-networking in /etc/mysql/my.cnf. Ho aggiunto allo stesso file anche la riga bind-address=127.0.0.1 e poi bind-access=0.0.0.0.
Finora nessun risultato positivo, per cui ho rimesso le cose come stavano...
Il codice java che uso è questo:
- Codice: Seleziona tutto
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBManager {
public static String DB_URL="127.0.0.1"; //Ho provato anche con localhost e andrea-laptop
public static String DB_PORT="3306";
public static String DB_NAME="DB";
public static String DB_USER="DB_user";
public static String DB_PASSWORD="pwd";
public static Connection c;
public static boolean connected=false;
// Suppress default constructor for non-instantiability
private DBManager(){
throw new AssertionError();
}
public static boolean connect(){
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
String driver="jdbc:mysql://"+DB_URL+":"+DB_PORT+"/"+DB_NAME+"?user="+DB_USER+"&password="+DB_PASSWORD;
c= DriverManager.getConnection(driver);
connected=true;
return connected;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return connected;
} catch (SQLException e) {
e.printStackTrace();
return connected;
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
public static void disconnect(){
try {
c.close();
connected=false;
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args){
if(connect()) disconnect();
else System.out.print("Errore");
}
}
Quando lancio mi da la seguente eccezione:
- Codice: Seleziona tutto
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:688)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1094)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2337)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2370)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2154)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at DBManager.connect(DBManager.java:26)
at DBManager.main(DBManager.java:56)
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2540)
at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:612)
... 17 more
Ho cercato molto con google ma non sono riuscito a risolvere nulla.
Che cosa bisogna fare per far funzionare questo benedetto jdbc su arch??
PS: non uso firewall su questa macchina, quindi la porta 3306 è aperta (come dimostrato da nmap)