0
votes

Y at-il un moyen de vérifier une méthode s'il existe des données uniques existantes dans la base de données?

Mon objectif est de créer une méthode dans Android Studio qui vérifie s'il existe un nom d'utilisateur existant (qui est unique) dans ma base de données. Mais mon problème est que je ne sais pas pourquoi mon code mis en œuvre ne fonctionne pas et renvoie une erreur dans LogCat. L'application ne plante pas cependant.

En fait, j'ai essayé de mettre en œuvre 2 méthodes différentes. Le premier consiste à mettre tous les noms d'utilisateur existants sélectionnés de la base de données dans une arrachelist et à utiliser la méthode ArrayList.Contains (Nom d'utilisateur) pour voir si la liste contient le nom d'utilisateur similaire.

L'autre méthode que j'ai essayée en utilisant est de sélectionner un nom d'utilisateur dans la base de données identique à mon nom d'utilisateur entré et voyez s'ils sont les mêmes. (Peut sembler confus, mais je vais vous montrer le code).

MainActivity.java xxx

base de donnéesHelper.java xxx < / Pré>

Résultats attendus:

Je veux qu'il vérifie si le "nom d'utilisateur" que j'ai mis existe déjà dans la base de données ou non. Si non, exécutez la déclaration "si" et passez à l'activité suivante. Si oui, exécutez l'instruction "autre".

résultats réels:

Cependant, il s'avère que le code continue à exécuter l'instruction "si" et passe à l'activité suivante si le nom d'utilisateur entré existe déjà dans la base de données ou non. Si le nom d'utilisateur entré existe déjà dans la base de données, cela me donne cette erreur dans le logcat.

logcat xxx


0 commentaires

3 Réponses :


0
votes

Vous avez une fausse comparaison xxx

cette cause Votre programme continue à insérer même lorsque le nom d'utilisateur existe déjà.

Modification de Equals () Pour une comparaison correcte des chaînes. N'utilisez pas == pour comparer la chaîne (et les objets en général) xxx

si nom d'utilisateur n'est pas null

ou xxx


0 commentaires

0
votes

Vous devez laisser SQL faire tout le travail pour vous:

Select count(*) from sometable where username = @username


1 commentaires

Miket Réponse signifie qu'il n'est pas nécessaire de vérifier avec plus de SQL One SQL faire tout le monde.



0
votes

Vous n'affichez pas de votre insertable (userinfo) code> strud> méthode, mais si vous utilisez (en supposant que vous utilisiez la méthode EXECSQL pour insérer), puis en utilisant insert ou Ignorer code> au lieu de insérer code> puis le duplicate sera ignoré.

Cependant, si vous utilisez si vous utilisez le Insérer Méthode (cela utilise efficacement insertion ou ignorer ). Il renvoie la Rowid forte>, comme longue, de la ligne insérée, si la ligne n'était pas insérée, elle renvoie -1. Ainsi, la vérification de la valeur de retour vous indiquera que pour une raison quelconque (probablement un duplicata) que la ligne n'était pas insérée (annule donc la nécessité d'une vérification préalable et des frais généraux associés). P>

  • Comme vous avez défini les colonnes d'identité à l'aide de Integer Primary Key Autooincrerement code>, cette colonne est un alias de la colonne Rowid forte> (donc la valeur de Rowid sera donc la même que la colonne ID). LI> ul>

    Ce qui suit est le code car il pourrait peut-être être, sur la base de ce qui peut être glané du code disponible. P>

            UserInfo userInfo = new UserInfo(tvUsername.getText().toString(), etEnterPassword.getText().toString());
    
            long id;
            if (id = mydb.insertTable(userInfo) > 0) {
                Intent intent = new Intent(MainActivity.this, Lobby.class);
                intent.putExtra("username", userInfo.getUsername());
                intent.putExtra("userid",id); //<<<<<<<<<< you now have the id
                startActivity(intent);
            } else {
                // some code because user was not added
            }
    
    • Remarque Comme cela a le même nom et la même signature, cela devrait remplacer votre méthode existante ou être nommé différemment. Li>
    • note getPassword strong> peut être la mauvaise méthode utilisée pour obtenir la valeur de mot de passe à partir de l'utilisateurInfo li> ul>

      Le code dans la MainActivity.java pourrait alors être: - p> xxx pré>

      • NOTE Le code ci-dessus est en principe et peut contenir des erreurs telles que cela n'a pas été testé ou exécuté. LI> ul> p>


3 commentaires

Ceci meilleur moyen, moins pas besoin d'accès que tout cela va, moins de mémoire utilise comme étant un curseur et aussi bien moins de code.


Hey Miket, j'ai essayé votre code. La "insertion" fonctionne. Mais le problème est que si j'utilise "si (mydb.instertable (userinfo)> 0)", il renvoie la même erreur que celle mentionnée ci-dessus. Mais cela m'empêche d'aller à une autre activité.


@Samaritan L'erreur est piégée et la pile-course imprimée, mais elle n'augmente pas une exception (c'est la façon dont l'API ait été écrit).