2016-04-19 18 views
-3

Ich bin fast fertig mit dem Erstellen meiner ersten Datenbank, aber ich denke, einige der Syntax in meinem oncreate ist falsch. Ich kann nicht herausfinden, wo aber? Ich habe versucht, Tutorials anzuschauen und habe versucht, meinen Code auf ihren zuzuschneiden, aber nichts scheint zu funktionieren.SQLite Datenbankfehler bei der Eingabe von Daten

package com.example.bash1.sqlitediss; 
import android.content.ContentValues; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class DatabaseHelper extends SQLiteOpenHelper { 
// Database name 
public static final String DATABASE_STOCKDB = "Stock.db"; 
// Column names 
public static final String TABLE_NAME = "stock_table"; 
public static final String COL_1 = "ID"; 
public static final String COL_2 = "Name"; 
public static final String COL_3 = "Datereceived"; 
public static final String COL_4 = "Expirydate"; 

public DatabaseHelper(Context context) { 
    super(context, DATABASE_STOCKDB, null, 1); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table stock_table " + TABLE_NAME + " (" + COL_1 + "INTEGER PRIMARY KEY,"+ COL_2 + "INTEGER,"+ COL_3 + "INTEGER," + COL_4 +"INTEGER" + ")"); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 

    onCreate(db); 
} 

public boolean insertData(String Name, String Datereceived, String Expirydate){ 
SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(COL_2, Name); 
    contentValues.put(COL_3, Datereceived); 
    contentValues.put(COL_4, Expirydate); 
    long result = db.insert(TABLE_NAME,null,contentValues); 

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

    } 
} 

Der Fehler ist wie folgt:

Fehler beim Einfügen Name = sss DateReceived = s = ExpiryDate s`

android.database.sqlite.SQLiteException: Tabelle stock_table hat keine Spalte mit dem Namen Namen (Code 1):, beim Kompilieren: (?,?,?) INSERT INTO stock_table (Name, DateReceived, ExpiryDate) VALUES

+0

Es ist offensichtlich, dass Ihre Tabelle stock_table keine Spalte namens Name hat, nur das Lesen der Ausnahme Hinweise Sie gut. . . – GingerHead

Antwort

0

Sie haben "create table stock_table" + TABLE_NAME - Du duplizierst den Tabellennamen. Außerdem gibt es zwischen Ihren Spaltennamen und ihrem Typ keinen Platz. Versuchen Sie COL_1 + " INTEGER..." für jede Ihrer Spalten.

Überprüfen Sie auch, ob die Werte an insertData übergeben wurden. Sie übergeben String, definieren jedoch die Spalten als INTEGER. Sind Sie sicher, dass Sie TEXT für die Spalten nicht möchten?

Weitere Informationen finden Sie unter this.

Dieser Code funktioniert für mich richtig:

public class DatabaseHelper extends SQLiteOpenHelper { 
    // Database name 
    public static final String DATABASE_STOCKDB = "Stock.db"; 
    // Column names 
    public static final String TABLE_NAME = "stock_table"; 
    public static final String COL_1 = "ID"; 
    public static final String COL_2 = "Name"; 
    public static final String COL_3 = "Datereceived"; 
    public static final String COL_4 = "Expirydate"; 


    public DatabaseHelper(Context context) { 
    super(context, DATABASE_STOCKDB, null, 1); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table " + TABLE_NAME + " (" + COL_1 + " INTEGER PRIMARY KEY,"+ COL_2 + " TEXT,"+ COL_3 + " TEXT," + COL_4 +" TEXT" + ")"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 

    onCreate(db); 
    } 

    public boolean insertData(String Name, String Datereceived, String Expirydate){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(COL_2, Name); 
    contentValues.put(COL_3, Datereceived); 
    contentValues.put(COL_4, Expirydate); 
    long result = db.insert(TABLE_NAME,null,contentValues); 
    if (result == -1) 
     return false; 
    else 
     return true; 

    } 

} 

Auch in es möglich, dass die Datenbank in einem inkonsistenten Zustand befindet, wenn Sie die App lief und verändert dann die Datenbank-Design/Schema und Sie nicht richtig erhöhen die Versionsnummer Versuchen Sie, die App vollständig zu deinstallieren und neu zu installieren.

+0

Soll ich TABLE_NAME aus dieser Zeile entfernen? –

+0

Entfernen Sie "stock_table". Was Sie jetzt haben, ist im Wesentlichen, '" create table stock_table stock_table ... "' –

+0

Nur entfernt es, so dass es als '' db.execSQL ("Tabelle erstellen" + TABLE_NAME + "(" + COL_1 + "INTEGER PRIMARY KEY, "+ COL_2 +" INTEGER, "+ COL_3 +" INTEGER, "+ COL_4 +" INTEGER "+"); ' ' Derselbe Fehler tritt auf ... 'android.database.sqlite.SQLiteException: Tabelle stock_table hat keine Spalte mit dem Namen Name (Code 1):, beim Kompilieren: INSERT INTO stock_table (Name, Empfangen, Expirydate) VALUES (?,?,?) ' Nochmals vielen Dank für Ihre Hilfe. –

0

Das Problem ist, dass Ihr create table-Befehl keinen Raum zwischen den Spaltennamen und Typ hat -

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table stock_table " + TABLE_NAME + " (" + COL_1 + "INTEGER PRIMARY KEY,"+ COL_2 + "INTEGER,"+ COL_3 + "INTEGER," + COL_4 +"INTEGER" + ")"); 
} 

Das ist, warum Sie nicht Spalte „Name“, sondern „NameINTEGER“ haben. Ähnliches Problem gibt es auch bei anderen Spalten. Außerdem fügen Sie Textwerte ein, aber Sie haben Spalten vom Typ Integer. Ändern Sie daher die Spalten außer dem Primärschlüssel in Texttypspalten. Ändern Sie es in -

+0

Hallo Shadab, habe es geändert in ... 'db.execSQL (" Tabelle erstellen "+ TABELLE_NAME +" ("+ COL_1 +" INTEGER PRIMÄRSCHLÜSSEL, "+ COL_2 +" TEXT, "+ COL_3 +" TEXT, "+ COL_4 + "TEXT" + ")"); ' Was nun korrekt sein sollte, zeigt die Fehlermeldung, dass es kein Kollum namens Name –

+0

hat Kopiere genau den gleichen Code den ich geschrieben habe und lass es mich wissen. . –

+0

Gleicher Fehler nach dem Kopieren genau! –

Verwandte Themen