Не вставляйте запись в таблицу `SQLite`, если синтаксис правильный - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть таблица с именем TABLE_MSG. Я не могу вставить в нее записи.Функция insert возвращает значение -1.Я добавил несколько log в функцию insert и показал, что моя модель правильно передана функции insert, а ContentValues имеет значение и не равно нулю. Кажется, все правильно, но insert не работает.Вот моя модель.

public class message_model implements Serializable {

@SerializedName("id")
private int id;
@SerializedName("thread_id")
private int thread_id;
@SerializedName("user_id")
private int user_id;
@SerializedName("body")
private String body;
@SerializedName("created_at")
private String created_at;
@SerializedName("updated_at")
private String updated_at;
@SerializedName("deleted_at")
private String deleted_at;
// also I write getter and setter
}

Это запрос создания таблицы.

String CREATE_TABLE_MSG = "CREATE TABLE " + TABLE_MSG + " ("
            + MSG_ID + " INTEGER PRIMARY KEY," + MSG_T_ID + " INTEGER," + MSG_U_ID + " INTEGER,"
            + MSG_BODY + " TEXT," + MSG_C_AT + " TEXT," + MSG_U_AT + " TEXT," + MSG_D_AT + " TEXT)";
    db.execSQL(CREATE_TABLE_MSG);

Это add_message функция.

 public void add_message(message_model model) {
    try {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(MSG_ID,model.getId());
        values.put(MSG_T_ID, model.getThread_id());
        values.put(MSG_U_ID, model.getUser_id());
        values.put(MSG_BODY, model.getBody());
        values.put(MSG_C_AT, model.getCreated_at());
        values.put(MSG_U_AT, model.getUpdated_at());
        values.put(MSG_D_AT, model.getDeleted_at());
        Log.e("MESSAGE",values.toString()+" toString value \n");
        Log.e("MESSAGE",model.toString());
        long rowInserted= db.insert(TABLE_MSG, null, values);
        if(rowInserted != -1)
            Log.e("MESSAGE","IN INSERT MESSAGE TABLE and log is -1");
        else
            Log.e("MESSAGE","IN INSERT MESSAGE TABLE "+rowInserted);

        db.close();
    }
    catch (Exception e){
        Log.e("MESSAGE",e.toString());
    }
}

Это мой вызовadd_message функция.

message_model m=new message_model(589, 300, 400, "body", "createdat", "updatedat", null);
    db.add_message(m);

Это get_message функция.

public ArrayList<message_model> get_messages() {
    ArrayList<message_model> list = new ArrayList<message_model>();
    String selectQuery = "SELECT * FROM " + TABLE_MSG;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {
            message_model model = new message_model();
            model.setId(cursor.getInt(0));
            model.setThread_id(cursor.getInt(1));
            model.setUser_id(cursor.getInt(2));
            model.setBody(cursor.getString(3));
            model.setCreated_at(cursor.getString(4));
            model.setUpdated_at(cursor.getString(5));
            model.setDeleted_at(cursor.getString(6));
        }
        while (cursor.moveToNext());
    }

    cursor.close();
    db.close();
    Log.e("MESSAGE","in get message");
    Log.e("MESSAGE","in get message"+list.toString());
    return list;
}

Это мой призыв get_message.

 ArrayList<message_model> listm = new ArrayList<>();
   listm = db.get_messages();
  for (int i = 0; i < listm.size(); i++) {
      Log.e("MESSAGE", "body in for " + listm.get(i).getBody());
       Log.e("MESSAGE", "id in for " + listm.get(i).getId() + "");
 }

1 Ответ

0 голосов
/ 30 сентября 2018

Решение:

Просто добавьте эту строку:

list.add(model);

, как показано ниже (напишите здесь):

    if (cursor.moveToFirst()) {
    do {
        message_model model = new message_model();
        model.setId(cursor.getInt(0));
        model.setThread_id(cursor.getInt(1));
        model.setUser_id(cursor.getInt(2));
        model.setBody(cursor.getString(3));
        model.setCreated_at(cursor.getString(4));
        model.setUpdated_at(cursor.getString(5));
        model.setDeleted_at(cursor.getString(6));

        ......(Write Here)
    }
    while (cursor.moveToNext());
}

Вот и все, Вы просто получаете данные из БД, но не добавляете их в список

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...