2017-02-05 6 views
0

Beim Versuch, einen neuen Eintrag in eine SQLite-Datenbank in Android einzufügen, schlägt die Einfügung aufgrund eines Syntaxfehlers fehl. Es scheint, dass die Abfrage, die gebildet wird, die Werte nicht enthält, die zu der ContentValues-Instanz hinzugefügt werden, aber warum weiß ich nicht. Kann mir jemand auf den Fehler hinweisen? HierIn SQLite einfügen DB schlägt mit ContentValues ​​fehl

ist die Fehlermeldung:

E/SQLiteLog: (1) near "TEXT": syntax error 
E/SQLiteDatabase: Error inserting TIME_DATE TEXT=barbaz TRANSCRIPT TEXT=foobar 
android.database.sqlite.SQLiteException: near "TEXT": syntax error (code 1): , while compiling: INSERT INTO approvals_t(TIME_DATE TEXT,TRANSCRIPT TEXT) VALUES (?,?) 

Und hier ist der Code, den ich benutze es zu testen:

public boolean insertData(String transStr, String timeStr) { 

SQLiteDatabase db = this.getWritableDatabase(); 

ContentValues cValues = new ContentValues(); 
cValues.put(TRANS_COL,"foobar"); 
cValues.put(TIME_COL,"barbaz"); 

// res is -1, the values couldn't be inserted 
long res = db.insert(APVLS_TABLE_NAME,null,cValues); 

if(res != -1) 
    return true; 
else 
    return false; 
} 

(Edit) Der Rest des Codes

public class DBHelper extends SQLiteOpenHelper implements BaseColumns { 

public static final String DB_NAME = "Transcripts.db"; 
public static final String APVLS_TABLE_NAME = "approvals_t"; 
public static final String ID_COL = BaseColumns._ID; 
public static final String TRANS_COL = "TRANSCRIPT TEXT"; 
public static final String TIME_COL = "TIMEDATE TEXT"; 

public DBHelper(Context context) { 
    super(context, DB_NAME, null, 1); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    // Create a sql command that builds a table 
    String SQL_CREATE_APVLS_TABLE = "CREATE TABLE " + APVLS_TABLE_NAME + " (" 
      + ID_COL + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
      + TRANS_COL + ", " 
      + TIME_COL + ");"; 

    // Execute sql statement 
    db.execSQL(SQL_CREATE_APVLS_TABLE); 
} 
+0

Konnten Sie Ihre create table-Methode und die Deklaration der Variablen posten? – KoalaKoalified

+0

@KoalaKoalified Np, fertig. –

+1

@VictorBrunell Das Problem liegt daran, dass Sie beim Einfügen die Konstanten TRANS_COL und TIME_COL verwenden. Und diese Konstanten haben den TYPE des Feldes in der Tabelle, während das Einfügen nur den Namen des Feldes und nicht den Namen und den Typ enthalten sollte. – Jonas452

Antwort

2

Einige Änderungen an Ihren Deklarationen:

public static final String TRANS_COL = "TRANSCRIPT"; 
public static final String TIME_COL = "TIMEDATE"; 

Um die create table:

String SQL_CREATE_APVLS_TABLE = "CREATE TABLE " + APVLS_TABLE_NAME + " (" 
     + ID_COL + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
     + TRANS_COL + " TEXT, " 
     + TIME_COL + " TEXT);"; 

Der Grund seine nicht funktioniert ist, dass Sie den Text dieser Variablen angehängt haben, die ein Feld mit den Namen als Typ TEXT macht aber nicht enthalten sind die Worte „TEXT“ Am Ende des Spaltennamens können Sie daher nicht aus einer Spalte namens "TRANSCRIPT TEXT" auswählen.

Auch einige andere Änderungen würde ich vorschlagen, dies zu ändern:

public DBHelper(Context context) { 
    super(context, DB_NAME, null, 1); 
} 

An:

private static final int dbVersion = 1; 

public DBHelper(Context context) { 
    super(context, DB_NAME, null, dbVersion); 
} 

, die, wenn Sie jemals sichergestellt, mögen Ihre Versionen ändern, es ist nur durch eine Variable, anstatt zu ändern des Konstruktors.

und wenn nach Unterstützung Daten prüfung:

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

EDIT:

Auch Ihr Sie gehen in einige Probleme laufen, während schließlich das Einfügen ... stellen Sie sicher, Ihre Standard-ID der Klasse Einsetzen über -1 so wird die ID über die nächsten Inkrementierung überschrieben und Ihre Insert-Anweisung ändern:

db.insertWithOnConflict(TABLE_NAME, null, contentValues, SQLiteDatabase.CONFLICT_REPLACE); 
es ist Ihre IDs von einschließlich

Dann nur eine Frage, wenn Immer möchten Sie einen Eintrag aktualisieren, anstatt eine ganze Reihe von Update-Anweisungen zu schreiben.

+0

Danke. Das hat wie ein Zauber funktioniert. –

+0

Großartig, Gern geschehen. – KoalaKoalified

Verwandte Themen