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

Android Discussion :

Requête INSERT qui ne fonctionne pas


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Requête INSERT qui ne fonctionne pas
    Bonjour,

    J'ai comme projet la création d'une application permettant la connexion a une BDD et aussi de créer un utilisateur.

    Dans mon code pour créer mon utilisateur la requête n'ai pas faite comme si elle n'avait même pas été lu.

    voici mon code en question:

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
     
    package com.example.dylan.myapplication;
     
     
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
     
    public class register extends MainActivity {
     
        String TAG= "register";
        Thread thread2;
        Connection connexion2;
        Statement statement2;
        //ResultSet resultat2;
        // Variable de connexion
        //String serverAddress= "192.168.1.25";
        String serverAddress= "172.22.18.8";
        public String userName= "MaBase";
        public String passWord= "Mocopoc0*";
        public String dataBaseName= "mabase";
        int serverPort= 3306;
        String url= new String();
        String requete= new String();
        // Variables pour l'authentification grâce à la requête
        String utilisateur= new String();
        String motDePasse= new String();
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.register_view);
     
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                Log.i(TAG, "driver JDBC chargé");
            } catch (ClassNotFoundException e) {
                Log.i(TAG, "Erreur de chargement du driver JDBC" + e.getMessage());
            } catch (IllegalAccessException e) {
                Log.i(TAG, "Erreur (2) de chargement du driver JDBC" + e.getMessage());
            } catch (InstantiationException e) {
                Log.i(TAG, "Erreur (3) de chargement du driver JDBC" + e.getMessage());
            }
     
            Button btnregister = (Button) findViewById(R.id.btnTest2);
            btnregister.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    EditText UserName = (EditText) findViewById(R.id.editUserName);
                    utilisateur = UserName.getText().toString();
                    EditText editPassword = (EditText) findViewById(R.id.editPassword);
                    motDePasse = editPassword.getText().toString();
                    url = "jdbc:mysql://" + serverAddress + String.format(":%d/", serverPort) + dataBaseName;
                    requete = "INSERT  INTO  login('nom','password') VALUES('"+utilisateur+"','"+motDePasse+"')";
                    thread2 = new Thread(runDataBase);
                    if (thread2 != null) {
                        thread2.start();
                        Log.i(TAG, "Thread crée " + thread2.isAlive());
                    } else {
                        Log.d(TAG, "Pb de création de Thread Connect");
                    }
                }
            });
        }
     
        private Runnable runDataBase= new Runnable()
        {	public void run()
            {  	Log.i(TAG, "Connect start");
                Log.i(TAG,"url "+url+" "+userName+" "+passWord);
                try
                {	try
                    {   connexion2 = DriverManager.getConnection(url, userName, passWord);
                    }
                    catch (java.sql.SQLException e)
                    {	handler.sendEmptyMessage(-2);
                        return;
                    }
                    // Création de l'objet gérant les requètes
                    statement2= connexion2.createStatement();
                    statement2.executeUpdate(requete);
                    Log.i(TAG, "Requête "+requete);
                    connexion.close();
                }
                catch (java.sql.SQLException e)
                {	handler.sendEmptyMessage(-1);
                }
            }
        };
     
        private Handler handler = new Handler()
        {
            public void handleMessage(android.os.Message msg)
            {	switch(msg.what)
            {   case 0: Toast.makeText(getBaseContext(), "enregistrement OK", Toast.LENGTH_SHORT).show();
                break;
                case -1:Toast.makeText(getBaseContext(), "Problème d'enregistrement", Toast.LENGTH_SHORT).show();
                    break;
                case -2:Toast.makeText(getBaseContext(), "Erreur d'enregistrement", Toast.LENGTH_SHORT).show();
                    break;
                default:Toast.makeText(getBaseContext(), "Erreur inconnue", Toast.LENGTH_SHORT).show();
            }
            };
        };
    }
    en effet, lorsque je lance mon application et souhaite faire un enregistrement j'ai le message sur mon mobile : "problème d'enregistrement"
    mais je n'ai aucun message d'erreur dans mes logs.

    avez-vous une idée de mon erreur ?

    cordiament

  2. #2
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Si tu as un moyen de récupérer ce qui se passe ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    catch (java.sql.SQLException e){
            // récupérer ici e.getMessage() pour voir quel est le soucis
            // e.getErrorCode() peut aider aussi
    	handler.sendEmptyMessage(-1);
    }

    e.getErrorCode() renvoie un entier, affiche le dans ton message pour voir au moins la cause de l'erreur



    Sinon, notes sur ton code :
    On ne fait pas "String url= new String();", ça ne sert à rien à part utiliser de la mémoire pour rien.

    Tes paramètres user/mot de passe/requête sont des variables de ton instance et sont utilisées dans un thread qui accède directement aux valeurs : c'est pas thread safe du tout ! Si tes valeurs sont modifiées avant la fin de l'exécution de ton thread, tu auras un comportement incohérent

    C'est dangereux de monter une connexion base de données directement depuis une application Android( accessoirement, ça veux dire qu'au final ton téléphone aura un accès direct à la base de données, c'est hyper dangereux aussi bien sur la sécurité de l'accès au données, mais si tu as trop d'utilisateurs en même temps, tu risque de saturer le nombre de connexion simultanées à la base de données)

    url = "jdbc:mysql://" + serverAddress + String.format(":%d/", serverPort) + dataBaseName; : pourquoi faire du formatage de chaine avec ton numéro de port uniquement?
    Quitte, soit fait le entièrement :
    url = String.format("jdbc://%s:%d/%s", serverAddress , serverPort, dataBaseName);
    Soit fait la concatenation directement :
    url = "jdbc:mysql://" + serverAddress + ":" + serverPort + "/" + dataBaseName;

    Cette méthode de requêtage d'expose à de l'injection SQL :
    requete = "INSERT INTO login('nom','password') VALUES('"+utilisateur+"','"+motDePasse+"')";
    Utilises un PreparedStatement (ce qui te permettra de ne plus reconstruire ta requête à chaque fois d'ailleurs)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    super, merci pour ton aide.

    cela m'a permis de voir que l'erreur venait de ma requête qui n'avait pas la bonne syntaxe.
    $Du coup je viens de faire la corrections et tout est ok.

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

Discussions similaires

  1. Requête insert qui ne fonctionne pas .
    Par Pioul dans le forum VBA Access
    Réponses: 7
    Dernier message: 21/05/2008, 12h28
  2. [ODBC] une requete d'insertion qui ne fonctionne pas
    Par boulhous dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/05/2006, 13h56
  3. Insert qui ne fonctionne pas
    Par Nyrianne dans le forum Outils
    Réponses: 7
    Dernier message: 09/01/2006, 17h50
  4. [MySQL] Requête update qui ne fonctionne pas
    Par Sylvain245 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/12/2005, 16h40
  5. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10

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