2016-07-31 6 views
0

db.insert(table_name,null,contentValues); gibt immer -1 zurück und es fügt die Werte nicht in die Datenbanken ein.ContentValues ​​Einfügen gibt immer die -1

Können Sie mir bitte helfen, herauszufinden, was ich falsch mache?

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; 

    } 
} 

MainActivity Code:

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

Ich bin kein Android-Entwickler, aber da ich nicht einen Weg sehen, um den Fehler aus der db zu bekommen, würde ich prüfen, dass die db Sie einfügen zur Verfügung steht und offen bevor Sie versuchen, Ihren Einsatz zu tun. – Gavin

+0

Hinweis: Lesen Sie über Java-Namenskonventionen. Klassen beginnen Großbuchstaben, Variablen haben nicht _ in ihren Namen. Außerdem: Deine Namen sind ziemlich schrecklich! Es gibt keine Notwendigkeit, Zeichen zu speichern; wie: was soll das heißen? em? bestehen? Kompass? Verwenden Sie Namen, die sagen, was das Ding sie bezeichnen ** ist **. Und verwende entweder ein Array für deine Textfelder; oder geben Sie auch die entsprechenden Namen an. Schließlich: Ziehen Sie in Betracht, für Ihre Felder nicht überall statische Daten zu verwenden. Sie sehen - Sie können den Datenbanknamen zu einem Feld machen, das Sie beispielsweise Ihrer Klasse im Konstruktor geben. – GhostCat

+0

@GhostCat Versuchen Sie, das Problem zu lösen, nicht die Syntax nitpick;) Sie verschwenden den Atem –

Antwort

3

Ich glaube, es ist ein Fehler, während die Datenbank. Auf diese Weise schlägt create Tabelle fehl und insert wird auch fehlschlagen (weil Tabelle nicht ordnungsgemäß erstellt wurde).

Andere Teile des Codes scheint OK ...

Diese Zeile wird folgende Zeichenfolge produzieren:

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

Ergebnis:

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

Dies gilt nicht, SQL-Befehl. Also, versuchen, einige Räume hinzufügen:

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

Fehler 2

Ihre onUpgrade() auch nicht funktionieren wegen gleichen Fehler:

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

Brauchen Sie einige Räume wie hinzuzufügen:

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

Endgültig ly

Ich habe Ihren Code getestet und funktioniert gut. Vielleicht ist vorher ein Fehler passiert und es wäre gut, die Datenbank neu zu installieren.

Wie Sie tun können:

  • Unistall/Install App

  • Aktualisieren Sie Ihre Datenbank-Version onUpgrade() zu erzwingen. Just do: super(context, database_name , null, 2); bei onCreate()

+0

Sie antworteten war logisch und ich änderte meine Abfrage mit den Leerzeichen, aber immer noch die Rückgabe der -1-Wert. –

+0

@MudasirRao Ich aktualisierte meine Antwort. Dann habe ich den Ergebniscode getestet und es funktioniert gut ... Wenn der Fehler weiterhin besteht, installiere die App erneut, um die Datenbankerstellung erneut zu erzwingen – W0rmH0le

+0

Vielen Dank. Jetzt funktioniert es gut. Vielen Dank für Ihre Zeit. –

Verwandte Themen