Android数据库Realm学习(一)基本使用

Realm Java文档   技术文档,开卷有益

刚刚开始用Realm,肯定是要对比着SQLite来琢磨的,说几个个人认识:

一、SQLite中的数据库名对应Realm的啥

Realm可以简单直接使用,这个时候似乎是弱化了数据库名的存在,也就是这个时候的数据库文件是默认的default.realm。弱化不代表不用,在实现RealmConfiguration时,通过如下代码new RealmConfiguration.Builder(context).name("myrealm.realm")来控制和指定名字

 

二、表名去了哪里?

这个开始也会有点纠结,就是转不过来这个思维。

继承RealmObject的类也可以理解为一张张表的类。这个应该是在实体类和数据库的表结构之间做了个平衡,一个很惊喜的平衡。虽然也带了一个问题:加到gettersetter的任何自定义逻辑实际上并不会被执行。

 

三、有没有再次封装的必要性?

这个不确定,应该有,但是像查询来说,realm的实现已经够简单了,封装感觉鸡肋点。

 


接下来开始使用了    

1.在modulegradle中添加compile 'io.realm:realm-android:0.87.5'

2.随便搞个什么类,但是要继承RealmObject

例如我声明个Book.class,包括nameauthor两条私有属性,原因如下:


3.然后再activity里面使用realm

本来可以这样的

realm = Realm.getInstance(this);


但是,为了后续学习也为了不装X,先配置个RealmConfiguration好了。

<RealmConfiguration configuration = new RealmConfiguration.Builder(this)
                .name("test.realm")//配置名字
                .encryptionKey(new byte[64])//加密用字段,不是64位会报错
                .schemaVersion(2)//版本号
//                .setModules(xxxx)//不懂
//                .migration(xxxx)//不懂
//                .inMemory()//设置后会放在缓存中
                .build();
        realm = Realm.getInstance(configuration);

注意:不同的activity使用同一个.realm文件时配置必须相同;

          所有操作都必须在事务内执行;


具体操纵:

①增

//添加一条数据到数据库
    private void realmInsert(Realm realm) {
        realm.beginTransaction();//必须先开启事务
        Book book = realm.createObject(Book.class);
        book.setAuthor("司马迁");
        book.setName("史记");
        realm.commitTransaction();//提交事务
        book = realm.where(Book.class).findFirst();
    }

②查

//查询一个数据库中第一个book
        Book book = realm.where(Book.class)
                .equalTo("name","史记")//相当于where name='史记'
                .or()//或,连接查询条件;没有这个方法时,默认是隐式地被逻辑和(&)组合
                .equalTo("author","司马迁")//相当于 author='司马迁'
                .findFirst();
        //整体相当于select * from (test.realm) where name='史记' or author='司马迁' limit 1;
        //Book book = realm.where(Book.class).findFirst();


Realm的查询也是支持排序的,但是它的处理是在查询出结果后再进行排序。

RealmResults<Book> result = realm.where(Book.class).findAll();
//Result.sort(“name”);
Result.sort(“name”,Sort.DESCENDING);</span>

注意:目前并不是支持所有字符集


③改

修改之前要确定一件事,你的model中有@PrimaryKey约束的主键,

否则


private void realmUpdate(Realm realm){
        realm.beginTransaction();//开启事务
        Book b = new Book();//新建实例
        b.setId(1);//book类新加的int属性,用@PrimaryKey注解作为主键
        b.setAuthor("simaqian");
        b.setName("史记");
        realm.copyToRealmOrUpdate(b);//修改操作
        realm.commitTransaction();//提交事务
    }

修改还有一种方式,好像还是realm提倡和鼓励的方式,就是直接对查询到的结果修改,然后该修改就会反馈回数据库,例如:

