SQLite’Databases’

Transcription

SQLiteDatabasesCOMP 355 (Muppala)Data Storage1

SQLiteDatabase dbySQLite– Lightweightandfile- ‐based,idealformobiledevices– – Databasesshouldnotbeusedtostorefiles ypartlysupportsomeSQLcommandssuchasALTER,TABLE. SQLiteisincludedaspartofAndroid’ssoIwarestack MoreinfoaboutSQLiteathKp://www.sqlite.orgCOMP 355 (Muppala)Data Storage2

SQLiteDatabases StepsforusingSQLitedatabases:1.2.3.4.5.6. ialasanexampleCOMP 355 (Muppala)Data Storage3

apter{publicsta3cfinalStringKEY TITLE " tle";publicsta3cfinalStringKEY BODY "body";publicsta3cfinalStringKEY ROWID " id";privatesta3cfinalStringTAG ment*/privatesta3cfinalStringDATABASE CREATE "createtablenotes( idintegerprimarykeyautoincrement," �nalStringDATABASE NAME "data";privatesta3cfinalStringDATABASE TABLE "notes";privatesta3cfinalintDATABASE VERSION 2;privatefinalContextmCtx;COMP 355 (Muppala)Data Storage4

bases createasubclassofSQLiteOpenHelperclass ThenoverrideitsonCreate()method – se e– hanewdefeni4on– BeKertomigrateexis4ngdataintoanewtable upgradingthedatabase– bycallingitsonCreate()handler– ingtheonUpgrade()handlerCOMP 355 (Muppala)Data Storage5

Contextcontext){super(context,DATABASE NAME,null,DATABASE sedb){db.execSQL(DATABASE dingdatabasefromversion" oldVersion "to" newVersion LEIFEXISTSnotes");onCreate(db);}}COMP 355 (Muppala)Data Storage6

(Contextctx){this.mCtx DbHelper newDatabaseHelper(mCtx);mDb voidclose(){mDbHelper.close();}COMP 355 (Muppala)Data Storage7

SQLiteDatabases le,Stringbody){ContentValuesini4alValues newContentValues();ini4alValues.put(KEY TITLE,Itle);ini4alValues.put(KEY BODY,body);returnmDb.insert(DATABASE TABLE,null,ini rnmDb.delete(DATABASE TABLE,KEY ROWID " " rowId,null) ringbody){ContentValuesargs newContentValues();args.put(KEY TITLE,Itle);args.put(KEY BODY,body);returnmDb.update(DATABASE TABLE,args,KEY ROWID " " rowId,null) 0;}COMP 355 (Muppala)Data Storage8

SQLiteDatabases DatabasequeriesarereturnedasCursorobjects– Pointerstotheresul4ngsetswithintheunderlyingdata Cursorclassprovidesseveralmethods:– nusedtomovetoarow– getCounttogetthenumberofrowsinthecursor– getPosi4ontogetthecurrentrowposi4on– togetinfooncolumns– COMP 355 (Muppala)Data Storage9

Notes(){returnmDb.query(DATABASE TABLE,newString[]{KEY ROWID,KEY TITLE,KEY Note(longrowId)throwsSQLExcep3on{CursormCursor mDb.query(true,DATABASE TABLE,newString[]{KEY ROWID,KEY TITLE,KEY BODY},KEY ROWID " " rowId,null,null,null,null,null);if(mCursor! null){mCursor.moveToFirst();}returnmCursor;}COMP 355 (Muppala)Data Storage10

SQLiteExample:NotebookTutorial sCursor odisplayinthelist(onlyTITLE)String[]from newString[]{NotesDbAdapter.KEY �eldsto(inthiscasejusttext1)int[]to erandsetittodisplaySimpleCursorAdapternotes newSimpleCursorAdapter(this,R.layout.notes MP 355 (Muppala)Data Storage11

ContentProvidersCOMP 355 (Muppala)Data Storage12

ContentProviders 4ons– Onlywaytosharedataacrossapplica4ons StandardcontentproviderspartofAndroid:– informa4on) theirdatapublic– Alterna4velyaddthedatatoanexis4ngprovider ding,alteringanddele4ngdata Actualstorageofdataisuptothedesigner ddatalayerCOMP 355 (Muppala)Data Storage13

AccessingContent instance– pda4ngdatafromthecontentproviderContentResolvercr getContentResolver();cr.query(People.CONTENT Valuesnewvalues newContentValues();cr.insert(People.CONTENT URI,newvalues);cr.delete(People.CONTENT URI,null,null);//deleteallcontactsCOMP 355 (Muppala)Data Storage14

ContentProviders tabasemodel– eandmeaning Queriesreturncursorobjects en4fiesitsdataset– der– URIsstartwithcontent:// – Typicalformat:Content:// packagename .provider. customprovidername / DataPath COMP 355 (Muppala)Data Storage15

ContentProviders:Query der:––– withID 23.UrimyPerson ContentUris.withAppendedId(People.CONTENT erson Uri.withAppendedPath(People.CONTENT cur managedQuery(myPerson,null,null,null,null);COMP 355 (Muppala)Data Storage16

on newString[]{People. ID,People. tacts People.CONTENT URI;//Makethequery.CursormanagedCursor namePeople.NAME "ASC");COMP 355 (Muppala)Data Storage17

ContentProviders:Query eColumn cur.getColumnIndex(People.NAME);intphoneColumn do{//Getthefieldvaluesname cur.getString(nameColumn);phoneNumber ues.}while(cur.moveToNext());}}COMP 355 (Muppala)Data Storage18

ContentProviders:ModifyingData dsBatchupda4ngexis4ngrecordsDele4ngrecords AllaccomplishedusingContentResolvermethods UseContentValues()toaddorupdatedataCOMP 355 (Muppala)Data Storage19

ContentProviders:AddingData android.content.ContentValues;ContentValuesvalues incoln");//1 thenewcontactisaddedtofavorites//0 e.STARRED,1);Uriuri getContentResolver().insert(People.CONTENT URI,values);COMP 355 (Muppala)Data Storage20

ContentProviders:AddingData Addingnewvalues:UriphoneUri null;UriemailUri null;phoneUri Uri.withAppendedPath(uri,People.Phones.CONTENT .TYPE,People.Phones.TYPE /Nowaddanemailaddressinthesameway.emailUri TENT .KIND,Contacts.KIND PE,People.ContactMethods.TYPE ;COMP 355 (Muppala)Data Storage21

ContentProviders UseContentResolver.update()tobatchupdatefields UseContentResolver.delete()todelete:– Aspecificrow– wstodeleteCOMP 355 (Muppala)Data Storage22

Crea4ngContentProviders Tocreateacontentprovider,youmust:– .– data– applica4on(AndroidManifest.xml)COMP 355 (Muppala)Data Storage23

Crea4ngContentProviders ExtendingtheContentProviderclasswillrequire:– date(),delete(),getType(),onCreate()– Makesurethattheseimplementa4onsarethread- objectsinseveraldifferentprocessesandthreads Inaddi4on,youneedto:– Declareapublicsta4cfinalURInamedCONTENT URI– urntoclients– CarefullydocumentthedatatypeofeachcolumnCOMP 355 (Muppala)Data Storage24

Crea4ngContentProviders le: Example: providerandroid:name i4es "com.example.autos.autoinfoprovider"./ /provider COMP 355 (Muppala)Data Storage25

methods’or’SQLite’databases,’ ��want.’ – ide’access’to’your’data – estfile’for’your’applicaon’ (AndroidManifest.xml)