Android經常使用的room增刪改查語句(外部數據庫)

最近博主把一個之前用原生數據庫寫的單詞APP中數據庫部分改爲了room,在這個過程當中踩了不少坑

坑大概爲兩點web

  • 使用room增刪改查的一些語句
  • 導入外部數據庫並對其表格內容進行增刪改查

在項目最後是所有重構成功了,可是在處理外部數據庫時遇到的坑比較多,一時間沒整理出來(整理了一個demo,可是沒整理完),因此這篇文章解決room增刪改查的一些經常使用語句。數據庫

若是項目吃急,遇到外部數據庫的一些問題,可經過公衆號計蒙不吃魚 聯繫博主app

相信看這篇文章的人應該都有room的使用基礎了,因此直接上菜(如下圖表格爲例)。
在這裏插入圖片描述
如上圖:表名爲forgetide

  1. 單詞名稱:wordname
  2. 單詞等級:wordclass
  3. 單詞時間:wordtime

插入數據(增):svg

//Forget爲表的實體類
    @Insert
    void insertWords(Forget... forgets);

刪除數據(刪):ui

//1.刪除數據,根據主鍵來刪除數據的!!!
    @Delete
    void  deleteWords(Forget... forgets);

    //2.根據單詞名稱刪除表中數據(單個)
    @Query("DELETE FROM FORGET where wordname=:name")
    void  deleteWords(String name);
    
    //3.根據單詞名稱,單詞等級刪除表中數據(多個)
    @Query("DELETE FROM FORGET where wordname=:name and wordclass=:wordclass")
    void  deleteWords(String name,String wordclass);

更新數據(改):this

//更新數據 
    @Update
    void  updateWords(Forget... forgets);
    
    //根據單詞名稱修改單詞等級
    @Query("UPDATE FORGET SET wordclass= :wordclasss WHERE wordname = :wordname")
    void  updateWords(String wordname,String wordclasss);

查詢數據(查):spa

//查詢所有數據
    @Query(" SELECT * FROM FORGET ORDER BY rowid DESC")
    LiveData<List<Forget>> getAllForgetLive();
   
    //查詢某項的所有數據
    @Query(" SELECT wordname FROM FORGET")
    LiveData<List<Forget>> getAllForgetLive();  

    //查詢表中某單詞是否存在 存在返回值爲1,不存在返回值爲0.
    @Query("select 1 from forget where wordname =:wordname limit 1")
    int forgetWordisExist(String wordname);
    
    //部分查詢 大多用於分頁加載
    @Query(" SELECT wordname,wordclass,wordtime FROM FORGET limit :start,:end")
     LiveData<List<Forget>> getHarfWordsLive(int start,int end);

    //根據單詞名稱獲得此行的所有信息
    @Query("SELECT * FROM FORGET WHERE wordname= :name")
    Forget getForgetByName(String name);

Forget實體類以下.net

@Fts4
@Entity(tableName = "forget")
public class Forget { 
 
   
    @Ignore
    @PrimaryKey(autoGenerate = true)
    private int rowid;
    @ColumnInfo(name="wordname")
    private String wordname;
    @ColumnInfo(name="wordclass")
    private String wordclass;
    @ColumnInfo(name="wordtime")
    private String wordtime;

    public String getWordname() { 
 
   
        return wordname;
    }

    public void setWordname(String wordname) { 
 
   
        this.wordname = wordname;
    }

    public String getWordclass() { 
 
   
        return wordclass;
    }

    public void setWordclass(String wordclass) { 
 
   
        this.wordclass = wordclass;
    }

    public String getWordtime() { 
 
   
        return wordtime;
    }

    public void setWordtime(String wordtime) { 
 
   
        this.wordtime = wordtime;
    }

    public Forget(String wordname, String wordclass, String wordtime) { 
 
   
        this.wordname = wordname;
        this.wordclass = wordclass;
        this.wordtime = wordtime;
    }
}

Dao文件以下:code

@Dao //訪問數據庫的一個接口
public interface WordDao { 
 
   

    @Insert
    void insertWords(Forget... forgets);
    
    //根據單詞名稱刪除表中數據
    @Query("DELETE FROM FORGET where wordname=:name")
    void  deleteWords(String name);
    
