Realm的簡單使用(單表_增刪改查_包含非同步操作)
學習參考網址:
具體程式碼:
由於互動的資料被我固定了,又為了防止因為資料是固定的而發生異常,所以寫了些異常捕獲,只要添上互動的資料,功能沒有任何問題,就可以不用寫這些異常捕獲了。
前期準備:
1.在project的gradle裡新增classpath “io.realm:realm-gradle-plugin:2.2.1”:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
classpath "io.realm:realm-gradle-plugin:2.2.1"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
2.在APP的gradle裡新增apply plugin: ‘realm-android’
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
compile 'com.jakewharton:butterknife:8.0.1'
apt 'com.jakewharton:butterknife-compiler:8.0.1'
apply plugin: 'realm-android'
}
3.建立MyApplication:
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
//預設配置
// RealmConfiguration config = new RealmConfiguration.Builder().build();
//自定義配置
RealmConfiguration config = new RealmConfiguration.Builder()
.name("myRealm.realm")
.deleteRealmIfMigrationNeeded()
.build();
Realm.setDefaultConfiguration(config);
}
}
4.修改配置檔案:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxx.realmdemo">
<application
android:name=".MyApplication"
...
<activity android:name=".HomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
...
</application>
</manifest>
物件實體:
1.User:
/**
* 建立實體
*/
public class User extends RealmObject {
@PrimaryKey
private String id;
private String name;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String toString() {
return "student:id="+ id +" name=" + name +"email=" + email + "\n";
}
}
非非同步操作:
1.home_activity的佈局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|top"
android:orientation="vertical"
tools:context="com.xxx.realmdemo.HomeActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right">
<TextView
android:id="@+id/tv_asy_function"
android:layout_marginTop="15dp"
android:layout_marginRight="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="21sp"
android:text="非同步操作" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_custom_add"
android:layout_marginLeft="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="21sp"
android:text="增" />
<TextView
android:id="@+id/tv_custom_delete"
android:layout_marginLeft="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="21sp"
android:text="刪" />
<TextView
android:id="@+id/tv_custom_update"
android:layout_marginLeft="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="21sp"
android:text="改" />
<TextView
android:id="@+id/tv_custom_query"
android:layout_marginLeft="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="21sp"
android:text="查" />
</LinearLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_show_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="21sp"/>
</ScrollView>
</LinearLayout>
2.home_activity程式碼:
public class HomeActivity extends AppCompatActivity {
@BindView(R.id.tv_custom_add)
TextView tvCustomAdd;
@BindView(R.id.tv_custom_delete)
TextView tvCustomDelete;
@BindView(R.id.tv_custom_update)
TextView tvCustomUpdate;
@BindView(R.id.tv_custom_query)
TextView tvCustomQuery;
@BindView(R.id.tv_show_result)
TextView tvShowResult;
@BindView(R.id.tv_asy_function)
TextView tvAsyFunction;
private int number = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
ButterKnife.bind(this);
}
@OnClick({R.id.tv_custom_add, R.id.tv_custom_delete, R.id.tv_custom_update, R.id.tv_custom_query, R.id.tv_asy_function})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.tv_custom_add:
addObject();
break;
case R.id.tv_custom_delete:
deleteObject();
break;
case R.id.tv_custom_update:
updateObject();
break;
case R.id.tv_custom_query:
queryAllObject();
break;
case R.id.tv_asy_function:
Intent intent = new Intent( HomeActivity.this,ActAsyFunction.class);
startActivity( intent);
break;
}
}
/**
* 增加
*/
public void addObject() {
// //實現方法一:事務操作
// //型別一 :新建一個物件,並進行儲存
// Realm realm=Realm.getDefaultInstance();
// realm.beginTransaction();
// User user = realm.createObject(User.class); // Create a new object
// user.setName("John");
// user.setEmail("[email protected]");
// realm.commitTransaction();
// //型別二:複製一個物件到Realm資料庫
// Realm realm=Realm.getDefaultInstance();
// User user = new User("John");
// user.setEmail("[email protected]");
// realm.beginTransaction();
// realm.copyToRealm(user);
// realm.commitTransaction();
//實現方法二:使用事務塊
Realm mRealm = Realm.getDefaultInstance();
final User user = new User();
user.setEmail("john" + number + "@corporation.com");
user.setId(String.valueOf(number));
user.setName("John" + number);
try{
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealm(user);
tvShowResult.setText(" 增加成功:" + user.toString());
}
});
}catch (Exception e){
number++;
e.printStackTrace();
tvShowResult.setText(" 增加失敗");
}
}
/**
* 刪除
* 同樣也可以使用同addObject函式的beginTransaction和commitTransaction方法進行刪除
*/
public void deleteObject() {
final int positon = 1;
Realm mRealm = Realm.getDefaultInstance();
final RealmResults<User> users = mRealm.where(User.class).findAll();
try {
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
if (users.size() > 0) {
User user = users.get(positon);
String str = user.toString();
user.deleteFromRealm();
tvShowResult.setText("刪除成功\n" + str);
// //刪除第一個資料
// users.deleteFirstFromRealm();
// //刪除最後一個數據
// users.deleteLastFromRealm();
// //刪除位置為1的資料
// users.deleteFromRealm(1);
// //刪除所有資料
// users.deleteAllFromRealm();
} else {
tvShowResult.setText("user表裡無資料");
}
}
});
}catch (Exception e){
e.printStackTrace();
tvShowResult.setText("刪除失敗");
}
}
/**
* 修改
*/
public void updateObject() {
try{
String id = "1";
String newName = "玫玫";
Realm mRealm = Realm.getDefaultInstance();
User user = mRealm.where(User.class).equalTo("id", id).findFirst();
mRealm.beginTransaction();
user.setName(newName);
mRealm.commitTransaction();
tvShowResult.setText("更新\n" + user.toString());
}catch (Exception e){
e.printStackTrace();
tvShowResult.setText(" 更新失敗");
}
}
/**
* 查詢所有資料
*/
public void queryAllObject() {
Realm mRealm = Realm.getDefaultInstance();
RealmResults<User> users = mRealm.where(User.class).findAll();
/**
* 對查詢結果,按Id進行排序,只能對查詢結果進行排序
*/
// //增序排列
// users=users.sort("id");
//降序排列
users = users.sort("id", Sort.DESCENDING);
String str = "";
for (int i = 0; i < users.size(); i++) {
User user = users.get( i);
str = str + user.toString();
}
tvShowResult.setText("查詢所有資料:\n" + str);
}
}
非同步操作
1.佈局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_asy_add"
android:layout_marginLeft="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="21sp"
android:text="非同步增" />
<TextView
android:id="@+id/tv_asy_delete"
android:layout_marginLeft="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="21sp"
android:text="非同步刪" />
<TextView
android:id="@+id/tv_asy_update"
android:layout_marginLeft="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="21sp"
android:text="非同步改" />
<TextView
android:id="@+id/tv_asy_query"
android:layout_marginLeft="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="21sp"
android:text="非同步查" />
</LinearLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_show_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="21sp"/>
</ScrollView>
</LinearLayout>
2.acitivty程式碼:
public class ActAsyFunction extends AppCompatActivity {
@BindView(R.id.tv_asy_add)
TextView tvAsyAdd;
@BindView(R.id.tv_asy_delete)
TextView tvAsyDelete;
@BindView(R.id.tv_asy_update)
TextView tvAsyUpdate;
@BindView(R.id.tv_asy_query)
TextView tvAsyQuery;
@BindView(R.id.tv_show_result)
TextView tvShowResult;
private RealmAsyncTask addTask;
private RealmAsyncTask deleteTask;
private RealmAsyncTask updateTask;
private RealmResults<User> users;
private int number = 1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_act_asyfunction);
ButterKnife.bind(this);
}
@OnClick({R.id.tv_asy_add, R.id.tv_asy_delete, R.id.tv_asy_update, R.id.tv_asy_query})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.tv_asy_add:
User user = new User();
user.setEmail("john" + number + "@corporation.com");
user.setId(String.valueOf(number));
user.setName("John" + number);
addUser( user );
number++;
break;
case R.id.tv_asy_delete:
String id = "1";
deleteUser( id);
break;
case R.id.tv_asy_update:
String Id = "2";
String name = "玫玫";
updateUser( name,Id );
break;
case R.id.tv_asy_query:
queryUser();
break;
}
}
/**
* 增加
* @param user
*/
private void addUser(final User user) {
Realm mRealm = Realm.getDefaultInstance();
addTask= mRealm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealm(user);
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
tvShowResult.setText( "增加成功" + user.toString());
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
tvShowResult.setText( "增加失敗");
}
});
}
/**
* 刪除
* @param id
*/
private void deleteUser(final String id){
Realm mRealm = Realm.getDefaultInstance();
final String[] str = {""};
deleteTask= mRealm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
User user=realm.where(User.class).equalTo("id",id).findFirst();
str[0] = user.toString();
user.deleteFromRealm();
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
tvShowResult.setText( "刪除成功" + str[0] );
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
tvShowResult.setText( "刪除失敗" + str[0] );
}
});
}
/**
* 修改
* @param name
* @param id
*/
private void updateUser(final String name, final String id){
Realm mRealm = Realm.getDefaultInstance();
final String[] oldStr = {""};
final String[] newStr = {""};
updateTask = mRealm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
User user=realm.where(User.class).equalTo("id",id).findFirst();
oldStr[0] = user.toString();
user.setName(name);
newStr[0] = user.toString();
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
tvShowResult.setText( "舊資訊:" + oldStr[0] + "\n修改成功\n" + newStr[0]);
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
tvShowResult.setText( "舊資訊:" + oldStr[0] + "\n修改失敗");
}
});
}
/**
* 查詢所有資料
*/
private void queryUser(){
final Realm mRealm = Realm.getDefaultInstance();
users = mRealm.where(User.class).findAllAsync();
users.addChangeListener(new RealmChangeListener<RealmResults<User>>() {
@Override
public void onChange(RealmResults<User> element) {
element= element.sort("id");
List<User> datas=mRealm.copyFromRealm(element);
String str = "";
for (int i = 0; i <datas.size(); i++) {
User user = datas.get( i);
str = str + user.toString();
}
tvShowResult.setText("查詢所有資料:\n" + str);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (addTask != null && !addTask.isCancelled()){
addTask.cancel();
}
if (deleteTask != null && !deleteTask.isCancelled()){
deleteTask.cancel();
}
if (updateTask != null && !updateTask.isCancelled()){
updateTask.cancel();
}
if( users != null){
users.removeChangeListeners();
}
}
}
相關推薦
Realm的簡單使用(單表_增刪改查_包含非同步操作)
學習參考網址: 具體程式碼: 由於互動的資料被我固定了,又為了防止因為資料是固定的而發生異常,所以寫了些異常捕獲,只要添上互動的資料,功能沒有任何問題,就可以不用寫這些異常捕獲了。 前期準備: 1.在project的gradle裡新增classp
02 mybatis動態sql(xml方式實現單表的增刪改查)
QueryVo package cn.itcast.domain; import java.io.Serializable; import java.util.List; public class QueryVo implements Serial
mybatis 單表的增刪改查
ron ges per 增刪 分享 返回id width com bat 添加數據返回id mapper.xml mapper -> insert -> selectKey mybatis 內置別名 mybatis 單表的增刪改查
django 利用ORM對單表進行增刪改查
man api light 賦值 連接 取出 簡單 extern follow 牛小妹上周末,一直在嘗試如何把數據庫的數據弄到界面上。畢竟是新手,搞不出來,文檔也看不懂。不過沒關系,才剛上大學。今晚我們就來解釋下,要把數據搞到界面的第一步。先把數據放到庫裏,然後再把數據從庫
Mybatis(一)實現單表的增刪改查
bsp 表達 1.0 屬性 過程 col 轉化 iba sys 1.1 什麽是Mybatis MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google co
ORM對單表的增刪改查
price 增刪改 www com bject .html 增加 () save 表記錄的增加: 1)b = Book(name=‘python‘, price=99) b.save() 2)Book.objects.create(name=‘python‘, pric
Django之單表的增刪改查
wsgi cer oop smi .py one ram span rest books/urls.py """books URL Configuration The `urlpatterns` list routes URLs to views. For
MySQL單表的增刪改查操作
今天我們一起回顧MySQL單表的增刪改查操作。 這裡我說的在細一點就是,裡面會涉及到對庫的操作以及對表結構的操作然後是對表記錄的操作。 你想要完成這些操作,首先你得對資料庫有一定的瞭解,這裡也對資料庫進行了一個簡單的介紹 什麼是資料庫?資料庫就是儲存資料的倉庫,其本質是一個檔案系統,資料
Django單表的增刪改查
1.Django下載 命名行 pip install django==1.11.16 pip install django==1.11.16 -i https://pypi.doubanio.com/simple/ pycharm settings 直譯器 點+號 輸入Django
MySQL基礎篇(庫/表的增刪改查)
上一篇我們已經在Linux系統裝好了MySQL,現在我們來熟悉一下MySQL及它的操作語句。 MySQL是一個關係型資料庫管理系統,MySQL 是最流行的關係型資料庫管理系統之一. 設計模型: E-R設計模型【E表示Entry,實體】、【R表示Relationship,關係】。
一、Mybatis 單表 常用增刪改查
1.編寫sql表,插入原始資料 1 -- 刪除表 2 DROP TABLE testA; 3 -- 建立表 4 CREATE TABLE testA( 5 id INT AUTO_INCREMENT PRIMARY KEY, 6 username VARCHAR(
藉助jeesite實現單表的增刪改查真是so easy
1. 需要在資料庫裡建立一張表。 2. 利用jeesite的程式碼生成模組,業務表配置(把剛才建立的表配置上),生成配置方案, 儲存並生成程式碼,controller,service,dao,xml和jsp就都有了。 3.選單管理 建立jeesite的一級選單
圖書管理系統-單表的增刪改查
key button ref ati 用戶 oct 排序 ima orm 配置環境 settings.py文件 MIDDLEWARE = [ ‘django.middleware.security.SecurityMiddleware‘, ‘dj
mariadb_2 單表的增刪改查
最大值 例如 || 名稱 modify 一個 update del enter 命令關鍵字: 創建表 create 刪除表 drop 修改表的內容 update 修改
DML、DQL與單表多表的增刪改查(20190215下午)
正向 port sun tin bin schema safe word ping MariaDB [db1]> select * from student;+----+------+-----+--------+-------+| id | name | age |
實戰 :對HBase業務表進行增刪改查操作(Eclipse,Linux 環境)
嘗試使用HBASE shell 和HBase java API 兩種方式來演示對業務表的操作。 一、Hbase Shell 1、啟動控制檯,啟用hbaseshell 控制檯對Hbase 進行操作具體命令如下: [[email protected] hbase]$ bin/h
Mybatis-02(操作表的增刪改查)
回顧 1.瞭解定義,知道mybatis的作用 2.搭建簡單mybatis架構 3.寫出簡單的測試程式碼進行測試 對資料庫表進行操作 通過Mybatis-01的簡單介紹我們可以進行簡單的查詢操作,接下來我
【Python模組】sqlalchemy orm模組--基礎(連線資料庫,建表,增刪改查)
SQLAlchemy是Python程式語言下的一款ORM框架,該框架建立在資料庫API之上,使用關係物件對映進行資料庫操作,簡言之便是:將物件轉換成SQL,然後使用資料庫API執行SQL並獲取執行結果。 安裝: pip3 install SQLAlchemy 版本檢查
mongodb的簡單使用二(結合springdata實現增刪改查)
package com.glgd.recarticle.dao; import java.util.ArrayList; import java.util.List; import org.springframework.data.mongodb.core.query.Criteria
hbase命令集(shell 命令,如建表,清空表,增刪改查)
兩篇可以參考的文章,講的不錯 http://www.cnblogs.com/nexiyi/p/hbase_shell.html (http://blog.iyunv.com/wulantian/article/details/41011297) =============