A blazing fast, powerful, and very simple ORM android database library that writes database code for you.

Last update: May 14, 2022

README

Image

JitPack.io Android Weekly Android Arsenal

DBFlow is fast, efficient, and feature-rich Kotlin database library built on SQLite for Android. DBFlow utilizes annotation processing to generate SQLite boilerplate for you and provides a powerful SQLite query language that makes using SQLite a joy.

DBFlow is built from a collection of some of the best features of many database libraries. Don't let an ORM or library get in your way, let the code you write in your applications be the best as possible.

DBFlow Contains:

Kotlin: Built using the language, the library is super-concise, null-safe and efficient.

Annotation Processor: Generates the necessary code that you don't need to write.

Core: Contains the main annotations and misc classes that are shared across all of DBFlow.

DBFlow: The main library artifact used in conjunction with the previous two artifacts.

Coroutines: Adds coroutine support for queries.

RX Java: Enable applications to be reactive by listening to DB changes and ensuring your subscribers are up-to-date.

Paging: Android architecture component paging library support for queries via QueryDataSource.

LiveData: Android architecture LiveData support for queries on table changes.

SQLCipher: Easy database encryption support in this library.

SQLite Query Language: Enabling autocompletion on sqlite queries combined with Kotlin language features means SQLite-like syntax.

Changelog

Changes exist in the releases tab.

Usage Docs

For more detailed usage, check out it out here

Including in your project

Add jitpack.io to your project's repositories:

allProjects {
  repositories {
    google() 
    // required to find the project's artifacts
    // place last
    maven { url "https://www.jitpack.io" }
  }
}

Add artifacts to your project:

  apply plugin: 'kotlin-kapt' // only required for kotlin consumers.

  def dbflow_version = "5.0.0-alpha2"
  // or 10-digit short-hash of a specific commit. (Useful for bugs fixed in develop, but not in a release yet)

  dependencies {

    // Use if Kotlin user.
    kapt "com.github.agrosner.dbflow:processor:${dbflow_version}"

    // Annotation Processor
    // if only using Java, use this. If using Kotlin do NOT use this.
    annotationProcessor "com.github.agrosner.dbflow:processor:${dbflow_version}"


    // core set of libraries
    implementation "com.github.agrosner.dbflow:core:${dbflow_version}"
    implementation "com.github.agrosner.dbflow:lib:${dbflow_version}"

    // sql-cipher database encryption (optional)
    implementation "com.github.agrosner.dbflow:sqlcipher:${dbflow_version}"
    implementation "net.zetetic:android-database-sqlcipher:${sqlcipher_version}@aar"

    // RXJava 2 support
    implementation "com.github.agrosner.dbflow:reactive-streams:${dbflow_version}"

    // Kotlin Coroutines
    implementation "com.github.agrosner.dbflow:coroutines:${dbflow_version}"

    // Android Architecture Components Paging Library Support
    implementation "com.github.agrosner.dbflow:paging:${dbflow_version}"

    // Android Architecture Components LiveData Library Support
    implementation "com.github.agrosner.dbflow:livedata:${dbflow_version}"

    // adds generated content provider annotations + support.
    implementation "com.github.agrosner.dbflow:contentprovider:${dbflow_version}"

  }

Pull Requests

I welcome and encourage all pull requests. Here are some basic rules to follow to ensure timely addition of your request: 1. Match coding style (braces, spacing, etc.) This is best achieved using Reformat Code shortcut, command+option+L on Mac and Ctrl+Alt+L on Windows, with Android Studio defaults. 2. If its a feature, bugfix, or anything please only change code to what you specify. 3. Please keep PR titles easy to read and descriptive of changes, this will make them easier to merge :) 4. Pull requests must be made against develop branch. Any other branch (unless specified by the maintainers) will get rejected. 5. Have fun!

Maintainer

Originally created by Raizlabs, a Rightpoint company

Maintained by agrosner (@agrosner)

GitHub

