2016-07-31 2 views
0

db.insert(table_name,null,contentValues); renvoie toujours -1 et n'insère pas les valeurs dans les bases de données.ContentValues ​​Insert renvoie toujours la valeur -1

Pouvez-vous s'il vous plaît m'aider à comprendre ce que je fais le mal?

database_class.java:

public class database_class extends SQLiteOpenHelper { 
    public static final String database_name = "signup_db"; 
    public static final String table_name = "signup"; 
    public static final String column_1 = "FIRST_NAME"; 
    public static final String column_2 = "SECOND_NAME"; 
    public static final String column_3 = "EMAIL"; 
    public static final String column_4 = "PASSWORD"; 
    public static final String column_5 = "c_password"; 

    public database_class(Context context){ 
     super(context,database_name , null, 1); 
     //Toast.makeText(context, "Class called ", Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("create table" + table_name + "(ID INTEGER PRIMARY KEY AUTOINCREMENT , FIRST_NAME TEXT , SECOND_NAME TEXT , EMAIL TEXT , PASSWORD TEXT)"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int i, int i1) { 
     db.execSQL("DROP TABLE IF EXISTS" + table_name); 
     onCreate(db); 
    } 
    public boolean insertData(String first_name, String second_name, String email, String password){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(column_1,first_name); 
     contentValues.put(column_2,second_name); 
     contentValues.put(column_3,email); 
     contentValues.put(column_4,password); 
     long result = db.insert(table_name,null,contentValues); 
     if (result == -1) 
      return false; 
     else 
      return true; 

    } 
} 

Code MainActivity:

fn = editText1.getText().toString(); 
ln = editText2.getText().toString(); 
em = editText3.getText().toString(); 
pass = editText4.getText().toString(); 
cpass = editText5.getText().toString(); 

if (1 == 1) { 
    //boolean isInserted = mydb.insertData(signup_values[0].toString(),signup_values[1].toString(),signup_values[2].toString(),signup_values[3].toString()); 
    boolean isInserted = mydb.insertData(fn,ln,em,pass); 
    if(isInserted == true) { 
     Toast.makeText(MainActivity.this, "Data Inserted", Toast.LENGTH_SHORT).show(); 
    } 
    else 
     Toast.makeText(MainActivity.this, "Data not Inserted", Toast.LENGTH_SHORT).show(); 
} 
else 
    Toast.makeText(MainActivity.this, "Password Mismatch", Toast.LENGTH_SHORT).show(); 
+0

Je ne suis pas un développeur Android, mais étant donné que je ne vois pas un moyen d'obtenir l'erreur de la db, je voudrais vérifier que le db vous insérez à est disponible et ouvert avant d'essayer de faire votre insertion. – Gavin

+0

Indice: découvrez les conventions de nommage Java. Les classes commencent en majuscules, les variables n'ont pas _ dans leurs noms. D'ailleurs: vos noms sont plutôt horribles! Il n'y a pas besoin de sauvegarder les caractères; comme: qu'est-ce que je veux dire? em? passer? cpass? Utilisez des noms qui disent ce que le truc qu'ils désignent ** est **. Et soit utilisez un tableau pour vos champs de texte; ou donnez ces noms appropriés aussi. Enfin: pensez à ne pas utiliser de statique partout dans vos champs. Vous voyez - vous pouvez faire du nom db un champ que vous donnez à votre classe dans le constructeur par exemple. – GhostCat

+0

@GhostCat Essayez de résoudre le problème, pas nitpick la syntaxe;) Vous perdez votre souffle –

Répondre

3

Je crois qu'il ya une erreur lors de la création de votre base de données. De cette façon, la table create échouera et insert échouera également (car la table n'a pas été créée correctement).

D'autres parties de votre code semble OK ...

Cette ligne, produira chaîne suivante:

db.execSQL("create table" + table_name + "(ID INTEGER PRIMARY KEY AUTOINCREMENT , FIRST_NAME TEXT , SECOND_NAME TEXT , EMAIL TEXT , PASSWORD TEXT)"); 

Résultat:

create tablesignup(ID INTEGER PRIMARY KEY AUTOINCREMENT , FIRST_NAME TEXT , SECOND_NAME TEXT , EMAIL TEXT , PASSWORD TEXT) 

Ce n'est pas valide la commande SQL. Alors, essayez d'ajouter des espaces comme:

db.execSQL("create table " + table_name + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, FIRST_NAME TEXT, SECOND_NAME TEXT, EMAIL TEXT, PASSWORD TEXT)"); 

Erreur 2

Votre onUpgrade() travail a également l'habitude en raison de la même erreur:

db.execSQL("DROP TABLE IF EXISTS" + table_name); 

besoin d'ajouter des espaces comme:

db.execSQL("DROP TABLE IF EXISTS " + table_name); 

Finale ly

J'ai testé votre code et fonctionne correctement. Peut-être, une erreur s'est produite avant et il serait bon de "réinstaller" la base de données.

Comment vous pouvez faire:

  • Unistall/Installer votre application

  • Mettez à jour votre version de la base pour forcer onUpgrade(). Il suffit de faire: super(context, database_name , null, 2); à onCreate()

+0

Vous avez répondu était logique et j'ai changé ma requête avec les espaces, mais toujours son retour la valeur -1. –

+0

@MudasirRao J'ai mis à jour ma réponse. Ensuite, j'ai testé le code de résultat et cela fonctionne bien ... Si l'erreur persiste, désinstallez/réinstallez l'application pour forcer la création de la base de données à nouveau – W0rmH0le

+0

Merci beaucoup. Maintenant, cela fonctionne bien. Merci pour votre temps. –