    //根據單詞名稱更新表中數據
    @Query("UPDATE FORGET SET wordclass= :wordclasss WHERE wordname = :wordname")
    void  updateWords(String wordname,String wordclasss);
    
    //查詢表中某數據是否存在
    @Query("select 1 from forget where wordname =:wordname limit 1")
    int forgetWordisExist(String wordname);
    
    //分頁加載:
   @Query(" SELECT example,english,phonetic,chinese FROM FOURS limit :start,:end")
     LiveData<List<Word>> getHarfWordsLive(int start,int end);
    //查詢所有
    @Query(" SELECT * FROM FORGET ORDER BY rowid DESC")
    LiveData<List<Forget>> getAllForgetLive();
    
    //根據字段查詢
    @Query("SELECT * FROM FORGET WHERE wordname= :name")
    Forget getForgetByName(String name);

}

DataBase文件以下

@Database(entities = { 
 
   Forget.class},version =1,exportSchema = false)
public abstract class WordDataBase extends RoomDatabase { 
 
   
    private static WordDataBase INSTANCE;
    static synchronized WordDataBase getDatabase(final Context context){ 
 
   
        if (INSTANCE==null){ 
 
   

                    INSTANCE= Room.databaseBuilder(context.getApplicationContext(),WordDataBase.class,"word.db")
                          .createFromAsset("word.db") //預填充數據庫
                          .fallbackToDestructiveMigration()
                          .build();

        }
        return INSTANCE;

    }
    public abstract WordDao getWordDao();

}

Repository文件以下

class WordRepository { 
 
   
    private LiveData<List<Forget>> allForgetLive;
    private WordDao wordDao;
    private WordDataBase wordDatabase;
    WordRepository(Context context){ 
 
   
        //單例
        wordDatabase=WordDataBase.getDatabase(context.getApplicationContext());
        allForgetLive=wordDao.getAllForgetLive();
    }
    public LiveData<List<Forget>> getAllForgetLive() { 
 
   
        return allForgetLive;
    }
    public Forget getForgetByName(String name) { 
 
   
        return wordDao.getForgetByName(name);
    }
    public int forgetWordisExist(final String wordname){ 
 
   
      return   wordDao.forgetWordisExist(wordname);
    }
    
    void insertWords(final Forget...forgets){ 
 
   
        RxBusMax.getInstance().chainProcess(new Func1() { 
 
   
            @Override
            public Object call(Object o) { 
 
   
                wordDao.insertWords(forgets);
                return null;
            }
        });

    }
    void deleteWords(final String name){ 
 
   
        RxBusMax.getInstance().chainProcess(new Func1() { 
 
   
            @Override
            public Object call(Object o) { 
 
   
                wordDao.deleteWords(name);
                return null;
            }
        });
    }
    
    void updateWords(final String wordname,final String wordclass){ 
 
   
        RxBusMax.getInstance().chainProcess(new Func1() { 
 
   
            @Override
            public Object call(Object o) { 
 
   
                wordDao.updateWords(wordname,wordclass);
                return null;
            }
        });
    }




}

ViewMode文件以下

public class WordViewModel extends AndroidViewModel { 
 
   
          private  WordRepository wordRepository;
    public WordViewModel(@NonNull Application application) { 
 
   
        super(application);
        //單例
        wordRepository=new WordRepository(application);

    }
    public LiveData<List<Forget>> getAllForgetLive() { 
 
   
        return wordRepository.getAllForgetLive();
    }
  
    public void insertWords(Forget...forgets){ 
 
   
        wordRepository.insertWords(forgets);
    }
    public void deleteWords(String name){ 
 
   
        wordRepository.deleteWords(name);
    }
    
    public Forget getForgetByName(String name) { 
 
   
       return  wordRepository.getForgetByName(name);
    }
    
    public void updateWords(String wordname,String wordclasss){ 
 
   
        wordRepository.updateWords(wordname,wordclasss);
    }
    
    public int forgetWordisExist(final String wordname){ 
 
   
       return wordRepository.forgetWordisExist(wordname);
    }
    
    public LiveData<List<Word>> getHalfWordsLive(int start,int end) { 
 
   
        return wordRepository.getHalfwordLive(start,end);
    }

}

本文同步分享在 博客「計蒙不吃魚」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索