https://github.com/Raizlabs/DBFlow
Comments
  • 1. Add support for RxJava

    Hi there!

    DBFlow looks like a promising library! I will definitely give it a shot with one of my next projects. One thing I immediately found when looking into the querying wiki pages was the lacking support for RxJava and observables. As this is an emerging (and booming) pattern in Android development I would really love to see support for this!

    Anybody interested too?

    Reviewed by davidschreiber at 2014-11-24 08:40
  • 2. [3.0.0-beta1]Table is not registered with a Database. Did you forget the @Table annotation?

    But I have the folowing structure:

    @Database(name = WeatherDB.NAME, version = WeatherDB.VERSION)
    public class WeatherDB {
    
        public static final String NAME = "Weather";
    
        public static final int VERSION = 1;
    }
    

    And table:

    @Table(database = WeatherDB.class)
    public class WeatherTable extends BaseModel {
    
        @Column
        @PrimaryKey
        private long dateStamp;
        @Column
        private double dayTemperature;
        @Column
        private double minTemperature;
        @Column
        private double maxTemperature;
        @Column
        private double nightTemperature;
        @Column
        private double eveTemperature;
        @Column
        private double mornTemperature;
        @Column
        private int humidity;
        @Column
        private String description;
        @Column
        private double windSpeed;
    
       //getters and setters
    }
    

    Full stacktrace:

    Process: me.bitfrom.weatherapp, PID: 3939
                                                                         com.raizlabs.android.dbflow.structure.InvalidDBConfiguration: Table: me.bitfrom.weatherapp.database.WeatherTable is not registered with a Database. Did you forget the @Table annotation?
                                                                             at com.raizlabs.android.dbflow.config.FlowManager.getDatabaseForTable(FlowManager.java:109)
                                                                             at com.raizlabs.android.dbflow.config.FlowManager.getModelAdapter(FlowManager.java:271)
                                                                             at com.raizlabs.android.dbflow.config.FlowManager.getTableName(FlowManager.java:68)
                                                                             at com.raizlabs.android.dbflow.sql.language.From.<init>(From.java:55)
                                                                             at com.raizlabs.android.dbflow.sql.language.Select.from(Select.java:58)
                                                                             at me.bitfrom.weatherapp.ui.fragments.TodaysWeatherFragment.onViewCreated(TodaysWeatherFragment.java:31)
                                                                             at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:908)
                                                                             at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
                                                                             at android.app.BackStackRecord.run(BackStackRecord.java:834)
                                                                             at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452)
                                                                             at android.app.FragmentManagerImpl$1.run(FragmentManager.java:447)
                                                                             at android.os.Handler.handleCallback(Handler.java:739)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                             at android.os.Looper.loop(Looper.java:211)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5389)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at java.lang.reflect.Method.invoke(Method.java:372)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
    
    Reviewed by KChernenko at 2015-12-28 01:26
  • 3. Using DBFlow in more than one module

    When I try to use DBFlow in more than one module I get an error. I figured out it was because it creates two DataBaseHolder classes in the same package. Is there a way to avoid this and use only one class for the whole project?

    Reviewed by strigare at 2015-06-08 06:09
  • 4. Example of Inserting relationship with the Queen and Ant

    I am having difficulty finding documentation relating to the creation and inserting of records.

    Queen q = new Queen();
    q.name = "Best Queen";
    q.save();
    
    Ant a = new Ant();
    a.type = "worker";
    a.isMale = false;
    a.associateQueen(q);
    a.save();
    

    Returns an error: Cannot call save() on a foreign key container. Call load() instead

    What is the correct way of inserting records with relationships?

    Reviewed by surfer190 at 2015-07-06 07:11
  • 5. Table is not registered with a Database. Did you forget the @Table annotation?

    Hello.

    I'm trying to use DBFlow version 3.0.0-beta5 in a project that uses

    • Dagger 2.2
    • DBFlow v3.0.0-beta5
    • Glide v3.7.0
    • Retrofit v2.0.0
    • Couple other small libraries for small utility stuff like AndroidViewAnimations.

    I often times get the following exception:

    com.raizlabs.android.dbflow.structure.InvalidDBConfiguration: Table: com.levibostian.app.UserModel is not registered with a Database. Did you forget the @Table annotation?
    

    This is not consistent, but happens very often, cleaning and rebuilding the app usually doesn't help (but sometimes does).

    I have checked out this issue which talks about disabling instant run, which I have done with same result of it happening most of the time, but not every single time.

    I have also checked out this issue which talks about using gradle clean from command line instead of in Android Studio. I have been doing ./gradlew clean and reinstalling my app every build (even if I do not edit any of the DBFlow touching code in my project) and no change of behavior either.

    Like I mentioned before, I am receiving this regularly but not every time. Maybe 75% of the time? The stacktrace triggers on this line of code:

    mFlowCursorList = new FlowCursorList<UserModel>(false, SQLite.select().from(UserModel.class).where(UserModel_Table.responded.isNull()).orderBy(UserModel_Table.user_id, true));
    

    in my adapter class which may be the first part of interaction with my Model classes. When the app does run the 25% of the time, it runs great with no issues.

    Any help, please and thank you.

    Reviewed by levibostian at 2016-04-12 21:51
  • 6. ForeignKey | Define column name of referenced class

    Setup:

    • DBFlow Version: 4.0.0-beta1
    • Target Platform: Android 23
    • Gradle/Maven: Gradle v2.10 Android Gradle Plugin v2.0.0
    • Build Tools: 24.0.3
    • Kotlin: 1.0.3 with kapt

    Issue Kind: Question

    Description:

    I want to reference a Model from another Model (See below). The problem with the version below is, I get

    Cannot find symbol method getFrom()
    Cannot find symbol method getTo()
    Cannot find symbol method getFrom()
    Cannot find symbol method getTo()
    
    @Table(database = MMHDatabase::class)
    class Transaction(from: Account? = null, value: Float = 0.0f, to: Account? = null, id: Long = -1) : BaseModel() {
        companion object {
            fun get(id: Long) : Transaction? {
                return (select
                        from Transaction::class
                        where (Transaction_Table.id eq id)).result
            }
        }
    
        @PrimaryKey(autoincrement = true)
        var id: Long = -1
    
        @ForeignKey
        var from: Account? = null
    
        @Column
        var value: Float = 0.0f
    
        @ForeignKey
        var to: Account? = null
    }
    

    Corresponding generated code (Line 3 and 9):

     1public final void bindToInsertValues(ContentValues values, Transaction model) {
     2    if (model.getFrom() != null) {
     3      values.put("from_id", model.getFrom().getFrom());
     4    } else {
     5      values.putNull("from_id");
     6    }
     7    values.put("value", model.getValue());
     8    if (model.getTo() != null) {
     9      values.put("to_id", model.getTo().getTo());
    10    } else {
    11      values.putNull("to_id");
    12    }
    13  }
    

    and (Line 3 and 9)

     1 public final void bindToInsertStatement(DatabaseStatement statement, Transaction model, int start) {
     2    if (model.getFrom() != null) {
     3      statement.bindLong(1 + start, model.getFrom().getFrom());
     4    } else {
     5      statement.bindNull(1 + start);
     6    }
     7    statement.bindDouble(2 + start, model.getValue());
     8    if (model.getTo() != null) {
     9      statement.bindLong(3 + start, model.getTo().getTo());
    10    } else {
    11      statement.bindNull(3 + start);
    12    }
    13  }
    

    I expected it would use the get method of the primary key of the Account class which would be getId().

    Reviewed by paraqles at 2016-10-24 13:53
  • 7. Many to many

    Hi, Is there any support for many to many relations ? If not, How would you implement it ?

    I thought about something like that: With doctors having many patients and patients having many doctors, all through an appointment

    Doctor.java

        @Table
        public class Doctor extends BaseModel {
    
            @Column(columnType = Column.PRIMARY_KEY)
            public  int               id;
            public  List<Appointment> appointments;
            private List<Patient>     patients;
    
            public Doctor() {
                super();
            }
    
            public List<Appointment> getAppointments() {
                if (appointments == null) {
                    appointments = Select.all(Appointment.class, Condition.column(Appointment$Table.DOCTORID).is(id));
                }
                return appointments;
            }
    
            public List<Patient> getPatients() {
                if (patients == null) {
                    // patients = { Select.all Patient INNER JOIN Appointments ON Patient.id = patientId }
                }
                return patients;
            }
        }
    

    Patient.java

        @Table
        public class Patient extends BaseModel {
    
            @Column(columnType = Column.PRIMARY_KEY)
            public  int               id;
            public  List<Appointment> appointments;
            private List<Doctor>      doctors;
    
            public Patient() {
                super();
            }
    
            public List<Appointment> getAppointments() {
                if (appointments == null) {
                    appointments = Select.all(Appointment.class, Condition.column(Appointment$Table.PATIENTID).is(id));
                }
                return appointments;
            }
    
            public List<Doctor> getDoctor() {
                if (doctors == null) {
                    // patients = { Select.all Patient INNER JOIN Appointments ON Patient.id = patientId }
                }
                return doctors;
            }
        }
    

    Appointment.java

        @Table
        public class Appointment extends BaseModel {
    
            @Column(columnType = Column.PRIMARY_KEY_AUTO_INCREMENT)
            public int id;
            public int doctorId;
            public int patientId;
    
            @Column(columnType = Column.FOREIGN_KEY,
                    references = { @ForeignKeyReference(columnType = Appointment.class,
                            columnName = "appointment", foreignColumnName = "id") })
            public Patient patient;
            @Column(columnType = Column.FOREIGN_KEY,
                    references = { @ForeignKeyReference(columnType = Appointment.class,
                            columnName = "appointment", foreignColumnName = "id") })
            public Doctor  doctor;
    
            public Appointment() {
                super();
            }
    
            public Doctor getDoctor() {
                return doctor;
            }
    
            public Patient getPatient() {
                return patient;
            }
    
        }
    
    Reviewed by damson at 2015-01-15 15:27
  • 8. Multi Database Modules works on 3.0.1 but not on 3.1.1

    DBFlow Version: 3.1.1 Bug: Multi module no longer works

    Description: when using version 3.0.1 multi module works fine but when updated to version 3.1.1 i get this error and it can't find the generated database holder class (it exists in android studio i can open it but can't build the project)

    Warning:File for type 'com.raizlabs.android.dbflow.config.FordDatabaseFord_Database' created in the last round will not be subject to annotation processing.
    Warning:File for type 'com.raizlabs.android.dbflow.config.FordModuleGeneratedDatabaseHolder' created in the last round will not be subject to annotation processing.
    Warning:The following options were not recognized by any processor: '[targetModuleName]'
    
    Reviewed by ec84b4 at 2016-09-11 07:17
  • 9. Update DB failed - duplicate column

    I want to migrate my App Databse from version 2 to version 3. While the database is in version 2 I added a new Model "Test". Then I added a new Column in version 3 and used the migrations addColumn().

    If I update the installed App with database version 2 to 3 everything is working. But if I update an installed App with database version 1 to 3 the mirgation failed with:

    Upgrading Database from 1 to 3 I/Database﹕ Executing Migration: x.x.x.database.migrations: AddTestColumn E/SQLiteLog﹕ (1) duplicate column name: test2

    This means, that the Model-Table is created with all its columns and then it tries to run the migrations with addColumn().

    Isn't adding a Model be versioned as well?

    Reviewed by Informaticore at 2015-07-23 10:28
  • 10. Transaction out to date! Migration 3.0.0-beta5 to 3.1.1

    DBFlow Version: Question

    Hello. I am doing a migration process and I would like to know what is the new version of this:

    TransactionManager.transact(PaidUpDatabase.DATABASE_NAME, business::update);

    This valid until 3.0.0-beta5 which is by the way not avaible on the repositorie. So My question now is how can I achieve the new version of transact?

    Thanks in advanced for your help.

    Reviewed by AugustoAleGon at 2017-04-07 21:07
  • 11. Cannot find symbol class ...GeneratedDatabaseHolder

    DBFlow Version: 3.0.0-beta6 Issue Kind (Bug, Question, Feature): Question

    Please note if you are using Instant Run, there may be bugs where generated classes are not created. Ensure you are using the apt or kapt plugins and that incremental compilation is off.

    Description: Hi, Error:(14, 42) error: cannot find symbol class SkyfishGeneratedDatabaseHolder Skyfish is my module. It occurred after updated to 3.0.0-beta6. Previously, i used 3.0.0-beta1 and no problem. Please help.

    Reviewed by elsennov at 2016-05-02 17:32
  • 12. Attempt to invoke virtual method '....RetrievalAdapter.getModelClass()' on a null object reference

    DBFlow Version: 4.2.4

    Bug or Feature Request: Attempt to invoke virtual method '....RetrievalAdapter.getModelClass()' on a null object reference

    Description: I'm getting the exception occasionally in production. Not sure why this fails only occasionally. Anyone have an idea?

    Fatal Exception: java.lang.NullPointerException
    Attempt to invoke virtual method 'java.lang.Class com.raizlabs.android.dbflow.structure.RetrievalAdapter.getModelClass()' on a null object reference
    
    com.raizlabs.android.dbflow.sql.saveable.ModelSaver.getWritableDatabase (ModelSaver.java:169)
    com.raizlabs.android.dbflow.sql.saveable.ModelSaver.save (ModelSaver.java:29)
    com.raizlabs.android.dbflow.structure.ModelAdapter.save (ModelAdapter.java:186)
    com.raizlabs.android.dbflow.structure.BaseModel.save (BaseModel.java:62)
    
    Reviewed by jchristof at 2021-12-27 17:39
  • 13. Cast Example

    ISSUE_TEMPLATE

    DBFlow Version: 3.1.1

    Bug or Feature Request:

    Description: I have a fairly complex query I'm trying to port to DBFlow semantics. The biggest hurdle I've had is trying to figure out the syntax for a query piece that looks essentially like this:

    SELECT Message.X, Message.Y, Message.Z, CASE WHEN CAST(Conversation.Bookmark AS LONG) <= 0 THEN false ELSE true END isBookmarkAvailable

    I can get part way there with the syntax IProperty foo = Method.cast(Conversation_Table.Bookmark).as(SQLiteType.INTEGER); but I cannot do a comparison "<= 0" on the IProperty.

    Reviewed by apsoftware-andyp at 2021-11-16 15:51
  • 14. Could not resolve com.github.Raizlabs.DBFlow:dbflow-processor:3.0.0 in jetpack.io

    ISSUE_TEMPLATE

    DBFlow Version: 3.0.0 Bug or Feature Request: can not find com.github.Raizlabs.DBFlow 3.0.0 in jetpack.io image Description:

    but i sloved it then steps as follow :

    1. find https://jitpack.io/com/github/Raizlabs/DBFlow/3.0.0/build.log
    2. download https://jitpack.io/com/github/Raizlabs/DBFlow/dbflow-core/3.0.0/dbflow-core-3.0.0.jar
    3. donwload https://jitpack.io/com/github/Raizlabs/DBFlow/dbflow/3.0.0/dbflow-3.0.0.aar
    4. but https://jitpack.io/com/github/Raizlabs/DBFlow/dbflow-processor/3.0.0/dbflow-processor-3.0.0.jar can not found, i fork the project checkout TAG ‘3.0.0’,and build it
    5. compile them as aar in your proejct
    Reviewed by cxMax at 2021-10-15 06:28
  • 15. Android X Update

    It would be great to have a release branch from the tag 4.2.4 that I could merge this into and then tag that branch with a 4.2.5 release. Right now I have to include Jetifier=true in the gradle.properties file because DBFlow is using the support annotations library. It would be nice not to need that to increase build performance.

    Reviewed by simon-the-canadian at 2021-09-10 18:10
  • 16. How to load list of objects with related objects (annotated with ForeignKey)?

    DBFlow Version: 4.2.4

    Bug or Feature Request: /

    Description:

    How to load list of objects with related objects (annotated with ForeignKey)?

    Code example:

    @Table(database = Database::class)
    class A : BaseModel() {
        @Column @PrimaryKey var id: Int = 0
        @Column var name = ""
        @Column @ForeignKey(onDelete = ForeignKeyAction.RESTRICT, saveForeignKeyModel = true)
        var b: B? = null
    }
    
    @Table(database = Database::class)
    class B : BaseModel() {
        @Column @PrimaryKey var id: Int = 0
        @Column var name = ""
    }
    

    I need to load list of A objects populated with B object. When I load 100 objects of class A and then iterate on them one by one and access B through them, DBFlow fires 100 SELECT queries. I wish to somehow load B's together with A's in a single query, and then populate A's with B's so no further queries are fired. So I was expecting that if query has INNER JOIN that it will automatically populate A object with B objects. Executed query:

    SELECT DISTINCT `a`.`id`,`a`.`name`,`b`.`id`,`b`.`name` FROM `A` AS `a` INNER JOIN `B` AS `b` ON `a`.`b_id`=`b`.`id`
    
    Reviewed by milovan92 at 2021-06-03 10:35
