Android Выберите строку по идентификатору в Sqlite? - PullRequest
11 голосов
/ 28 апреля 2011

Я хочу получить конкретную строку по идентификатору в Android SQLite и написал следующий код, но он не возвращает никаких записей. Я написал getAllRecords() метод, который возвращает все записи из базы данных.

Кто-нибудь может объяснить мою ошибку?

public Bank getBankById(int bankId)
    {

        Cursor cursor=null;
        Bank bnk = null;
        cursor =  this.db.rawQuery("select * from " + BanksTable.NAME + " where " + BanksTable.COL_ID + "=" + bankId  , null);
         if (cursor != null)
            {
             if (cursor.moveToFirst())
                {
             int id = cursor.getInt(cursor.getColumnIndex(BanksTable.COL_ID));
             String name = cursor.getString(cursor.getColumnIndex(BanksTable.COL_NAME));
             String url = cursor.getString(cursor.getColumnIndex(BanksTable.COL_IMAGE_URL));
             byte[] image = cursor.getBlob(cursor.getColumnIndex(BanksTable.COL_IMAGE));
             bnk=new Bank();
             bnk.setId(id);
             bnk.setImageURL(url);
             bnk.setName(name);
             bnk.setImageByteArray(image);
                }
             cursor.close();
            }
        return bnk;

    }

Ответы [ 3 ]

10 голосов
/ 29 апреля 2011

Я решил эту проблему, изменив параметр на имя.Это странно, но я до сих пор не знаю, почему это не сработало.

Я получал идентификатор банка, например, 0,1,2,3,4, возможно, он не разрешен в SQLite или не влияет на него внутренне, но все же яя не уверен.

cursor =  this.db.rawQuery("select * from " + BanksTable.NAME + " where " + BanksTable.COL_NAME + "='" + bankName + "'" , null);
0 голосов
/ 14 ноября 2018

Вот мой подход к получению объекта custem из sqlite db

    fun getTaskById(itemId: Int): ModelTask {
    val food= ModelTask()

    val database = readableDatabase
    val kolonlar = arrayOf(DBContract.TaskEntry.COLUMN_T_ID,
            DBContract.TaskEntry.COLUMN_T_TITLE,
            DBContract.TaskEntry.COLUMN_T_DESC,
            DBContract.TaskEntry.COLUMN_T_TIME,
            DBContract.TaskEntry.COLUMN_T_PRIORITY,
            DBContract.TaskEntry.COLUMN_T_DATE,
            DBContract.TaskEntry.COLUMN_T_DONE)
    val whereClause =  DBContract.TaskEntry.COLUMN_T_ID + " = ? "
    val whereArgs = arrayOf(itemId.toString())
    val cursor = database.query( DBContract.TaskEntry.TABLE_NAME_TASK, kolonlar, whereClause, whereArgs,
            null, null,  DBContract.TaskEntry.COLUMN_T_ID + " DESC")

    while (cursor.moveToNext()) {

        food.id = cursor.getInt(cursor.getColumnIndex(DBContract.TaskEntry.COLUMN_T_ID))
        food.title = cursor.getString(cursor.getColumnIndex(DBContract.TaskEntry.COLUMN_T_TITLE))
        food.description = cursor.getString(cursor.getColumnIndex(DBContract.TaskEntry.COLUMN_T_DESC))
        food.time = cursor.getString(cursor.getColumnIndex(DBContract.TaskEntry.COLUMN_T_TIME))
        food.priority = cursor.getString(cursor.getColumnIndex(DBContract.TaskEntry.COLUMN_T_PRIORITY))
        food.date = cursor.getString(cursor.getColumnIndex(DBContract.TaskEntry.COLUMN_T_DATE))
        food.done = cursor.getInt(cursor.getColumnIndex(DBContract.TaskEntry.COLUMN_T_DONE))
     }
    database.close()
    cursor.close()
    return foodList
}
0 голосов
/ 30 мая 2012

Я решил эту проблему, добавив свойство "autoincrement" к id при создании таблицы

db.execSQL("CREATE TABLE IF NOT EXISTS " + BanksTable.NAME +" ( " +BanksTable.COL_ID + " 
integer PRIMARY KEY **autoincrement**, "+ BanksTable.COL_NAME + " varchar, " + 
BanksTable.COL_IMAGE_URL + " varchar," + BanksTable.COL_IMAGE + " blob);");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...