2012-04-05 18 views
0

Von dem, was ich sagen kann, scheint es wie es die addTask contentvalues ​​in der falschen Reihenfolge übergeben, aber ich sehe nicht warum. Die addUser-Methode wird auf die gleiche Weise implementiert und funktioniert einwandfrei.Sqlite Fehlercode 1, msg Syntax Fehler

Der Fehler, den ich bekomme und alle relevanten Code ist hier. Jede Hilfe wird geschätzt.

04-05 23:09:37.465: I/SqliteDatabaseCpp(606): sqlite returned: error code = 1, msg = near >"id": syntax error, db=/data/data/edu.flying.panda.taskmanager/databases/dbManager

04-05 23:09:37.545: E/SQLiteDatabase(606): Error inserting detail= type=SCHOOL date= location= user id=1 description=sdfg completed=false

04-05 23:09:37.545: E/SQLiteDatabase(606): android.database.sqlite.SQLiteException: near "id": syntax error: , while compiling: INSERT INTO tasks(detail,type,date,location,user id,description,completed) VALUES (?,?,?,?,?,?,?)

package edu.flying.panda.taskmanager; 

import java.util.ArrayList; 
import java.util.List; 
import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class DatabaseHandler extends SQLiteOpenHelper { 
    // current user id 
    private static int CURRENT_USER_ID; 
    // db version 
    private static final int DATABASE_VERSION = 1; 
    // db name 
    private static final String DATABASE_NAME = "dbManager"; 
    // table name 
    private static final String TABLE_USERS = "users"; 
    private static final String TABLE_TASKS = "tasks"; 
    // user table column names 
    private static final String USER_KEY_ID = "id"; 
    private static final String USER_KEY_USERNAME = "username"; 
    private static final String USER_KEY_PASSWORD = "password"; 
    private static final String USER_KEY_NAME = "name"; 
    private static final String USER_KEY_EMAIL = "email"; 
    // task table column names 
    private static final String TASK_KEY_ID = "id"; 
    private static final String TASK_KEY_USERID = "user id"; 
    private static final String TASK_KEY_DESCRIPTION = "description"; 
    private static final String TASK_KEY_LOCATION = "location"; 
    private static final String TASK_KEY_DATE = "date"; 
    private static final String TASK_KEY_DETAIL = "detail"; 
    private static final String TASK_KEY_TYPE = "type"; 
    private static final String TASK_KEY_COMPLETED = "completed"; 


    // constructor 
    public DatabaseHandler(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    // Creating Tables 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String CREATE_USERS_TABLE = 
       String.format("CREATE TABLE %s (%s INTEGER PRIMARY KEY, %s TEXT, %s TEXT, %s TEXT, %s TEXT);", 
         TABLE_USERS, USER_KEY_ID, USER_KEY_USERNAME, USER_KEY_PASSWORD, 
         USER_KEY_NAME, USER_KEY_EMAIL); 
     String CREATE_TASKS_TABLE = 
       String.format("CREATE TABLE %s (%s INTEGER PRIMARY KEY, %s INTEGER, %s TEXT, %s TEXT, %s TEXT, %s TEXT, %s TEXT, %s INTEGER);", 
         TABLE_TASKS, TASK_KEY_ID, TASK_KEY_USERID, TASK_KEY_DESCRIPTION, TASK_KEY_LOCATION, TASK_KEY_DATE, TASK_KEY_DETAIL, TASK_KEY_TYPE, TASK_KEY_COMPLETED); 

     db.execSQL(CREATE_TASKS_TABLE); 
     db.execSQL(CREATE_USERS_TABLE); 

    } 
    // Upgrading database 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // Drop older table if existed 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_TASKS); 
     // Create tables again 
     onCreate(db); 
    } 
    public void addUser(User user) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(USER_KEY_USERNAME, user.getUsername()); 
     values.put(USER_KEY_PASSWORD, user.getPassword()); 
     values.put(USER_KEY_NAME, user.getName()); 
     values.put(USER_KEY_EMAIL, user.getEmail()); 

     // inserting row 
     db.insert(TABLE_USERS, null, values); 
     db.close(); 
    } 

    public void addTask(Task task){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 

    values.put(TASK_KEY_USERID, getCURRENT_USERID()); 
    values.put(TASK_KEY_DESCRIPTION, task.getDescription()); 
    values.put(TASK_KEY_LOCATION, task.getLocation()); 
    values.put(TASK_KEY_DATE, task.getDueDate()); 
    values.put(TASK_KEY_DETAIL, task.getDetailedDescription()); 
    values.put(TASK_KEY_TYPE, task.getType()); 
    values.put(TASK_KEY_COMPLETED, task.isCompleted()); 

    db.insert(TABLE_TASKS, null, values); 
    db.close();  
} 









} 
+0

Ist es möglich, dass Sie versuchen, einen Datensatz mit der gleichen ID wie einer, der bereits in der Tabelle ist, einzufügen? – elevine

Antwort

1

Der Fehler erscheint in Ihrem TASK_KEY_USERID zu sein, wie Sie einen Raum im Wert haben. Sollte es vielleicht ein Unterstrich sein? Eine weitere Anmerkung, die hinzugefügt werden soll, ist, dass Android Ihren primären Schlüsselspaltennamen mag, um in "_id" zu enden, welches Ihr nur "Identifikation" ist.

+0

Das hat es behoben! Vielen Dank. – Nino

Verwandte Themen