2016-05-24 2 views
1

Я пытаюсь хранить в SQLiteDatabase некоторую информацию. Когда я вызываю метод insert, он возвращает -1. Так что произошла ошибка, но я не могу понять, что не так.Ошибка ввода SQLiteDatabase Android

Вот код:

public class SQLiteHandler extends SQLiteOpenHelper { 

private static final String TAG = SQLiteHandler.class.getSimpleName(); 

// All Static variables 
// Database Version 
private static final int DATABASE_VERSION = 1; 

// Database Name 
private static final String DATABASE_NAME = "Find"; 

// Login table name 
private static final String TABLE_USER = "user"; 

// Login Table Columns names 
private static final String KEY_ID = "id"; 
private static final String KEY_NAME = "name"; 
private static final String KEY_LAST_NAME = "last_name"; 
private static final String KEY_EMAIL = "email"; 
private static final String KEY_BIRTHDAY = "birthday"; 
private static final String KEY_DESCRIPTION = "description"; 
private static final String KEY_CITY = "city"; 
private static final String KEY_UID = "uid"; 
private static final String KEY_CREATED_AT = "created_at"; 


public SQLiteHandler(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

// Creating Tables 
@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_USER + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
      + KEY_LAST_NAME + " TEXT," + KEY_EMAIL + " TEXT UNIQUE," 
      + KEY_BIRTHDAY + "TEXT" + KEY_DESCRIPTION + "TEXT" 
      + KEY_CITY + "TEXT" + KEY_UID + " TEXT," 
      + KEY_CREATED_AT + " TEXT" + ")"; 
    db.execSQL(CREATE_LOGIN_TABLE); 

    Log.d(TAG, "Database tables created"); 
} 

// Upgrading database 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_USER); 

    // Create tables again 
    onCreate(db); 
} 

/** 
* Storing user details in database 
*/ 
public void addUser(String name, String last_name, String email, String birthday, String description, 
        String city, String uid, String created_at) { 

    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, name); // Name 
    values.put(KEY_LAST_NAME, last_name); // Last Name 
    values.put(KEY_EMAIL, email); // Email 
    values.put(KEY_BIRTHDAY, birthday); // Birthday 
    values.put(KEY_DESCRIPTION, description); // Description 
    values.put(KEY_CITY, city); // City 
    values.put(KEY_UID, uid); // Unique ID 
    values.put(KEY_CREATED_AT, created_at); // Created at 

    // Inserting Row 
    long id = db.insert(TABLE_USER, null, values); 
    db.close(); // Closing database connection 

    Log.d(TAG, "New user inserted into sqlite: " + id); 
} 

/** 
* Getting user data from database 
*/ 
public HashMap<String, String> getUserDetails() { 
    HashMap<String, String> user = new HashMap<>(); 
    String selectQuery = "SELECT * FROM " + TABLE_USER; 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    // Move to first row 
    cursor.moveToFirst(); 
    if (cursor.getCount() > 0) { 
     user.put("name", cursor.getString(1)); 
     user.put("last_name", cursor.getString(2)); 
     user.put("email", cursor.getString(3)); 
     user.put("birthday", cursor.getString(4)); 
     user.put("description", cursor.getString(5)); 
     user.put("city", cursor.getString(6)); 
     user.put("uid", cursor.getString(7)); 
     user.put("created_at", cursor.getString(8)); 
    } 
    cursor.close(); 
    db.close(); 
    // return user 
    Log.d(TAG, "Fetching user from Sqlite: " + user.toString()); 

    return user; 
} 

/** 
* Re crate database. Delete all tables and create them again 
*/ 
public void deleteUsers() { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    // Delete All Rows 
    db.delete(TABLE_USER, null, null); 
    db.close(); 

    Log.d(TAG, "Deleted all user info from sqlite"); 
} 

Заранее спасибо за помощь.

+0

Можете ли вы разместить stacktrace? –

+0

Может сбой, потому что одно значение NULL? –

+0

@ AndreaR., Несколько вещей. Поскольку вы можете прокомментировать, я предлагаю вам удалить свой ответ и связаться с нами через комментарии. Во-вторых, вы не указали 'NOT NULL' в своей таблице, поэтому значение« null »должно быть в порядке. –

ответ

3

Ваше создание SQL неверно, вы пропустили ',' и пробелы, используйте ниже.

String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_USER + " (" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
      + KEY_LAST_NAME + " TEXT," + KEY_EMAIL + " TEXT UNIQUE," 
      + KEY_BIRTHDAY + " TEXT," + KEY_DESCRIPTION + " TEXT," 
      + KEY_CITY + " TEXT," + KEY_UID + " TEXT," 
      + KEY_CREATED_AT + " TEXT" + ");"; 
+0

Почему downvote? ответ его ок. –

+0

Возможно, это было опущено, потому что в конце отсутствует точка с запятой? Для большинства операторов SQL требуется точка с запятой для их завершения. –

+0

Вы правы, МОСТ, только когда у вас более одного заявления sql. если нет, вы можете забыть точку с запятой. Я знаю, что это хорошая оценка, но это не обязательно, если у вас есть одно заявление. Итак, это хорошая оценка, я редактирую свой ответ. –

2
String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_USER + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
      + KEY_LAST_NAME + " TEXT," + KEY_EMAIL + " TEXT UNIQUE," 
      + KEY_BIRTHDAY + "TEXT" + KEY_DESCRIPTION + "TEXT" 
      + KEY_CITY + "TEXT" + KEY_UID + " TEXT," 
      + KEY_CREATED_AT + " TEXT" + ")"; 

Должно быть:

String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_USER + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
      + KEY_LAST_NAME + " TEXT," + KEY_EMAIL + " TEXT UNIQUE," 
      + KEY_BIRTHDAY + " TEXT," + KEY_DESCRIPTION + " TEXT," 
      + KEY_CITY + " TEXT," + KEY_UID + " TEXT," 
      + KEY_CREATED_AT + " TEXT" + ");"; 

Вы отсутствовали несколько запятых, пробелов & точку с запятой, чтобы закончить SQL заявление (не обязательно, но хорошая практика). Ваша таблица не должна была быть создана вообще или не все поля были созданы, если они были созданы.

Смежные вопросы