Android
ORMLite in Android
Suche…
Beispiel für Android OrmLite über SQLite
ORMLite ist ein Object Relational Mapping-Paket, das einfache und kompakte Funktionen für das Beibehalten von Java-Objekten in SQL-Datenbanken bietet und dabei die Komplexität und den Mehraufwand von Standard-ORM-Paketen vermeidet.
OrmLite wird für Android über die sofort unterstützte Datenbank SQLite implementiert. Sie ruft die API direkt auf, um auf SQLite zuzugreifen.
Gradle-Setup
Um zu beginnen, sollten Sie das Paket dem Build-Gradle hinzufügen.
// https://mvnrepository.com/artifact/com.j256.ormlite/ormlite-android
compile group: 'com.j256.ormlite', name: 'ormlite-android', version: '5.0'
POJO configuration
Dann sollten Sie einen POJO so konfigurieren, dass er in der Datenbank gespeichert bleibt. Hier muss auf die Anmerkungen geachtet werden:
- Fügen Sie die @DatabaseTable-Anmerkung oben jeder Klasse hinzu. Sie können auch @Entity verwenden.
- Fügen Sie die @DatabaseField-Anmerkung direkt vor jedem zu persistierenden Feld hinzu. Sie können auch @Column und andere verwenden.
- Fügen Sie jeder Klasse einen Konstruktor ohne Argumente hinzu, der mindestens die Paketsichtbarkeit hat.
@DatabaseTable(tableName = "form_model")
public class FormModel implements Serializable {
@DatabaseField(generatedId = true)
private Long id;
@DatabaseField(dataType = DataType.SERIALIZABLE)
ArrayList<ReviewItem> reviewItems;
@DatabaseField(index = true)
private String username;
@DatabaseField
private String createdAt;
public FormModel() {
}
public FormModel(ArrayList<ReviewItem> reviewItems, String username, String createdAt) {
this.reviewItems = reviewItems;
this.username = username;
this.createdAt = createdAt;
}
}
Im obigen Beispiel gibt es eine Tabelle (form_model) mit 4 Feldern.
ID-Feld ist automatisch erstellter Index.
Benutzername ist ein Index für die Datenbank.
Weitere Informationen zur Annotation finden Sie in der offiziellen Dokumentation .
Datenbank-Helfer
Um fortzufahren, müssen Sie eine Datenbank-Helper-Klasse erstellen, die die OrmLiteSqliteOpenHelper-Klasse erweitern soll.
Diese Klasse erstellt und aktualisiert die Datenbank, wenn Ihre Anwendung installiert wird, und kann auch die DAO-Klassen bereitstellen, die von Ihren anderen Klassen verwendet werden.
DAO steht für Data Access Object und bietet alle Scrum-Funktionen und ist auf die Behandlung einer einzelnen persistenten Klasse spezialisiert.
Die Helfer-Klasse muss die folgenden zwei Methoden implementieren:
onCreate (SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource);
onCreate erstellt die Datenbank, wenn Ihre App zum ersten Mal installiert wird
onUpgrade (SQLiteDatabase-Datenbank, ConnectionSource connectionSource, int oldVersion, int newVersion);
OnUpgrade übernimmt die Aktualisierung der Datenbanktabellen, wenn Sie Ihre App auf eine neue Version aktualisieren
Beispiel für die Datenbankhilfeklasse:
public class OrmLite extends OrmLiteSqliteOpenHelper {
//Database name
private static final String DATABASE_NAME = "gaia";
//Version of the database. Changing the version will call {@Link OrmLite.onUpgrade}
private static final int DATABASE_VERSION = 2;
/**
* The data access object used to interact with the Sqlite database to do C.R.U.D operations.
*/
private Dao<FormModel, Long> todoDao;
public OrmLite(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION,
/**
* R.raw.ormlite_config is a reference to the ormlite_config2.txt file in the
* /res/raw/ directory of this project
* */
R.raw.ormlite_config2);
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
try {
/**
* creates the database table
*/
TableUtils.createTable(connectionSource, FormModel.class);
} catch (SQLException e) {
e.printStackTrace();
} catch (java.sql.SQLException e) {
e.printStackTrace();
}
}
/*
It is called when you construct a SQLiteOpenHelper with version newer than the version of the opened database.
*/
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource,
int oldVersion, int newVersion) {
try {
/**
* Recreates the database when onUpgrade is called by the framework
*/
TableUtils.dropTable(connectionSource, FormModel.class, false);
onCreate(database, connectionSource);
} catch (SQLException | java.sql.SQLException e) {
e.printStackTrace();
}
}
/**
* Returns an instance of the data access object
* @return
* @throws SQLException
*/
public Dao<FormModel, Long> getDao() throws SQLException {
if(todoDao == null) {
try {
todoDao = getDao(FormModel.class);
} catch (java.sql.SQLException e) {
e.printStackTrace();
}
}
return todoDao;
}
}
Objekt bleibt in SQLite bestehen
Schließlich die Klasse, die das Objekt in der Datenbank speichert.
public class ReviewPresenter {
Dao<FormModel, Long> simpleDao;
public ReviewPresenter(Application application) {
this.application = (GaiaApplication) application;
simpleDao = this.application.getHelper().getDao();
}
public void storeFormToSqLite(FormModel form) {
try {
simpleDao.create(form);
} catch (SQLException e) {
e.printStackTrace();
}
List<FormModel> list = null;
try {
// query for all of the data objects in the database
list = simpleDao.queryForAll();
} catch (SQLException e) {
e.printStackTrace();
}
// our string builder for building the content-view
StringBuilder sb = new StringBuilder();
int simpleC = 1;
for (FormModel simple : list) {
sb.append('#').append(simpleC).append(": ").append(simple.getUsername()).append('\n');
simpleC++;
}
System.out.println(sb.toString());
}
//Query to database to get all forms by username
public List<FormModel> getAllFormsByUsername(String username) {
List<FormModel> results = null;
try {
results = simpleDao.queryBuilder().where().eq("username", PreferencesManager.getInstance().getString(Constants.USERNAME)).query();
} catch (SQLException e) {
e.printStackTrace();
}
return results;
}
}
Der Accessor des DOA am Konstruktor der obigen Klasse ist definiert als:
private OrmLite dbHelper = null;
/*
Provides the SQLite Helper Object among the application
*/
public OrmLite getHelper() {
if (dbHelper == null) {
dbHelper = OpenHelperManager.getHelper(this, OrmLite.class);
}
return dbHelper;
}