Получите ID строки sql при создании, мгновенно - PullRequest
0 голосов
/ 08 января 2020

Итак, у меня есть recyclerView, в который вы можете добавлять объекты. Эти объекты сохраняются в базе данных sql, поэтому у каждого из них есть свои уникальные идентификаторы. Мне нужно передать идентификатор объекта, на который нажали, в следующем упражнении.

Моя проблема заключается в том, что, когда recyclerView заполняется только что добавленным объектом, идентификатор всегда равен 0, если я не обновлю sh действие, тогда идентификатор будет заполнен правильно. Я хотел бы получить идентификатор, как только объект будет создан / добавлен. У меня есть идея, и это при создании объекта, чтобы установить идентификатор самостоятельно, но я не уверен, как это сделать, или если это правильный путь. Есть идеи?

Ответы [ 2 ]

1 голос
/ 08 января 2020

Вот полноценный код, я гарантирую, что он решит ваши сомнения, в android нам не нужно указывать идентификатор при вставке данных в таблицу базы данных, идентификатор по умолчанию такой же, как и порядок данных в таблица ie если данные находятся на 1-м месте в таблице, то они

 package com.example.elavi.databasedemo;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            SQLiteDatabase sqLiteDatabase = this.openOrCreateDatabase("Users", MODE_PRIVATE, null);
            sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS users(name VARCHAR,age INT(3),id INTEGER PRIMARY KEY)");
            sqLiteDatabase.execSQL("INSERT INTO users(name,age) VALUES('Lavish',20)");
            sqLiteDatabase.execSQL("INSERT INTO users(name,age)VALUES('Saina',24)");
            sqLiteDatabase.execSQL("INSERT INTO users(name,age)VALUES('Saina',55)");
            sqLiteDatabase.execSQL("INSERT INTO users(name,age)VALUES('Sourabh',75)");
            sqLiteDatabase.execSQL("INSERT INTO users(name,age)VALUES('Suresh',30)");
            sqLiteDatabase.execSQL("INSERT INTO users(name,age)VALUES('Dog',49)");
            sqLiteDatabase.execSQL("DELETE FROM users WHERE name='Sourabh'");
            Cursor c = sqLiteDatabase.rawQuery("SELECT*FROM users ", null);
            int nameindex = c.getColumnIndex("name");
            int rowindex = c.getColumnIndex("age");
            int idindex=c.getColumnIndex("id");
            c.moveToFirst();
            while (c != null) {
                Log.i("Name is ", c.getString(nameindex));
                Log.i("Age is", c.getString(rowindex));
                Log.i("Id is", c.getString(idindex));
                c.moveToNext();
            }
        }catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

спрашивают, если у вас есть какие-либо сомнения

1 голос
/ 08 января 2020

Когда вы вставляете в базу данных, если вы используете удобный метод insert , он возвращает rowid вставленной строки как длинную, что будет быть таким же, как значение для столбца с псевдонимом rowid . В частности, использование column INTEGER PRIMARY KEY (с или без AUTOINCREMENT) делает столбец псевдонимом rowid .

Таким образом, получите возвращаемое значение и это идентификатор (обычно, если вы используете эту функцию SQLite и Android SDK).

...