設定主鍵 PrimaryKey

User.java

public class User extends RealmObject {
    // 設定 id 欄位為資料表的主鍵,其值將不可以重複。
    @PrimaryKey
    private int id;
    private String name;

    public void setId(int id) {this.id = id;}
    public int getId() {return id;}

    public void setName(String name) {this.name = name;}
    public String getName() {return name;}
}

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @RealmModule(classes = {User.class})
    public static class Module {
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        RealmConfiguration config = new RealmConfiguration.Builder(this)
                .name("database_name.realm")
                .setModules(new Module())
                // 如上次以建立過相同名稱資料庫,但欄位結構已經改變時,會刪除舊資料庫,不是實務上的必要動作。
                .deleteRealmIfMigrationNeeded()
                .build();
        Realm realm = Realm.getInstance(config);

        realm.beginTransaction();
        // 這裡清空資料表,只是為了保持乾淨讓執行結果正常,不是實務上的必要動作。
        realm.clear(User.class);
        for (int i = 0; i < 10; i++) {
            // 這裡如果使用 realm.createObject() 方法,將會因為類別初始化時,int 欄位初始值都為 0 ,導致主鍵重複而使 APP 崩潰。
            // 如對有主鍵的資料表做新增時,建議先建立物件然後修改主鍵的數值,再使用  realm.copyToRealmOrUpdate() 寫入資料表。
            User item = new User();
            item.setId(i);
            realm.copyToRealmOrUpdate(item);
        }
        realm.commitTransaction();

        // 顯示結果。
        String text = realm.where(User.class).findAll().toString();
        TextView v = new TextView(this);
        v.setText(text);
        setContentView(v);
    }
}