2011-08-26 18 views
6

Sto provando a stabilire una connessione nella mia app Java con JDBC per accedere al mio database online in modo da poter inserire e interrogare tabelle. Ecco quello che attualmente sto provando: (attuale IP/user/pass modificato, ma hanno ragione da quando ho fatto simile da uno script PHP)Java - problemi di connessione al database MySQL online utilizzando JDBC

String url = "jdbc:mysql://984.168.199.70/my_db_name"; 
    String user = "my_username"; 
    String pass = "my_password"; 

Class.forName ("com.mysql.jdbc.Driver").newInstance(); 
    Connection conn = (Connection) DriverManager.getConnection(url, user, pass); 
    stmt = (Statement) conn.createStatement(); 

Ma questo non funziona, ho la errore:

Exception in thread "main" 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. 

E il registro degli errori è piuttosto lungo dopo quello.

Quindi, solo per indicare: mi sono collegato a questo server prima di utilizzare uno script PHP, e ho usato JDBC per connettersi e interagire con i miei database MySQL localhost.

Grazie per qualsiasi aiuto.

+0

Qualsiasi porta speciale aperta per MySQL, o è l'impostazione predefinita? – sgibly

+0

Inoltre, consultare http://stackoverflow.com/questions/2102912/cant-make-jdbc-connection-to-mysql-using-java-intellij-and-linux – sgibly

+1

Per quanto riguarda il problema concreto, controllare http: // stackoverflow.com/questions/2983248/jdbc-with-mysql/2985169#2985169 Per quanto riguarda il codice che hai postato finora, questi cast inutili mi fanno pensare che hai effettivamente importato le classi di implementazione concrete di MySQL per 'Connection' e' Statement'. Anche se non è necessariamente la causa del tuo problema, questa è una * cattiva pratica *. Dichiarare sempre contro le interfacce 'java.sql. *'! Se si aggiorna il driver o si cambia il DB, il codice JDBC si interromperà in caso contrario e sarà necessario eseguire una completa riscrittura/ricostruzione. – BalusC

risposta

2

Ho avuto anche questo problema ed è sempre (nel mio caso) stato inserito in un url jdbc errato, ad es. numero di porta mancante/errato (so che il tuo codice di esempio è stato editato ma non specifica alcuna porta) o indirizzo IP errato, in caso contrario verifica che mysql sia in esecuzione e accetti le connessioni sulla porta e l'ip che stai aspettando. Controlla l'indirizzo di bind nel tuo my.cnf con l'indirizzo IP nel tuo jdbc url

+0

Non sono sicuro di quale (se presente) porta dovrei specificare ... Il server che ho è ospitato su Godaddy .com, che non è mai facile da gestire con – JDS

+0

la porta predefinita è 3306, quindi il tuo jdbc url dovrebbe essere come jdbc: mysql: //84.168.199.70: 3306/my_db_name, quindi come BalusC ha detto rimuovere i cast (Connection). Google veloce ha mostrato questo, potrebbe aiutare http://help.godaddy.com/article/262 – eon

+0

grazie, ma ancora senza fortuna. La cosa fastidiosa è che uno script PHP di base con lo stesso IP/nome utente/password funziona perfettamente. Godaddy non consente a Java di avere accesso o qualcosa del genere? – JDS

1

Rispondere alla mia domanda qui, perché il codice che avevo andava bene. Il problema era con le mie impostazioni di Godaddy.

Fondamentalmente quando si crea un database MySQL con questi ragazzi, assicurarsi di avere "Consenti accesso diretto al database" impostato su SÌ. Apparentemente il mio altro database non lo era.

Continuerò a lasciare la domanda senza risposta per un po 'nel caso in cui altre persone abbiano qualche input. Queste cose di configurazione mi ottengono sempre ...

+0

sto affrontando esattamente lo stesso. Sto usando il servizio gratuito di 000webhost.com per questo. Lo stesso errore? Qualche idea su come risolvere i problemi o trovare "consentire l'accesso diretto" al database? –

Problemi correlati