3
votes

Comment insérer des données dans sqlite via l'entrée utilisateur?

Je suis un débutant dans la création d'applications mobiles. J'ai essayé de mettre la fonction d'insertion de données dans mon studio Android, mais il semble que cette fonction d'insertion ne fonctionne pas et que les données d'entrée ne peuvent pas être insérées. Veuillez aider.

J'ai mis du code dans MainActivity.java et DatabaseHelper.java. Cela ne me donne aucun rapport d'erreur, mais lorsque j'ai essayé d'exécuter l'émulateur et les données d'entrée, mon entrée peut être insérée dans la base de données sqlite.

// oncreateMainActivity

public boolean insertData(String childname ,String bornday, String areaprogram, String receiverid){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL1, childname);
        contentValues.put(COL2, bornday);
        contentValues.put(COL3, areaprogram);
        contentValues.put(COL4, receiverid);

        long result = db.insert(TABLE_NAME, null, contentValues);

        if(result == -1){
            return false;
        }
        else{
            return true;
        }
    }


8 commentaires

montrez-nous votre fonction insertData


@JohnJoe Oh, le code de la fonction insertData est dans DatabaseHelper.java ci-dessus. Veuillez aider. Je vous remercie..


à quel problème faites-vous face maintenant? Les données sont insérées à l'aide de l'émulateur, mais pas dans un appareil réel?


@JohnJoe Oui, j'utilise toujours l'émulateur, pas encore dans un appareil réel. mais quand j'ai essayé de mettre le fichier de base de données, seules la base de données et les tables ont été créées mais pas les données que j'ai entrées.


Dans la fonction insertData2, a-t-il affiché Success to add data! ?


@JohnJoe Non, il ne parvient pas à insérer les données.


vérifiez ma réponse, utilisez try and catch pour voir ce qui se passe.


@JohnJoe J'ai essayé vos conseils et je reçois volontiers un message d'erreur, merci de m'aider à trouver l'erreur. J'ai mis le message d'erreur sous votre réponse et je vais vérifier l'erreur pour voir ce que je dois faire. Je le mettrai à jour plus tard.


3 Réponses :


0
votes

Votre classe DatabaseHelper a-t-elle un objet SQLiteDatabase qui exécute la commande SQL.

    SQLiteDatabase database
    String myTable = ("CREATE TABLE IF NOT EXISTS myTable (yourColumns);");
    database.execSQL(myTable);
    database.execSQL("INSERT INTO myTable(yourData);"


1 commentaires

Oui j'ai. La base de données et la colonne peuvent être créées mais j'obtiens un problème d'insertion de données. La fonction d'insertion se trouve dans la zone DatabaseHelper.java ci-dessus. Qu'est-ce que tu en penses? merci ... @PvCruz



0
votes

Le 1er paramètre de la méthode put () est le nom de la colonne, mais vous transmettez la valeur.
Remplacez-la (bien sûr, remplacez par les noms de vos colonnes comme "Nom" , "Date de naissance" , etc):

public boolean insertData(String Name,String Birthdate,String Area, String ID){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(ColunNameForName, Name);
    contentValues.put(ColunNameForBirthdate, Birthdate);
    contentValues.put(ColunNameForArea, Area);
    contentValues.put(ColunNameForID, ID);

    long result = db.insert(TABLE_NAME, null, contentValues);

    if(result == -1){
        return false;
    }
    else{
        return true;
    }
}


5 commentaires

Oui, car je mets le nom de la colonne de la même manière avec le nom de la chaîne. Est-ce la cause de ce problème d'insertion de données? @forpas


Tous ces paramètres: String Name, String Birthdate, String Area, String ID contiennent les valeurs que vous souhaitez insérer, comme Bob, 2019-04-07, quelque part, 10 . Ce ne sont pas des noms de colonnes.


Oh je vois. Je reçois votre explication et j'ai édité le premier paramètre input (), mais je suis toujours confronté au même problème.> <(J'ai révisé mon code dans DatabaseHelper.java ci-dessus).


Quel est le problème? Publiez la classe SQLiteOpenHelper.


merci, il a été résolu !! Je change le code en fonction de vos conseils et crée également un nouvel émulateur pour créer une nouvelle base de données et cela fonctionne! Je peux insérer mes données d'entrée dans sqlite.



1
votes

Cela ne me donne aucun rapport d'erreur

Vous devriez utiliser le bloc try and catch pour voir ce qui se passe.

try{
   boolean add_data = myDb.insertData(name,birth,area,receiver);
   Toast.makeText(MainActivity.this,"Success to add data!", Toast.LENGTH_LONG).show();
}catch(Exception e){
   e.printStackTrace();
}

5 commentaires

2019-04-08 11: 28: 30.444 18153-18153 / com.example.inputgetdata E / SQLiteLog: (1) table sponsorship_table n'a pas de colonne nommée child_name 2019-04-08 11: 28: 30.448 18153-18153 / com.example .inputgetdata E / SQLiteDatabase: Erreur lors de l'insertion de date de naissance = 29011989 nom_enfant = erik receiver_id = 1 area_program = nias android.database.sqlite.SQLiteException: la table sponsorship_table n'a pas de colonne nommée nom_enfant (code 1 SQLITE_ERROR):, lors de la compilation: INSERT INTO sponsorship_table , nom_enfant, id_receveur, ram de progression de la zone) VALEURS (?,?,?,?)


êtes-vous sûr d'avoir child_name ?


Merci John, ta réponse m'aide tellement à savoir quelle erreur est dans mon code !!


Oui, j'ai la colonne child_name. Le problème est que lorsque j'utilise le même émulateur et que j'essaye de réviser ma base de données, ce même émulateur exécutera l'ancien code. J'ai besoin de créer un nouvel émulateur lorsque j'ai révisé mon code.


Je pense qu'il vous suffit de réinstaller votre application au lieu de créer un nouvel émulateur. Chaque fois que vous créez / modifiez une table ou une colonne, vous devez réinstaller à nouveau. Est-ce à cause du problème de version.