android - 将数据插入表中,如果已经存在,则将其带到顶部 SQLite

标签 android sqlite audio android-music-player

我正在我的音乐应用程序中创建一个“最近播放”的播放列表。我创建了一个数据库来存储与歌曲相关的信息。我当前的代码所做的是,每当我播放一首歌时,它都会将它添加到数据库中,并且我可以成功地显示它。但问题是当我播放同一首歌两次时,数据库没有更新。 例如,我分别播放了歌曲A、歌曲B、歌曲C、歌曲D。然后它将显示歌曲 A、歌曲 B、歌曲 C、歌曲 D。但是如果我再次分别播放歌曲 A、歌曲 B、歌曲 C、歌曲 D 和歌曲 B。然后它再次显示相同的(歌曲 A、歌曲 B、歌曲 C、歌曲 D)。但我想要的是:歌曲 A、歌曲 C、歌曲 D、歌曲 B。它应该更新并显示播放的最新歌曲,这就是我的意思。我不知道该怎么做。

建表代码:

 public void onCreate(SQLiteDatabase sqLiteDatabase) {

    String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME+ "("
            + KEY_ID + " INTEGER PRIMARY KEY,"
            + KEY_NAME + " TEXT,"
            + KEY_ARTIST + " TEXT,"
            + KEY_DURATION + " INTEGER,"
            + KEY_ART + " TEXT"
            + ");";

    sqLiteDatabase.execSQL(CREATE_TABLE);

}

获取和显示数据的代码:

   public ArrayList<SongInfoModel> getRecentlyPlayed(){

    ArrayList<SongInfoModel> rpList = new ArrayList<>();
    String selectQuery  = "SELECT * FROM " + TABLE_NAME;
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery,null);
    if(cursor.moveToFirst()){

        do{

            long id = cursor.getLong(0);
            String SongName = cursor.getString(1);
            String artistName = cursor.getString(2);
            long dur = cursor.getLong(3);
            String Art = cursor.getString(4);

            SongInfoModel sh = new SongInfoModel(id,SongName,artistName,dur,null,Art);

            rpList.add(sh);
        }while (cursor.moveToNext());
    }

    return rpList;

添加数据的代码:

 public void addSong(SongInfoModel songInfoModel){

        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(KEY_ID, songInfoModel.getSongID());
        values.put(KEY_NAME, songInfoModel.getSongName());
        values.put(KEY_ARTIST, songInfoModel.getArtistName());
        values.put(KEY_DURATION, songInfoModel.getDuration());
        values.put(KEY_ART, songInfoModel.getAlbumIDArtwork());

        db.insert(TABLE_NAME,null,values);
        db.close();

    }

最佳答案

在创建查询 ")";

中更改表查询尾随分号
String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME+ "("
            + KEY_ID + " INTEGER PRIMARY KEY,"
            + KEY_NAME + " TEXT,"
            + KEY_ARTIST + " TEXT,"
            + KEY_DURATION + " INTEGER,"
            + KEY_ART + " TEXT"
            + ")";

    sqLiteDatabase.execSQL(CREATE_TABLE);

关于android - 将数据插入表中,如果已经存在,则将其带到顶部 SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47937575/

相关文章:

android - Hide ImageView 隐藏多张图片

java - 预期为 BEGIN_ARRAY 但在第 1 行第 2 列为 BEGIN_OBJECT .....尝试在 Android 中使用 GSON 解析 JSON 时出错?

python - 在 sqlite3 中引用(外键)表的一列通过连接其他两个表中的两列

android - 将应用 bundle 〜55MB音频的最佳方法

android - Firebase Auth 在 API 15 和 16 上崩溃,调用 FirebaseAuth.signInAnonymously() 时出现 NullPointerException

android - 将来自不同表的两个不同排序游标数据的数据排序为一个

java - 游标 RawQuery 上的 NullPointerException - Android

multithreading - SQLite:跨线程共享连接读写

c++ - 将一维数组转换为重叠的二维数组

c# - 如何启动音调并让它无限期地运行直到我明确停止它?