Android EasySQLite

Use easily the database SQLite on android using the DAO and transformer design patterns.

License

License

Categories

Categories

SQLite Data Databases
GroupId

GroupId

com.github.tonilopezmr
ArtifactId

ArtifactId

easysqlite
Last Version

Last Version

2.1.0
Release Date

Release Date

Type

Type

aar
Description

Description

Android EasySQLite
Use easily the database SQLite on android using the DAO and transformer design patterns.
Project URL

Project URL

https://github.com/tonilopezmr/Android-EasySQLite
Source Code Management

Source Code Management

https://github.com/tonilopezmr/Android-EasySQLite

Download easysqlite

How to add to project

<!-- https://jarcasting.com/artifacts/com.github.tonilopezmr/easysqlite/ -->
<dependency>
    <groupId>com.github.tonilopezmr</groupId>
    <artifactId>easysqlite</artifactId>
    <version>2.1.0</version>
    <type>aar</type>
</dependency>
// https://jarcasting.com/artifacts/com.github.tonilopezmr/easysqlite/
implementation 'com.github.tonilopezmr:easysqlite:2.1.0'
// https://jarcasting.com/artifacts/com.github.tonilopezmr/easysqlite/
implementation ("com.github.tonilopezmr:easysqlite:2.1.0")
'com.github.tonilopezmr:easysqlite:aar:2.1.0'
<dependency org="com.github.tonilopezmr" name="easysqlite" rev="2.1.0">
  <artifact name="easysqlite" type="aar" />
</dependency>
@Grapes(
@Grab(group='com.github.tonilopezmr', module='easysqlite', version='2.1.0')
)
libraryDependencies += "com.github.tonilopezmr" % "easysqlite" % "2.1.0"
[com.github.tonilopezmr/easysqlite "2.1.0"]

Dependencies

compile (1)

Group / Artifact Type Version
com.android.support » appcompat-v7 jar 21.0.3

Project Modules

There are no modules declared in this project.

#EasySQLite Build Status Maven Central Android Arsenal

Use easily the database SQLite on android using the DAO and transformer design patterns, I modified the library of the professor @jvprofe, I learned it from him.

Basic methods are already implemented in the class SQLiteDelegate<T>, if you need further queries you should extend from it.

#How to use

####Import EasySQLite dependency:

Grab via maven:

<dependency>
    <groupId>com.github.tonilopezmr</groupId>
    <artifactId>easysqlite</artifactId>
    <version>2.1.0</version>
</dependency>

or gradle:

compile 'com.github.tonilopezmr:easysqlite:2.1.0'

####1. Create the object Transformer which implements SQLiteTransformer

	public class SubjectTransformer implements SQLiteTransformer<SubjectEntity>{

	    public static final String ID = "id";
	    public static final String NAME = "name";

	    public static final String TABLE_NAME = "subject";
	    public static final String[] FIELDS = {ID, NAME};

	    @Override
	    public SubjectEntity transform(Cursor cursor) throws Exception {
	        int id = cursor.getInt(0);
	        String name = cursor.getString(1);
	        return new SubjectEntity(id, name);
	    }

	    @Override
	    public ContentValues transform(SubjectEntity dto) throws Exception {
	        ContentValues values = new ContentValues();
			//values.put(ID, dto.getId());   it is not necessary, autoincrement!
	        values.put(NAME, dto.getName());

	        return values;
	    }

	    @Override
	    public String getWhereClause(SubjectEntity dto) throws Exception {
	        return  ID+"="+dto.getId();
	    }

	    @Override
	    public SubjectEntity setId(SubjectEntity dto, Object id) throws Exception {
	        dto.setId((Integer.valueOf(id.toString())));
	        return dto;
	    }

	    @Override
	    public String[] getFields() throws Exception {
	        return FIELDS;
	    }

	    @Override
	    public String getTableName() throws Exception {
	        return TABLE_NAME;
	    }
	}

####2. Create the object DAO which extends SQLiteDelegate

The SQLiteDelegate<T> has implemented the following methods:

//Default methods implement with SQLiteDelegate
T create(T dto)
int update(T dto)
T read(T id)
Collection<T> readAll()
boolean delete(T dto)
int deleteAll()
	public class SubjectDAO extends SQLiteDelegate<SubjectEntity> {

	    public SubjectDAO(SQLiteDatabase db) {
	        super(db, new SubjectTransformer());
	    }
		
	    //In the case you need more querys, write this for example:
	    public List<T> getSubjectsApproved() {
	    	...	    
	    }
	    
	}