Related tags
LiteOrm is a fast, small, powerful ORM framework for Android. LiteOrm makes you do CRUD operarions on SQLite database with a sigle line of code efficiently.

#LiteOrm:Android高性能数据库框架 A fast, small, powerful ORM framework for Android. LiteOrm makes you do CRUD operarions on SQLite database with a sigle line

May 6, 2022
greenDAO is a light & fast ORM solution for Android that maps objects to SQLite databases.
greenDAO is a light & fast ORM solution for Android that maps objects to SQLite databases.

Check out ObjectBox Check out our new mobile database ObjectBox (GitHub repo). ObjectBox is a superfast object-oriented database with strong relation

May 18, 2022
a 3d database ORM experiment. (used in two commercial projects)

Android-TriOrm a 3d database ORM experiment for Android. (used in two commercial projects). based around small tables concept and JVM Serialization. H

Nov 24, 2021
AndroidQuery is an Android ORM for SQLite and ContentProvider which focuses on easy of use and performances thanks to annotation processing and code generation

WARNING: now that Room is out, I no longer maintain that library. If you need a library to easy access to default android ContentProvider, I would may

Dec 11, 2021
ORMDroid is a simple ORM persistence framework for your Android applications.

ORMDroid is a simple ORM persistence framework for your Android applications, providing an easy to use, almost-zero-config way to handle model persist

