Как мне вставить логическое значение в мою базу данных SQLite? - PullRequest
0 голосов
/ 09 июля 2020

Это моя функция для добавления данных:

public boolean addData(String item1, boolean done) throws SQLException {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(COL2, item1);
        cv.put(COL3, done);

        long result = db.insert(TABLE_NAME, null, cv );

        //if date was inserted incorrectly it will return -1, thus returning false here
        if (result == -1) {
            return false;
        } else {
            return true;
        }
    }

И как я создаю свою базу данных плюс имена столбцов и таблиц:

public static final String DATABASE_NAME = "mylist.db";
public static final String TABLE_NAME = "mylist_data";
public static final String COL1 = "id";
public static final String COL2 = "name";
public static final String COL3 = "isdone";


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

@Override
public void onCreate(SQLiteDatabase db) {
    String createTable = "CREATE TABLE " + TABLE_NAME +  " 
 ("+ COL1 +" INTEGER PRIMARY KEY AUTOINCREMENT, " 
   + COL2 + " TEXT,"
   + COL3 +" BOOLEAN )";
    db.execSQL(createTable);
}

При выполнении инструкция вставки возвращает " -1 ", то есть вставка не была завершена. Есть идеи, как сохранить логическое значение в базе данных?

(Проблема действительно связана с логическим значением, поскольку при добавлении комментария вне кода я могу без проблем вставлять значения).

1 Ответ

0 голосов
/ 09 июля 2020

Посмотрите здесь: https://www.sqlite.org/datatype3.html в 2.1

вместо этого используйте целое число со значениями 0 и 1.

Вы используете C# или Java? Пометьте его соответствующим образом.

И установите COL3 в создании таблицы sql на INTEGER и измените строку «cv.put(COL3, done);» на «cv.put(COL3, done? 1: 0);»:

public boolean addData(String item1, boolean done) throws SQLException {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(COL2, item1);
        cv.put(COL3, done? 1: 0);

        long result = db.insert(TABLE_NAME, null, cv );

        return (result != -1); 
    }

Я удалил комментарий -1, потому что это задокументировано в ссылке https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#insert (java .lang.String,% 20 java .lang.String,% 20 android .content.ContentValues) поэтому комментарий недействителен.

Это вопрос в C# - сначала я подумал, - а теперь в Java:

public static final String DATABASE_NAME = "mylist.db";
public static final String TABLE_NAME = "mylist_data";
public static final String COL1 = "id";
public static final String COL2 = "name";
public static final String COL3 = "isdone";


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

@Override
public void onCreate(SQLiteDatabase db) {
    String createTable = "CREATE TABLE " + TABLE_NAME +  " 
 ("+ COL1 +" INTEGER PRIMARY KEY AUTOINCREMENT, " 
   + COL2 + " TEXT,"
   + COL3 +" INTEGER)";
    db.execSQL(createTable);
}
...