Bonjour,
Je me suis mis au Java récemment et j'essaie de développer une petite application Android qui se connecte à une base de données externe Postgresql (via le connecteur JDBC correspondant : postgresql-9.4-1201.jdbc4.jar).
Je travaille sous l'environnement Eclipse Luna et j'ai spécifié le connecteur en faisant clic-droit sur le répertoire "libs/" de mon projet puis "coller" le fichier .jar. Ca m'a demandé de l'enregistrer ce que j'ai accepté. Avant cette étape, mon code levait une exception comme quoi le driver n'existait pas.
Le problème est que je n'arrive pas à me connecter à la base de données distante avec ce connecteur, j'ai une Exception de Type EACCES. Je me suis renseigné et à priori j'avais oublié de spécifié dans le fichier Manifest l’autorisation à l'application de se connecter à Internet. Donc j'ai rajouté cette ligne dans le fichier Manifest :
<uses-permission android:name="android.permission.INTERNET"/>
Sauf que maintenant, je ne passe même plus dans un catch, mon application plante complètement ("AndroidExample s'est arrêté").
Voici mon code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
// Connexion à la base de données Postgresql GF
try {
Class.forName("org.postgresql.Driver");
System.out.println("Driver O.K.");
String url = "jdbc:postgresql://<IP>:5432/<databasename>";
String user = "user";
String passwd = "mdp";
if (isOnline())
{
Connection conn = DriverManager.getConnection(url, user, passwd);
String connectionMsg = "Connexion effective !!";
System.out.println(connectionMsg);
txtConnection.setTextColor(Color.GREEN);
txtConnection.setText(connectionMsg);
conn.close();
}
else
{
txtConnection.setTextColor(Color.RED);
txtConnection.setText("Pas connecté à Internet");
}
Article myArticle = new Article(contents);
txtConnection.append(myArticle.getArtNr());
}
catch (SQLException sqlEx)
{
sqlEx.printStackTrace();
txtConnection.setTextColor(Color.RED);
txtConnection.setText(sqlEx.getMessage());
txtConnection.append(" | " + sqlEx.toString());
txtConnection.append(sqlEx.getCause().getMessage());
}
catch (Exception e) {
e.printStackTrace();
txtConnection.setTextColor(Color.RED);
txtConnection.setText(e.getMessage());
txtConnection.append(" | " + e.toString());
txtConnection.append(e.getCause().getMessage());
} |
La fonction isOnline pour savoir si on a une connectivité Internet :
1 2 3 4 5
| public boolean isOnline() { ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
} |
La méthode isOnline() renvoie true et c'est sur la ligne
Connection conn = DriverManager.getConnection(url, user, passwd);
que ça plante apparemment.
Pourtant je gère l'exception générale. Vous avez une idée pour faire fonctionner mon programme ? Merci par avance.
Kib
Partager