Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur lors insertion données SQLITE

Sujet résolu
    14 septembre 2019 à 12:28:13

    Bonjour à tous, 

    Lorsque j'essaye d'insérer des données dans ma base de données, j'obtiens toujours des ID valeur négtives -1. J'ai déjà fait quelques sur ce qui peut avoir causé le problème mais cela ne m'a pas aidé. Je vous donne ci-après les deux classes que j'ai utilisées. MainActivity et DBManager.

    MAIN ACTIVITY

    package com.example.database;
    
    import android.content.ContentValues;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    DBManager dbManag;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
             dbManag = new DBManager(this);
        }
    
        public void buSave(View view) {
            EditText userName = (EditText) findViewById(R.id.name);
            EditText passWord = (EditText)findViewById(R.id.password);
            ContentValues values = new ContentValues();
            values.put(DBManager.ColUserName,userName.getText().toString());
            values.put(DBManager.ColPassword,passWord.getText().toString());
            long id = dbManag.Insert(values);
            if(id>0){
                Toast.makeText(getApplicationContext(),"Data inserted",Toast.LENGTH_LONG).show() ;       }
    
        }
    
        public void buLoad(View view) {
        }
    }
    

    DBMANAGER

    package com.example.database;
    
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;
    import android.widget.Toast;
    
    public class DBManager {
        public long ID;
        public SQLiteDatabase sqlDb;
        static final String DBName = "Students";
        static final String TableName = "Logins";
        static final String ColUserName = "UserName";
        static final String ColPassword = "PassWord";
        static final int DBVersion = 3;
        static final String CreateTable = "CREATE TABLE " + TableName + " (ID INTEGER PRIMARY KEY AUTOINCREMENT,"
                + ColUserName + "TEXT," + ColPassword + " TEXT); ";
    
        static class DatabaseHelperUser extends SQLiteOpenHelper {
            Context context;
    
            DatabaseHelperUser(Context context) {
                super(context, DBName, null, DBVersion);
                this.context = context;
            }
    
            @Override
            public void onCreate(SQLiteDatabase db) {
                db.execSQL(CreateTable);
                Toast.makeText(context, "Database is created", Toast.LENGTH_LONG).show();
            }
    
            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                db.execSQL("Drop table IF EXISTS " + TableName);
                Toast.makeText(context, "Database is updated", Toast.LENGTH_LONG).show();
                onCreate(db);
            }
        }
    
        public DBManager(Context context) {
            DatabaseHelperUser db = new DatabaseHelperUser(context);
            sqlDb = db.getWritableDatabase();
        }
    
        public long Insert(ContentValues values) {
    
            try {
    
                long ID = sqlDb.insert(TableName, "", values);
    
            } catch (Exception e) {
                Log.d("Error", String.valueOf(e));
            }
    
            return  ID;
    
    
        }
    }
    
    




    • Partager sur Facebook
    • Partager sur Twitter
      16 septembre 2019 à 10:14:04

      Salut,

      Tu as deux variables ID. Une quj est dans le try et dont la portée ne va pas plus loin et une en tant qu'attribut. Tu renvoies systématiquement celle qui est attribut de classe sans jamais réellement l'initialiser.

      • Partager sur Facebook
      • Partager sur Twitter
        17 septembre 2019 à 8:56:26

        rolandl a écrit:

        Salut,

        Tu as deux variables ID. Une quj est dans le try et dont la portée ne va pas plus loin et une en tant qu'attribut. Tu renvoies systématiquement celle qui est attribut de classe sans jamais réellement l'initialiser.


        Bonjour, j'ai déjà modifié l'ID comme suit mais le problème était le même. Le voici: 

         public long Insert(ContentValues values) {
        
        
                     return sqlDb.insert(TableName, "", values);
        
        
        
            }

        Par contre, j'ai pu le résoudre en touchant à la variable CreateTable. Je ne sais pas vraiment ce qui a causé le problème mais j'ai simplement effacé puis retapé les mêmes instructions. Cela a résolu mon problème. Voici le nouveau variable qui a fonctionné:

           static final String CreateTable = "CREATE TABLE " + TableName + " (ID INTEGER PRIMARY KEY AUTOINCREMENT,"
                    + ColUserName + " TEXT," + ColPassword + " TEXT ); ";
        

        Tu aperçois des différences? Merci d'avance


        -
        Edité par LucienRazafy 17 septembre 2019 à 8:57:32

        • Partager sur Facebook
        • Partager sur Twitter

        Erreur lors insertion données SQLITE

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown