Android SQLite Store Custom objects
The data types that can be stored in the SQLite database are null, INTEGER, REAL (floating point), TEXT, BOOL, all five data types. In Android development, the general practice in which we store data is that the properties of the database are the member variables of the class, such as:
To store a person's name and age, in the class is to define them as two member variables
class Person{ private String name; privateint age;}
They are stored as two fields in a database
-Name TEXT
-Age INTEGER
The way I'm going to introduce this is to store the Persond1 instance directly in the database, that is, to store the object in the database.
This is done by serializing the object into a byte stream string, then storing the byte stream string in the database in the text type, and then deserializing the byte stream into the object when fetching the data. So our entity class is the class that implements the Serializable interface.
Here is an example (download):
- The first is the person class, which is the entity class we store, only the set and get methods, and the serialization interface is implemented
PackageCom.databasetest;Importjava.io.Serializable;@SuppressWarnings("Serial") Public class person implements Serializable{ PrivateString name;Private intAge Public Person(){ This("",0);//Default value} Public Person(String name,intAge) { This. name = name; This. Age = Age; } PublicStringGetName() {returnName } Public void SetName(String name) { This. name = name; } Public int Getage() {returnAge } Public void Setage(intAge) { This. Age = Age; }}
- Then the auxiliary class of the database
Packagecom.db;ImportAndroid.content.ContentValues;ImportAndroid.content.Context;ImportAndroid.database.Cursor;ImportAndroid.database.sqlite.SQLiteDatabase;ImportAndroid.database.sqlite.SQLiteOpenHelper;ImportAndroid.util.Log; Public class dbservices extends sqliteopenhelper{ Public Final Static intVersion =1; Public Final StaticString DbName ="Test"; Public dbservices(Context context) {Super(Context,dbname,NULL, version); }@Override Public void onCreate(Sqlitedatabase db) {//TODO auto-generated method stubDb.begintransaction ();//Create a mailing tableString Create_mail_sql ="CREATE TABLE if not exists [Test]"+"(_id integer primary key Autoincrement,person text)"; Db.execsql (Create_mail_sql); Db.settransactionsuccessful (); Db.endtransaction (); }@Override Public void Onupgrade(Sqlitedatabase DB,intOldversion,intNewVersion) {//TODO auto-generated method stub}}
- Next is the instance interface, with two input boxes for name and age, a button for confirmation, and a list showing the information stored in the database
This is the layout file:
<linearlayout xmlns: Android = "http://schemas.android.com/apk/res/android" xmlns:tools =" Http://schemas.android.com/tools " android:id = "@+id/linearlayout1" android:layout_width =" match_parent " android:layout_height =" match_parent " android:orientation =" vertical " tools:context = "com.databasetest.MainActivity" ; <edittext android:id = "@+id/edittext1" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:ems =" android:hint = "name" /& gt; <EditTextandroid:id= "@+id/edittext2"android:layout_width="Fill_ Parent "android:layout_height="wrap_content "android:ems=" Ten " Android:hint="Age" > <requestfocus /> </EditText> <buttonandroid:id="@+id/button1"android:layout_width="Wrap_ Content "android:layout_height=" Wrap_content "android:text=" ok add " /> <linearlayoutandroid:layout_width="Match_parent"android:layout_ Height="Wrap_content"android:orientation="vertical" > <ListViewandroid:id="@+id/listview1"android:layout_width="Match _parent "android:layout_height=" Fill_parent " > </ListView> </linearlayout></linearlayout>
- The last is mainactivity.
Where the SaveData method is used to store the object; Getallobject is used to get all the person objects in the database.
Public class mainactivity extends actionbaractivity {EditText TV1; EditText TV2; Button btn; ListView LV; arraylist<string> array =NewArraylist<string> (); Arrayadapter<string> adapter; Dbservices db =NewDbservices ( This);@Override protected void onCreate(Bundle savedinstancestate) {Super. OnCreate (Savedinstancestate); Setcontentview (R.layout.activity_main);//Get controlTV1 = (EditText) Findviewbyid (R.ID.EDITTEXT1); TV2 = (EditText) Findviewbyid (R.ID.EDITTEXT2); BTN = (Button) Findviewbyid (R.id.button1); LV = (ListView) Findviewbyid (R.ID.LISTVIEW1);//Initialize data in the databaseInitdb (); Btn.setonclicklistener (NewOnclicklistener () {@Override Public void OnClick(View v) {//TODO auto-generated method stubString name = Tv1.gettext (). toString (); String age = Tv2.gettext (). toString ();intNAge =0;Try{NAge = integer.valueof (age); }Catch(NumberFormatException exception) {Exception.printstacktrace (); NAge =0; } Person person =NewPerson (name,integer.valueof (age)); Array.add (name+" - "+age); SaveData (person); Lv.invalidateviews (); } }); }Private void Initdb() {db =NewDbservices ( This); arraylist<person> persons = This. Getallobject (); for(intI=0; I<persons.size (); i++) {String object = Persons.get (i). GetName () +" - "+ Persons.get (i). Getage (); This. Array.add (object); } adapter =NewArrayadapter<string> ( ThisAndroid. R.layout.simple_expandable_list_item_1,array); Lv.setadapter (adapter); }/** * Save data * @param Student * * Public void SaveData(Person person) {Bytearrayoutputstream Arrayoutputstream =NewBytearrayoutputstream ();Try{ObjectOutputStream ObjectOutputStream =NewObjectOutputStream (Arrayoutputstream); Objectoutputstream.writeobject (person); Objectoutputstream.flush ();byteData[] = Arrayoutputstream.tobytearray (); Objectoutputstream.close (); Arrayoutputstream.close (); Sqlitedatabase database = Db.getwritabledatabase (); Database.execsql (' INSERT into Test ' values (?) ',NewObject[] {data}); Database.close (); }Catch(Exception e) {//TODO auto-generated catch blockE.printstacktrace (); } } PublicArraylist<person>Getallobject() {arraylist<person> persons =NewArraylist<person> (); Sqlitedatabase database = Db.getreadabledatabase (); cursor cursor = Database.rawquery ("SELECT * from Test",NULL);if(Cursor! =NULL) { while(Cursor.movetonext ()) {LOG.D ("Data-id", Cursor.getstring (0));byteData[] = Cursor.getblob (Cursor.getcolumnindex ("Person")); Bytearrayinputstream Arrayinputstream =NewBytearrayinputstream (data);Try{ObjectInputStream InputStream =NewObjectInputStream (Arrayinputstream); Person person = (person) inputstream.readobject (); Persons.add (person); Inputstream.close (); Arrayinputstream.close (); }Catch(Exception e) {E.printstacktrace (); }}} LOG.D ("Persons-count", Integer.tostring (Persons.size ()));returnPersons }}
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
"Android Basics" Android SQLite store custom objects