【问题标题】:Files in "assets" folder are not read-only in Android [closed]“资产”文件夹中的文件在Android中不是只读的[关闭]
【发布时间】:2018-04-02 00:00:28
【问题描述】:

我正在开发一个 Android 应用程序,我在应用程序的“assets”文件夹中提供了一个 SQLite 数据库文件和 APK。现在他们说,资产文件是只读的,但在我的情况下,我可以在运行时修改它,比如更改几列的值。只读数据库文件是否忽略更改值?

void update()
{
    sqLiteDatabase = databaseManager.getWritableDatabase();
    sqLiteDatabase.execSQL("UPDATE quotes SET likes = '"+ 1 + "' WHERE id ="+count);
    sqLiteDatabase.execSQL("UPDATE quotes SET dislikes = '"+ 1 + "' WHERE id ="+count);
    sqLiteDatabase.execSQL("UPDATE quotes SET like_status = '"+ 1 + "' WHERE id ="+count);
}


public class DatabaseManager extends SQLiteAssetHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "local_database.db";

    private static final String TABLE_NAME = "post";
    private static final String COLUMN_1 = "id";
    private static final String COLUMN_2 = "content";
    private static final String COLUMN_3 = "likes";
    private static final String COLUMN_4 = "dislikes";
    private static final String COLUMN_5 = "like_status";

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

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int old_version, int new_version) {

        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(sqLiteDatabase);

    }

    int get_count()
    {
        SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
        Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM "+ TABLE_NAME, null);
        Integer count = cursor.getCount();
        cursor.close();

        return count;
    }

    Cursor get_like_status(Integer ID)
    {
        SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
        Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM "+ TABLE_NAME + " WHERE id = '" + ID + "';", null);
        cursor.moveToFirst();

        return cursor;
    }

    Cursor read_data(Integer ID)
    {
        SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
        Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM "+ TABLE_NAME + " WHERE id = '" + ID + "';", null);
        cursor.moveToFirst();

        return cursor;
    }

    boolean update_counts(Integer count, Long likes, Long dislikes) {

        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COLUMN_3, likes);
        contentValues.put(COLUMN_4, dislikes);

        return sqLiteDatabase.update(TABLE_NAME, contentValues, "id = " + count, null) != -1;
    }
}

【问题讨论】:

  • 请说明您是如何更改这些值的,因为我相信您只是认为您正在更改这些值,因为它可能看起来有效。
  • @MikeT - 请立即检查问题!
  • @MikeT - 当我调用更新方法时,“喜欢”和“不喜欢”的值设置为“1”,之前是“0”。
  • @mikeT - 我很抱歉成为愚蠢的新手并浪费了你的时间。感谢您之前的回答。 :)

标签: android android-studio sqlite android-sqlite


【解决方案1】:

您正在使用的库(我假设是 android-sqlite-asset-helper复制您的资产文件夹中的数据库,如 the documentation 所示:

数据库将从资产中提取并复制到应用程序的私有数据目录中。

【讨论】:

  • 嘿@njzk2 谢谢你,你说的很清楚。
猜你喜欢
  • 1970-01-01
  • 2011-01-22
  • 2018-01-19
  • 2012-03-01
  • 1970-01-01
  • 2012-07-21
  • 2021-12-11
  • 1970-01-01
  • 2012-07-13
相关资源
最近更新 更多