Feb 16, 2020
lightweight and minimalist ORM for Java/Android. works with SQLite & MySQL. (not actively maintained)

Description ORMAN is an minimalistic and lightweight ORM framework for Java which can handle your common database usage without writing SQL and strugg

Dec 16, 2021
lightweight and minimalist ORM for Java/Android. works with SQLite & MySQL. (not actively maintained)

Description ORMAN is an minimalistic and lightweight ORM framework for Java which can handle your common database usage without writing SQL and strugg

Dec 16, 2021
An ORM for Android with type-safety and painless smart migrations
An ORM for Android with type-safety and painless smart migrations

Android Orma Orma is a ORM (Object-Relation Mapper) for Android SQLiteDatabase. Because it generates helper classes at compile time with annotation pr

Apr 18, 2022
Android ORM
Android ORM

Shillelagh Shillelagh is an sqlite library. It was built to make life easier. The entire library was built around simplicity when using sqlite in Andr

Sep 11, 2020
Compile-time active record ORM for Android

Ollie Compile-time active record ORM for Android. Multiple mapping methods. SQLiteDatabase-like interface (QueryUtils.java). Lightweight query builder

Nov 8, 2021
Performance comparison of Android ORM Frameworks
Performance comparison of Android ORM Frameworks

Performance comparison of Android ORM Frameworks At the moment there are a lot of ORM-libraries for the Android OS. We reviewed the most popular ones

