IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

Problème connexion BDD Postgres


Sujet :

API standards et tierces Android

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Problème connexion BDD Postgres
    Bonjour,

    J'ai un problème qui commence sérieusement à me...

    J'espère que vous allez pouvoir m'aider !

    En fait, je veux me connecter à une base de données postgres. Je met le .jar contenant les drivers et compagnie dans mon projet. Jusque là, ça va ! Ensuite, je créé ma classe pour me connecter à la BDD. Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import java.sql.Connection;
    import java.sql.DriverManager;
     
    import android.content.Context;
    import android.content.SharedPreferences;
     
    public class AccesBDD {
     
    	private Connection conn = null;
    	private Context context;
     
    	public AccesBDD(Context context) {
    		this.context = context;
    	}
     
    	public boolean connection() {
    		SharedPreferences prefs = context.getSharedPreferences("parametres",
    				Context.MODE_PRIVATE);
     
    		String adresse = prefs.getString("adresse", "").toString();
    		String port = prefs.getString("port", "").toString();
    		String name = prefs.getString("name", "").toString();
     
    		String url = "jdbc:postgresql://" + adresse + ":" + port + "/" + name;
    		String login = prefs.getString("login", "").toString();
    		String password = prefs.getString("password", "").toString();
     
    		try {
    			Class.forName("org.postgresql.Driver");
    			conn = DriverManager.getConnection(url, login, password);
    		} catch (Exception e) {
    			e.printStackTrace();
    			return false;
    		}
     
    		return true;
    	}
    }

    Et voilà comment je l'utilise dans mon Activity :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // Attribut de ma classe
    private AccesBDD abdd; 
     
    // Dans le onCreate
    abdd = new AccesBDD(this); 
     
    // Dans un méthode
    if(!abdd.connection()){
    			LayoutInflater inflater = getLayoutInflater();
    			View v = inflater.inflate(R.layout.toast, (ViewGroup) findViewById(R.id.lil_toast));
    			TextView tvToast = (TextView) v.findViewById(R.id.tv_toast);
    			tvToast.setText(R.string.texte_toast_erreur_bdd);
    			Toast toast = new Toast(this);
    			toast.setView(v);
    			toast.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL,
    			        0, 0);
    			toast.setDuration(Toast.LENGTH_LONG);
    			toast.show();
    		}
    Voici le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    02-02 09:52:26.460: W/System.err(9439): org.postgresql.util.PSQLException: Quelque chose d'inhabituel a provoqué l'échec du pilote. Veuillez faire un rapport sur cette erreur.
    02-02 09:52:26.460: W/System.err(9439): 	at org.postgresql.Driver.connect(Driver.java:287)
    02-02 09:52:26.460: W/System.err(9439): 	at java.sql.DriverManager.getConnection(DriverManager.java:180)
    02-02 09:52:26.460: W/System.err(9439): 	at java.sql.DriverManager.getConnection(DriverManager.java:214)
    02-02 09:52:26.460: W/System.err(9439): 	at com.consultation.AccesBDD.connection(AccesBDD.java:37)
    02-02 09:52:26.460: W/System.err(9439): 	at com.consultation.ConsultationActivity.verifierConnexion(ConsultationActivity.java:184)
    02-02 09:52:26.460: W/System.err(9439): 	at com.consultation.ConsultationActivity.onActivityResult(ConsultationActivity.java:175)
    02-02 09:52:26.460: W/System.err(9439): 	at android.app.Activity.dispatchActivityResult(Activity.java:4581)
    02-02 09:52:26.460: W/System.err(9439): 	at android.app.ActivityThread.deliverResults(ActivityThread.java:2814)
    02-02 09:52:26.460: W/System.err(9439): 	at android.app.ActivityThread.handleSendResult(ActivityThread.java:2861)
    02-02 09:52:26.460: W/System.err(9439): 	at android.app.ActivityThread.access$1000(ActivityThread.java:122)
    02-02 09:52:26.460: W/System.err(9439): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054)
    02-02 09:52:26.460: W/System.err(9439): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    02-02 09:52:26.460: W/System.err(9439): 	at android.os.Looper.loop(Looper.java:132)
    02-02 09:52:26.460: W/System.err(9439): 	at android.app.ActivityThread.main(ActivityThread.java:4123)
    02-02 09:52:26.460: W/System.err(9439): 	at java.lang.reflect.Method.invokeNative(Native Method)
    02-02 09:52:26.460: W/System.err(9439): 	at java.lang.reflect.Method.invoke(Method.java:491)
    02-02 09:52:26.460: W/System.err(9439): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    02-02 09:52:26.460: W/System.err(9439): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    02-02 09:52:26.460: W/System.err(9439): 	at dalvik.system.NativeStart.main(Native Method)
    02-02 09:52:26.460: W/System.err(9439): Caused by: android.os.NetworkOnMainThreadException
    02-02 09:52:26.460: W/System.err(9439): 	at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1077)
    02-02 09:52:26.460: W/System.err(9439): 	at java.net.InetAddress.lookupHostByName(InetAddress.java:477)
    02-02 09:52:26.460: W/System.err(9439): 	at java.net.InetAddress.getAllByNameImpl(InetAddress.java:277)
    02-02 09:52:26.460: W/System.err(9439): 	at java.net.InetAddress.getAllByName(InetAddress.java:249)
    02-02 09:52:26.460: W/System.err(9439): 	at java.net.Socket.tryAllAddresses(Socket.java:126)
    02-02 09:52:26.460: W/System.err(9439): 	at java.net.Socket.<init>(Socket.java:204)
    02-02 09:52:26.460: W/System.err(9439): 	at java.net.Socket.<init>(Socket.java:171)
    02-02 09:52:26.460: W/System.err(9439): 	at org.postgresql.core.PGStream.<init>(PGStream.java:62)
    02-02 09:52:26.460: W/System.err(9439): 	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:76)
    02-02 09:52:26.460: W/System.err(9439): 	at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
    02-02 09:52:26.460: W/System.err(9439): 	at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
    02-02 09:52:26.460: W/System.err(9439): 	at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
    02-02 09:52:26.460: W/System.err(9439): 	at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22)
    02-02 09:52:26.460: W/System.err(9439): 	at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:32)
    02-02 09:52:26.460: W/System.err(9439): 	at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
    02-02 09:52:26.460: W/System.err(9439): 	at org.postgresql.Driver.makeConnection(Driver.java:393)
    02-02 09:52:26.460: W/System.err(9439): 	at org.postgresql.Driver.connect(Driver.java:267)
    02-02 09:52:26.460: W/System.err(9439): 	... 18 more

    Le .jar que j'utilise est : postgresql-9.0-801.jdbc4.jar

    Pour préciser, j'ai un autre programme où je fais la même chose et qui fonctionne. D'où le fait que ça m'énerve et que je ne comprend pas pourquoi ça ne marche pas.

  2. #2
    Membre actif Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Points : 212
    Points
    212
    Par défaut
    Comme l'indique le LogCat, tu fais une connexion réseau (ou du moins, la librairie d'accès à Postgres) depuis le thread principal, ce qui est maintenant interdit (depuis Honeycomb)

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Pourtant dans l'autre application ça fonctionne bien sous android 3.2. Vraiment étrange.

    J'ai essayé de me connecter à la BDD en appuyant sur un bouton mais le problème est identique que si je me connecte directement dès l'ouverture de l'application.

  4. #4
    Membre actif Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Points : 212
    Points
    212
    Par défaut
    Ce n'est pas "réellement" la version d'Android sur laquelle tu fais tourner l'application qui conditionne si ça marche, mais la version que tu cibles dans ton projet (ie targetSDK >= Honeycomb : ça ne marche plus, targetSDK < Honeycomb, ça marche comme avant)

    Et que tu fasse ton appel BDD au chargement de ton Activity, ou sur un action utilisateur (clic bouton) ne changera rien au problème de connexion réseau dans le thread principal, tant que tu feras pas cette connexion dans un autre thread (via un AsyncTask par exemple)

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Merci de ta réponse j'ai compris, ça fonctionne !! Tu es mon sauveur !!

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Juste une dernière question ! Où trouves-tu ce genre d'infos ? J'ai regardé dans la docs android et je n'ai pas spécialement trouvé.

  7. #7
    Membre actif Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Points : 212
    Points
    212
    Par défaut
    Dans ton cas précis, tout était expliqué dans la JavaDoc de la classe NetworkOnMainThreadException (que l'on voyait dans les logs de ton application)

  8. #8
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par chpil Voir le message
    Comme l'indique le LogCat, tu fais une connexion réseau (ou du moins, la librairie d'accès à Postgres) depuis le thread principal, ce qui est maintenant interdit (depuis Honeycomb)
    En fait ca a *toujours* été interdit... Un peu comme écrire dans "Program Files" sur Windows... C'était juste pas "vérifié"....

    Le SDK (à partir de honeycomb) le vérifie de maniere plus drastique, et empeche ainsi les nouvelles applications a être écrites n'importe comment.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème connexion BDD Postgres ICS
    Par Riri53 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 21/05/2012, 12h19
  2. [MySQL] Problème connexion BDD
    Par Destampes_SA dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/04/2009, 14h46
  3. [2.2.2] Problème connexion BDD Oracle JDBC
    Par BlueSky dans le forum BIRT
    Réponses: 6
    Dernier message: 12/03/2008, 15h22
  4. [WSS 3.0] problèmes connexions BDD
    Par cyrus22 dans le forum SharePoint
    Réponses: 0
    Dernier message: 15/01/2008, 11h44
  5. [c# MYSQL] problème connexion BDD
    Par moulefrite dans le forum Requêtes
    Réponses: 1
    Dernier message: 13/07/2007, 12h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo