如何在房间库中编写创建和更新查询?

时间:2017-09-22 07:03:44

标签: android performance sqlite android-sqlite android-room

我通过SQL查询其他解决方案。我无法为我的问题找到合适的解决方案。

在我的项目中,我将插入数据放入表中。我必须遵循一些步骤 第1步: - 我必须通过主键检查数据是否可用。 第2步:如果数据可用,那么我必须更新该数据并返回响应代码。如果不是,我必须去第3步 第3步:如果数据不在表中,则将数据插入其中并返回代码。

我正在使用房间图书馆。我很困惑如何写@Dao来执行该任务。

提前致谢

1 个答案:

答案 0 :(得分:3)

Android Architecture Components推出了Android Room Persistence Library,最适合sqlite android数据库处理。 Room Persistence中的实体表示数据库表,Dao是我们定义数据库交互的地方。示例

@Entity
public class Trail {
       public @PrimaryKey String id;
       public String name;
       public double kilometers;
       public int difficulty;
}

此表的可能Dao将是

@Dao
public interface TrailDao {

       @Insert(onConflict = IGNORE)
       void insertTrail(Trail trail);

       @Query("SELECT * FROM Trail")
       List<Trail> findAllTrails();

       @Update(onConflict = REPLACE)
       void updateTrail(Trail trail);

      @Query("DELETE FROM Trail")
      void deleteAll();
  }

此外,您需要提供RoomDatabase实现,示例

@Database(entities = {Trail.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {

    private static AppDatabase INSTANCE;

    public abstract TrailDao trailDao();

    public static AppDatabase getInMemoryDatabase(Context context) {
        if (INSTANCE == null) {
            INSTANCE =
Room.inMemoryDatabaseBuilder(context.getApplicationContext(), AppDatabase.class)

                    .allowMainThreadQueries()
                    .build();
        }
        return INSTANCE;
    }

    public static void destroyInstance() {
        INSTANCE = null;
    }
}

一样使用它
AppDatabase. getInMemoryDatabase(context).trailDao().findAllTrails();