May 13, 2022
JAKO: Just Another Kotlin Orm (PostgreSQL)
JAKO: Just Another Kotlin Orm (PostgreSQL)

JAKO: Just Another Kotlin Orm (PostgreSQL) JAKO is a simple, minimal, no-dependency library to build and execute postgresql statements using a fluent

May 9, 2022
A simple ToDo app to demonstrate the use of Realm Database in android to perform some basic CRUD operations like Create, Update and Delete.
A simple ToDo app to demonstrate the use of Realm Database in android to perform some basic CRUD operations like Create, Update and Delete.

Creating a Realm Model Class @RealmClass open class Note() : RealmModel { @PrimaryKey var id: String = "" @Required var title: String

Apr 1, 2022
SquiDB is a SQLite database library for Android and iOS

Most ongoing development is currently taking place on the dev_4.0 branch. Click here to see the latest changes and try out the 4.0 beta. Introducing S

May 11, 2022
An Android library that makes developers use SQLite database extremely easy.

LitePal for Android 中文文档 LitePal is an open source Android library that allows developers to use SQLite database extremely easy. You can finish most o

May 17, 2022
An Android library that makes developers use SQLite database extremely easy.

LitePal for Android 中文文档 LitePal is an open source Android library that allows developers to use SQLite database extremely easy. You can finish most o

May 15, 2022
A simple NoSQL client for Android. Meant as a document store using key/value pairs and some rudimentary querying. Useful for avoiding the hassle of SQL code.

SimpleNoSQL A simple NoSQL client for Android. If you ever wanted to just save some data but didn't really want to worry about where it was going to b

May 10, 2022
An Android helper class to manage database creation and version management using an application's raw asset files

THIS PROJECT IS NO LONGER MAINTAINED Android SQLiteAssetHelper An Android helper class to manage database creation and version management using an app

May 15, 2022
Insanely easy way to work with Android Database.

Sugar ORM Insanely easy way to work with Android databases. Official documentation can be found here - Check some examples below. The example applicat

Apr 22, 2022