Ormlite is an open-source framework for database operations assistance, primarily for the Java language. In the Android database development, is a more popular open source framework, easy to operate and powerful, today to learn about, the recent project has also been involved in, write a blog to remember, thank God team contributed so useful open source framework, here is Ormlite official website: http ://ormlite.com/
Preparation – Create database and data tables
Ormlite with Java annotations to establish a mapping relationship with the database, here we have an example to illustrate, as we now want to build a simple database test.db and create a table person to record one's name, age, address and so on.
To create a bean class
First, we build our bean class person and associate it with the database by annotating it.
@DatabaseTable(TableName ="Person") Public class person { @DatabaseField(generatedid=true)Private intId@DatabaseField(columnname="Name")PrivateString name;@DatabaseField(columnname="Age")Private intAge@DatabaseField(columnname="Address")PrivateString address;/** * @return the ID */ Public int getId() {returnId }/** * @param ID The ID to set */ Public void setId(intID) { This. id = ID; }/** * @return the name * * PublicStringGetName() {returnName }/** * @param Name The name to set */ Public void SetName(String name) { This. name = name; }/** * @return The age * * Public int Getage() {returnAge }/** * @param age-The age-to set */ Public void Setage(intAge) { This. Age = Age; }/** * @return the address * * PublicStringgetaddress() {returnAddress }/** * @param address the address to set */ Public void setaddress(String address) { This. address = Address; }}
Here we create the Bean class and connect to the database, two things we need to do
1. Need to fill in the table name in the @databasetable annotation
2. Fill in the field name in @databasefield (columnname= ""), set the properties of the field, etc.
Field Property Description
Ormlite provides us with comprehensive support for field properties, let's take a look at the details below:
- Cloumnname: Specifies the field name, without specifying the variable name as the field name
- Canbenull: Whether it can be null
- DataType: Specifies the type of field
- Foreign specifies that the object of this field is a foreign key, and the foreign key value is the ID of this object
- If the Foreignautocreate foreign key does not exist, it is automatically added to the external table
- Foreignautorefresh foreign key value, auto refresh
- Foreigncolumnname which field in the Foreign key table is specified by the Foreign key field
- Generatedid: Specifies the ID of the field to grow from, and cannot id,generatedidsequence generic
- ID: Specify Field ID
- Index: Indexed
- Persisted: Specifies whether this variable is persisted, by default true
- Throwifnull if a null value throws an exception
- Usegetset: Specifies that the Ormlite access variable uses the Set,get method by default using the reflection mechanism to directly access the variable
- Unique: Field value unique
- Uniqueindex Unique Index
- Uniquecombo the value of the whole column is unique
Create a database
Similar to database creation in Android, creating a database using Ormlite requires us to create a sqlopenhelper inheritance ormlitesqliteopenhelper, There are two important methods in Ormlitesqliteopenhelper, namely OnCreate and Onupgrade, which are responsible for database creation and the operation of the upgrade.
Public class mysqlopenhelper extends ormlitesqliteopenhelper { PrivateDao<person, integer> Mpersondao; Public Mysqlopenhelper(Context context) {Super(Context,"Test",NULL,1);//TODO auto-generated constructor stub}@Override Public void onCreate(Sqlitedatabase arg0, Connectionsource arg1) {//TODO auto-generated method stub Try{//Create data TablesTableutils.createtableifnotexists (Arg1, Person.class); }Catch(Java.sql.SQLException e) {//TODO auto-generated catch blockE.printstacktrace (); } }@Override Public void Onupgrade(Sqlitedatabase arg0, Connectionsource arg1,intArg2,intARG3) {//TODO auto-generated method stub} PublicDao<person, integer>Getpersondao()throwsjava.sql.SQLException {if(Mpersondao = =NULL) {Mpersondao = Getdao (Person.class); }returnMpersondao; }}
DAO is a very important class, these DAO objects are used for future database operations, which contain two generics, the first generic table DAO operation class, and the second is the ID of the tag data table.
Database operations
After we have created our own database, we can come to the database operation, and then we will see how to make the database additions and deletions.
Insert operation
These methods are relatively simple to use, and we just need to pass our own beans into the following methods
- Create: Insert a piece of data
- Createifnotexists: Insert If it does not exist
- Createorupdate: Update if it exists
Query operations
Ormlite for me to provide a series of query operations, a lot of methods, and many are just look at the method name can be known, here is not introduced, here is how to use QueryBuilder for complex lookups.
- First Call Persondao.querybuilder (), get the QueryBuilder object under the DAO,
- Next, set the query criteria for QueryBuilder,
- Finally, the list object is obtained by QueryBuilder's Query method.
Here are a few common builder queries,
1. Multi-field condition query:
QueryBuilder builder = dao.queryBuilder(); builder.where().eq("字段名1","条件1").and.eq(""字段名2","条件2")
2. Query and output sequentially
QueryBuilder<PersonInteger> builder = dao.queryBuilder();builder.orderBy("字段名"true);builder.query();
Order BY method The first parameter means sort by that field, and the second parameter indicates whether it is ascending.
3. Paging Query
QueryBuilder<Person, Integer> builder = dao.queryBuilder();builder.offset(10);//表示查询的起始位置builder.limit(10);//表示总共获取的对象数量builder.query();
Delete and change actions
Similar to query operations, Ormlite also provides us with a range of methods, as well as complex deletions, complex changes of Deletebuilder and Updatebuilder, which are similar in usage to QueryBuilder, and are not described in detail.
Place the database on the SD card
Android Create a database The default storage path is under the/data/data/packagename/database directory, on the one hand if the database is large will occupy the system storage space, on the other hand, if you do not get the system root permissions, will not be able to visually see the database. So at the end of the article, how to build the database under the specified SD card directory.
This is not offered in Ormlite, write it yourself. Read the Android source code can be easily found that the Android database storage directory is the Contextwrapper class under the public File Getdatabasepath (String name) method is determined, Then we just need to create our own context to overwrite the method.
Public class databasecontext extends contextwrapper { Private Static FinalString root_sdcard = environment. getExternalStorageDirectory (). GetAbsolutePath ();PrivateString Dbdir; Public Databasecontext(Context base, String Path) {Super(base); Dbdir = path; }@Override PublicFileGetdatabasepath(String name) {//Determine if there is an SD card BooleanSdexist = Android.os.Environment.MEDIA_MOUNTED. Equals (Android.os.Environment.getExternalStorageState ());if(!sdexist) {//If not present,LOG.E ("Database Error","SD card does not exist");return NULL; }//Determine if the directory exists and does not exist create the directoryFile Dirfile =NewFile (Dbdir);if(!dirfile.exists ()) dirfile.mkdirs ();//Mark database file is created successfully BooleanIsfilecreatesuccess =false; String DbPath = Dbdir +"/"+ Name;//database pathFile DBFile =NewFile (DbPath);//If the database file does not exist, create the file if(!dbfile.exists ()) {Try{isfilecreatesuccess = Dbfile.createnewfile ();//Create file}Catch(IOException e) {//TODO auto-generated catch blockE.printstacktrace (); } }ElseIsfilecreatesuccess =true;//Returns the database file object if(isfilecreatesuccess)returnDBFile;Else return NULL; }@Override PublicSqlitedatabaseOpenorcreatedatabase(String name,intMode, Sqlitedatabase.cursorfactory Factory) {sqlitedatabase result = Sqlitedatabase.openorcreatedatabas E (Getdatabasepath (name),NULL);returnResult }/** * Android 4.0 will call this method to get the database. * */ @Override PublicSqlitedatabaseOpenorcreatedatabase(String name,intMode, Cursorfactory Factory, Databaseerrorhandler ErrorHandler) {sqlitedatabase result = Sqlitedatabase . Openorcreatedatabase (Getdatabasepath (name),NULL);returnResult }}
After we create the sqlopenhelper, we simply pass in our own databasecontext, as
new SdCardDBHelper(new DatabaseContext( MainActivity.this"person.db");
Ormlite Related documents Download
Attach Ormlite related jar files and official documentation: click to download
Android Rapid Development--using Ormlite to operate the database