####If you need one relation between objects (foreign key)

	public class SubjectTransformer implements SQLiteTransformer<SubjectEntity>{
		
		...

		private ExamDAO examDAO;

	   	public SubjectTransformer(SQLiteDatabase db){
	   		examDAO = new ExamDAO(db);
	   	}

		...	
	}

####and

	public class SubjectDAO extends SQLiteDelegate<SubjectEntity> {
	
	    	public SubjectDAO(SQLiteDatabase db) {
	        	super(db, new SubjectTransformer(db));
	    	}
	    	
	}

####3. Instance the object DAO and use the CRUD methods

    
    ...
    
    SubjectDAO subjectDAO = new SubjectDAO(database);
    Subject subject = new Subject("maths");
    
    //Create
    subject = subjectDAO.create(subject);
    
    //Delete
    boolean isDelete = subjectDAO.delete(subject);
    ...
    

Use the SQLiteHelper and get rid of SQLiteOpenHelper

####If you need one simple database:

//Create table
final private String SUBJECT_TABLE =
        "CREATE TABLE SUBJECT(" +
	        "ID INTEGER PRIMARY KEY AUTOINCREMENT," +
	        "NAME TEXT NOT NULL" +
        ")";

//Table name        
final private String SUBJECT = "SUBJECT";

final private String[] TABLES = {SUBJECT_TABLE};
final private String[] TABLE_NAMES = {SUBJECT};
	

Important:

  • The array TABLES in database must be sorted in order of creation, to avoid problems with the foreign keys!.

  • The array tables in database must be sorted in opposite order by the array of creation tables, for example:

final private String[] TABLES = {SUBJECT_TABLE, EXAM_TABLE, PROFESSOR_TABLE};
//Very important, sorted in opposite order.
final private String[] TABLE_NAMES = {PROFESSOR, EXAM, SUBJECT_TABLE};  

Create SQLiteHelper:

SQLiteHelper helper = SQLiteHelper.builder()
	.tables(TABLES)
 	.tableNames(TABLE_NAMES)
 	.build(context);
 	
SQLiteDatabase dataBase = helper.getWritableDatabase(); 

In this case, the name and version of the database by default are Name: com.easysqlite and Version: 1. For put the name and version you can do:

SQLiteHelper helper = SQLiteHelper.builder()
	.tables(TABLES)
 	.tableNames(TABLE_NAMES)
 	.build(context, DATABASE_NAME, SQLITE_VERSION);

OR

SQLiteHelper helper = SQLiteHelper.builder()
	.tables(TABLES)
 	.tableNames(TABLE_NAMES)
 	.name(DATABASE_NAME)
 	.version(DATABASE_VERSION)
 	.build(context);

####If you need one custom implementation:

private static SQLiteHelper.SQLiteHelperCallback helperCallback = new SQLiteHelper.SQLiteHelperCallback() {
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(SUBJECT_TABLE);
            db.execSQL("INSERT INTO "+SUBJECT+"(name) VALUES ('Maths')");
            
            ...
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            ...	
        }
};
SQLiteHelper helper = SQLiteHelper.builder()
	.beginConfig()
		.helperCallback(helperCallback)
		.foreignKey(true)		//PRAGMA foreign_keys = ON
	.endConfig()
	.tables(TABLES)
	.tableNames(TABLE_NAMES)
	.build(context, DATABASE_NAME, cursorFactory, SQLITE_VERSION);

If you need change only the method onCreate or onUpgrade, use onCreateCallback(OnCreateCallback callback) or onUpgradeCallback(OnUpgradeCallback callback).

Sample Clean architecture

The code which uses this library is in the package 'com.tonilopezmr.sample.data.SQLite'.

I use the Clean architecture with the pattern MVP, I have been motivated for the speaker pedrovgs in DroidCon 2014.

After see the MVP implementations of:

Libraries used on the sample project

If anything is wrong contact me

Follow me on Twitter Add me to Linkedin

######Sorry for my English :(

License

Copyright 2015 Antonio López Marín <tonilopezmr.com>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Versions

Version
2.1.0
2.0.1
2.0.0
1.0.2
1.0.1