private void realmUpdate(Realm realm){
        realm.beginTransaction();
//        Book b = new Book();
//        b.setId(1);
//        b.setAuthor("simaqian");
//        b.setName("史记");
//        realm.copyToRealmOrUpdate(b);
        realm.where(Book.class).findFirst().setAuthor("斯巴达");
        realm.commitTransaction();
        realmSelect(realm);
    }

感觉还是查询出来复制一份使用比较好。。。

④删

删除和修改一样,你的model中有@PrimaryKey约束的主键

private void realmDelete(Realm realm){
        realm.beginTransaction();
        RealmResults results = realm.where(Book.class).findAll();
        //方式一:按下标删除
        results.remove(1);
        方式二:删除指定model第一种
        //Book book = new Book();
        //book.setId(2);
        //book.setName("史记");
        //book.setAuthor("司牛迁");
        //results.remove(book);
        //方式三:删除指定model第一种
        //book.removeFromRealm();
        方式四:删除末尾一个
        //results.removeLast();
        方式wu:清除全部
        //results.clear();
        realm.commitTransaction();
    }


好了,目前简单使用就到此为止,虽然标题用了(一),但是会不会有(二)我也说不准......
谢谢!






  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Android Studio提供了多种数据库选项,其中包括SQLiteRealm和Room等。其中,SQLite是默认的本地数据库选项,而Realm和Room则提供更高级别的功能。 以下是使用SQLiteAndroid Studio中创建和使用数据库基本步骤: 1. 创建一个新的Android Studio项目,并在build.gradle文件中添加以下依赖项: ``` dependencies { implementation 'com.android.support:support-v4:28.0.0' implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'com.android.support:design:28.0.0' implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com.android.support:cardview-v7:28.0.0' implementation 'com.android.support:support-core-utils:28.0.0' implementation 'com.android.support:support-annotations:28.0.0' implementation 'com.google.android.gms:play-services-maps:15.0.1' // SQLite implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:+' } ``` 2. 在app的build.gradle文件中添加以下配置: ``` defaultConfig { applicationId "com.example.myapp" minSdkVersion 21 targetSdkVersion 28 versionCode 1 versionName "1.0" // 添加数据库的名称和版本号 javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] } } ndk { abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64' } } // 定义数据库的版本号 def ROOM_VERSION = "2.2.5" // 添加Room的依赖项 dependencies { // Room components implementation "androidx.room:room-runtime:$ROOM_VERSION" annotationProcessor "androidx.room:room-compiler:$ROOM_VERSION" // Optional RxJava2 support for Room implementation "androidx.room:room-rxjava2:$ROOM_VERSION" // Optional Guava support for Room, including Optional and ListenableFuture implementation "androidx.room:room-guava:$ROOM_VERSION" // Test helpers testImplementation "androidx.room:room-testing:$ROOM_VERSION" } ``` 3. 创建一个DatabaseHelper类,用于创建和管理数据库: ``` public class DatabaseHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "myapp.db"; private static final String TABLE_NAME = "mytable"; private static final String COLUMN_ID = "id"; private static final String COLUMN_NAME = "name"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "(" + COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_NAME + " TEXT" + ")"; db.execSQL(CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } public void addData(String name) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(COLUMN_NAME, name); db.insert(TABLE_NAME, null, values); db.close(); } public List<String> getAllData() { List<String> data = new ArrayList<>(); SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null); if (cursor.moveToFirst()) { do { data.add(cursor.getString(1)); } while (cursor.moveToNext()); } cursor.close(); db.close(); return data; } } ``` 4. 在Activity中使用DatabaseHelper类来添加和获取数据: ``` public class MainActivity extends AppCompatActivity { private DatabaseHelper db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); db = new DatabaseHelper(this); db.addData("John"); db.addData("Jane"); List<String> data = db.getAllData(); for (String name : data) { Log.d("MainActivity", "Name: " + name); } } } ``` 这样就可以在Android Studio使用SQLite数据库了。当然,如果需要更高级别的功能,可以考虑使用Realm或Room。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公贵买其鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值