Download as pdf or txt
Download as pdf or txt
You are on page 1of 27

DOWNLOAD

ERRORS

Search ..

September 15, 2013 08:26 PM

Android SQLite Database with Multiple Tables


4 Comments
Like 102 Tw eet 5

In my previous tutorial Android SQLite Database Tutorial I explained how to use SQLite database in your android application. But that covered the scenario, only when you have one table in the database. I am getting lot of queries about handling the sqlite database when it is having multiple tables. I explained here how to handle the SQLite database when it is having multiple tables.

DOWNLOAD CODE

Use Case: Todo Application


To make it easier for you to understand, I am taking a real use case example of TODO Application database schema in this tutorial. This article doesnt covers how to design the application, but explains the database design, preparing database helper classes and models.

Database Design
I considered a basic Todo Application with minimal functionality like creating a todo note and assigning it under a tag(s) (category). So for this we just need three tables in the database. The three tables are todos to store all todo notes tags to store list of tags todo_tags to store the tags which are assigned to a todo

Check the below diagram that explains the table structure and the relationship between tables

Lets start a new Project


So lets start by creating a new project in Eclipse IDE 1. Create a new project in Eclipse from File New Android Application Project. I named my package name as info.androidhive.sqlite and left the main activity name as MainActivity.java 2. We need two more packages to keep helpers and model classes. Right Clicking on src New Package and name them as info.androidhive.sqlite.helper and info.androidhive.sqlite.model

Creating Model Class for Tables


Next step is to create model classes for our database tables just to make single row as an object. We need only two models for todos and tags. For todo_tags we dont need a model class. 3. Create a new class file under info.androidhive.sqlite.helper package named Todo.java and type the code like below. This is the model class for todos table

T o d o . j a v a
p a c k a g ei n f o . a n d r o i d h i v e . s q l i t e . m o d e l ;

p u b l i cc l a s sT o d o{ i n ti d ; S t r i n gn o t e ; i n ts t a t u s ; S t r i n gc r e a t e d _ a t ; / /c o n s t r u c t o r s p u b l i cT o d o ( ){ } p u b l i cT o d o ( S t r i n gn o t e ,i n ts t a t u s ){ t h i s . n o t e=n o t e ; t h i s . s t a t u s=s t a t u s ; } p u b l i cT o d o ( i n ti d ,S t r i n gn o t e ,i n ts t a t u s ){ t h i s . i d=i d ; t h i s . n o t e=n o t e ; t h i s . s t a t u s=s t a t u s ; } / /s e t t e r s p u b l i cv o i ds e t I d ( i n ti d ){ t h i s . i d=i d ; } p u b l i cv o i ds e t N o t e ( S t r i n gn o t e ){ t h i s . n o t e=n o t e ; } p u b l i cv o i ds e t S t a t u s ( i n ts t a t u s ){ t h i s . s t a t u s=s t a t u s ; } p u b l i cv o i ds e t C r e a t e d A t ( S t r i n gc r e a t e d _ a t ) { t h i s . c r e a t e d _ a t=c r e a t e d _ a t ; } / /g e t t e r s p u b l i cl o n gg e t I d ( ){ r e t u r nt h i s . i d ; } p u b l i cS t r i n gg e t N o t e ( ){ r e t u r nt h i s . n o t e ; } p u b l i ci n tg e t S t a t u s ( ){ r e t u r nt h i s . s t a t u s ; }

4. Create one more model class for tags table named Tag.java under the same package.

T a g . j a v a

p a c k a g ei n f o . a n d r o i d h i v e . s q l i t e . m o d e l ; p u b l i cc l a s sT a g{ i n ti d ; S t r i n gt a g _ n a m e ; / /c o n s t r u c t o r s p u b l i cT a g ( ){ } p u b l i cT a g ( S t r i n gt a g _ n a m e ){ t h i s . t a g _ n a m e=t a g _ n a m e ; } p u b l i cT a g ( i n ti d ,S t r i n gt a g _ n a m e ){ t h i s . i d=i d ; t h i s . t a g _ n a m e=t a g _ n a m e ; } / /s e t t e r p u b l i cv o i ds e t I d ( i n ti d ){ t h i s . i d=i d ; } p u b l i cv o i ds e t T a g N a m e ( S t r i n gt a g _ n a m e ){ t h i s . t a g _ n a m e=t a g _ n a m e ; } / /g e t t e r p u b l i ci n tg e t I d ( ){ r e t u r nt h i s . i d ; } p u b l i cS t r i n gg e t T a g N a m e ( ){ r e t u r nt h i s . t a g _ n a m e ; }

Database Helper Class


Database helper class contains all the methods to perform database operations like opening connection, closing connection, insert, update, read, delete and other things. As this class is helper class, place this under helper package. 5. So create another class named DatabaseHelper.java under info.androidhive.sqlite.helper package and extend the class from SQLiteOpenHelper

p u b l i cc l a s sD a t a b a s e H e l p e re x t e n d sS Q L i t e O p e n H e l p e r{

6. Add required variables like database name, database version, column names. I also executed table create statements in onCreate() method. Type the following code in DatabaseHelper.java class

D a t a b a s e H e l p e r . j a v a
p u b l i cc l a s sD a t a b a s e H e l p e re x t e n d sS Q L i t e O p e n H e l p e r{ / /L o g c a tt a g p r i v a t es t a t i cf i n a lS t r i n gL O G=" D a t a b a s e H e l p e r " ; / /D a t a b a s eV e r s i o n p r i v a t es t a t i cf i n a li n tD A T A B A S E _ V E R S I O N=1 ; / /D a t a b a s eN a m e p r i v a t es t a t i cf i n a lS t r i n gD A T A B A S E _ N A M E=" c o n t a c t s M a n a g e r " ; / /T a b l eN a m e s p r i v a t es t a t i cf i n a lS t r i n gT A B L E _ T O D O=" t o d o s " ; p r i v a t es t a t i cf i n a lS t r i n gT A B L E _ T A G=" t a g s " ; p r i v a t es t a t i cf i n a lS t r i n gT A B L E _ T O D O _ T A G=" t o d o _ t a g s " ; / /C o m m o nc o l u m nn a m e s p r i v a t es t a t i cf i n a lS t r i n gK E Y _ I D=" i d " ; p r i v a t es t a t i cf i n a lS t r i n gK E Y _ C R E A T E D _ A T=" c r e a t e d _ a t " ; / /N O T E ST a b l e-c o l u m nn m a e s p r i v a t es t a t i cf i n a lS t r i n gK E Y _ T O D O=" t o d o " ; p r i v a t es t a t i cf i n a lS t r i n gK E Y _ S T A T U S=" s t a t u s " ; / /T A G ST a b l e-c o l u m nn a m e s p r i v a t es t a t i cf i n a lS t r i n gK E Y _ T A G _ N A M E=" t a g _ n a m e " ; / /N O T E _ T A G ST a b l e-c o l u m nn a m e s p r i v a t es t a t i cf i n a lS t r i n gK E Y _ T O D O _ I D=" t o d o _ i d " ; p r i v a t es t a t i cf i n a lS t r i n gK E Y _ T A G _ I D=" t a g _ i d " ; / /T a b l eC r e a t eS t a t e m e n t s / /T o d ot a b l ec r e a t es t a t e m e n t p r i v a t es t a t i cf i n a lS t r i n gC R E A T E _ T A B L E _ T O D O=" C R E A T ET A B L E" +T A B L E _ T O D O+" ( "+K E Y _ I D+"I N T E G E RP R I M A R YK E Y , "+K E Y _ T O D O +"T E X T , "+K E Y _ S T A T U S+"I N T E G E R , "+K E Y _ C R E A T E D _ A T +"D A T E T I M E "+" ) " ; / /T a gt a b l ec r e a t es t a t e m e n t p r i v a t es t a t i cf i n a lS t r i n gC R E A T E _ T A B L E _ T A G=" C R E A T ET A B L E"+T A B L E _ T A G +" ( "+K E Y _ I D+"I N T E G E RP R I M A R YK E Y , "+K E Y _ T A G _ N A M E+"T E X T , " +K E Y _ C R E A T E D _ A T+"D A T E T I M E "+" ) " ; / /t o d o _ t a gt a b l ec r e a t es t a t e m e n t p r i v a t es t a t i cf i n a lS t r i n gC R E A T E _ T A B L E _ T O D O _ T A G=" C R E A T ET A B L E" +T A B L E _ T O D O _ T A G+" ( "+K E Y _ I D+"I N T E G E RP R I M A R YK E Y , " +K E Y _ T O D O _ I D+"I N T E G E R , "+K E Y _ T A G _ I D+"I N T E G E R , " +K E Y _ C R E A T E D _ A T+"D A T E T I M E "+" ) " ; p u b l i cD a t a b a s e H e l p e r ( C o n t e x tc o n t e x t ){ s u p e r ( c o n t e x t ,D A T A B A S E _ N A M E ,n u l l ,D A T A B A S E _ V E R S I O N ) ; }

@ O v e r r i d e p u b l i cv o i do n C r e a t e ( S Q L i t e D a t a b a s ed b ){ / /c r e a t i n gr e q u i r e dt a b l e s d b . e x e c S Q L ( C R E A T E _ T A B L E _ T O D O ) ; d b . e x e c S Q L ( C R E A T E _ T A B L E _ T A G ) ; d b . e x e c S Q L ( C R E A T E _ T A B L E _ T O D O _ T A G ) ;

@ O v e r r i d e p u b l i cv o i do n U p g r a d e ( S Q L i t e D a t a b a s ed b ,i n to l d V e r s i o n ,i n tn e w V e r s i o n ){ / /o nu p g r a d ed r o po l d e rt a b l e s d b . e x e c S Q L ( " D R O PT A B L EI FE X I S T S"+T A B L E _ T O D O ) ; d b . e x e c S Q L ( " D R O PT A B L EI FE X I S T S"+T A B L E _ T A G ) ; d b . e x e c S Q L ( " D R O PT A B L EI FE X I S T S"+T A B L E _ T O D O _ T A G ) ; / /c r e a t en e wt a b l e s o n C r e a t e ( d b ) ;

CRUD (Create, Read, Update and Delete) Operations


From now on we are going to add one by one method into DatabaseHelper.class

1. Creating a Todo
The function will create a todo item in todos table. In this same function we are assigning the todo to a tag name which inserts a row in todo_tags table.

/ * *C r e a t i n gat o d o * / p u b l i cl o n gc r e a t e T o D o ( T o d ot o d o ,l o n g [ ]t a g _ i d s ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; C o n t e n t V a l u e sv a l u e s=n e wC o n t e n t V a l u e s ( ) ; v a l u e s . p u t ( K E Y _ T O D O ,t o d o . g e t N o t e ( ) ) ; v a l u e s . p u t ( K E Y _ S T A T U S ,t o d o . g e t S t a t u s ( ) ) ; v a l u e s . p u t ( K E Y _ C R E A T E D _ A T ,g e t D a t e T i m e ( ) ) ; / /i n s e r tr o w l o n gt o d o _ i d=d b . i n s e r t ( T A B L E _ T O D O ,n u l l ,v a l u e s ) ; / /a s s i g n i n gt a g st ot o d o f o r( l o n gt a g _ i d:t a g _ i d s ){ c r e a t e T o d o T a g ( t o d o _ i d ,t a g _ i d ) ; }

r e t u r nt o d o _ i d ;

2. Fetching a Todo
Following will fetch a todo from todos table.
SELECT * FROM todos WHERE id = 1;

/ * *g e ts i n g l et o d o * / p u b l i cT o d og e t T o d o ( l o n gt o d o _ i d ){ S Q L i t e D a t a b a s ed b=t h i s . g e t R e a d a b l e D a t a b a s e ( ) ; S t r i n gs e l e c t Q u e r y=" S E L E C T *F R O M"+T A B L E _ T O D O+"W H E R E" +K E Y _ I D+"="+t o d o _ i d ; L o g . e ( L O G ,s e l e c t Q u e r y ) ; C u r s o rc=d b . r a w Q u e r y ( s e l e c t Q u e r y ,n u l l ) ; i f( c! =n u l l ) c . m o v e T o F i r s t ( ) ; T o d ot d=n e wT o d o ( ) ; t d . s e t I d ( c . g e t I n t ( c . g e t C o l u m n I n d e x ( K E Y _ I D ) ) ) ; t d . s e t N o t e ( ( c . g e t S t r i n g ( c . g e t C o l u m n I n d e x ( K E Y _ T O D O ) ) ) ) ; t d . s e t C r e a t e d A t ( c . g e t S t r i n g ( c . g e t C o l u m n I n d e x ( K E Y _ C R E A T E D _ A T ) ) ) ; } r e t u r nt d ;

3. Fetching all Todos


Fetching all todos involves reading all todo rows and adding them to a list array.
SELECT * FROM todos;

/ * *g e t t i n ga l lt o d o s ** / p u b l i cL i s t < T o d o >g e t A l l T o D o s ( ){ L i s t < T o d o >t o d o s=n e wA r r a y L i s t < T o d o > ( ) ;

S t r i n gs e l e c t Q u e r y=" S E L E C T *F R O M"+T A B L E _ T O D O ; L o g . e ( L O G ,s e l e c t Q u e r y ) ; S Q L i t e D a t a b a s ed b=t h i s . g e t R e a d a b l e D a t a b a s e ( ) ; C u r s o rc=d b . r a w Q u e r y ( s e l e c t Q u e r y ,n u l l ) ; / /l o o p i n gt h r o u g ha l lr o w sa n da d d i n gt ol i s t i f( c . m o v e T o F i r s t ( ) ){ d o{ T o d ot d=n e wT o d o ( ) ; t d . s e t I d ( c . g e t I n t ( ( c . g e t C o l u m n I n d e x ( K E Y _ I D ) ) ) ) ; t d . s e t N o t e ( ( c . g e t S t r i n g ( c . g e t C o l u m n I n d e x ( K E Y _ T O D O ) ) ) ) ; t d . s e t C r e a t e d A t ( c . g e t S t r i n g ( c . g e t C o l u m n I n d e x ( K E Y _ C R E A T E D _ A T ) ) ) ; / /a d d i n gt ot o d ol i s t t o d o s . a d d ( t d ) ; }w h i l e( c . m o v e T o N e x t ( ) ) ;

} }

r e t u r nt o d o s ;

4. Fetching all Todos under a Tag name


This is also same as reading all the rows but it filters the todos by tag name. Check the following select query which fetches the todos under Watchlist tag name.
SELECT * FROM todos td, tags tg, todo_tags tt WHERE tg.tag_name = Watchlist AND tg.id = tt.tag_id AND td.id = tt.todo_id;

/ * *g e t t i n ga l lt o d o su n d e rs i n g l et a g ** / p u b l i cL i s t < T o d o >g e t A l l T o D o s B y T a g ( S t r i n gt a g _ n a m e ){ L i s t < T o d o >t o d o s=n e wA r r a y L i s t < T o d o > ( ) ; S t r i n gs e l e c t Q u e r y=" S E L E C T *F R O M"+T A B L E _ T O D O+"t d ," +T A B L E _ T A G+"t g ,"+T A B L E _ T O D O _ T A G+"t tW H E R Et g . " +K E Y _ T A G _ N A M E+"=' "+t a g _ n a m e+" ' "+"A N Dt g . "+K E Y _ I D +"="+" t t . "+K E Y _ T A G _ I D+"A N Dt d . "+K E Y _ I D+"=" +" t t . "+K E Y _ T O D O _ I D ; L o g . e ( L O G ,s e l e c t Q u e r y ) ; S Q L i t e D a t a b a s ed b=t h i s . g e t R e a d a b l e D a t a b a s e ( ) ; C u r s o rc=d b . r a w Q u e r y ( s e l e c t Q u e r y ,n u l l ) ; / /l o o p i n gt h r o u g ha l lr o w sa n da d d i n gt ol i s t i f( c . m o v e T o F i r s t ( ) ){ d o{ T o d ot d=n e wT o d o ( ) ;

t d . s e t I d ( c . g e t I n t ( ( c . g e t C o l u m n I n d e x ( K E Y _ I D ) ) ) ) ; t d . s e t N o t e ( ( c . g e t S t r i n g ( c . g e t C o l u m n I n d e x ( K E Y _ T O D O ) ) ) ) ; t d . s e t C r e a t e d A t ( c . g e t S t r i n g ( c . g e t C o l u m n I n d e x ( K E Y _ C R E A T E D _ A T ) ) ) ; / /a d d i n gt ot o d ol i s t t o d o s . a d d ( t d ) ; }w h i l e( c . m o v e T o N e x t ( ) ) ;

} }

r e t u r nt o d o s ;

5. Updating a Todo
Following function will update a todo. It will update Todo values only, not the tag name.

/ * *U p d a t i n gat o d o * / p u b l i ci n tu p d a t e T o D o ( T o d ot o d o ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; C o n t e n t V a l u e sv a l u e s=n e wC o n t e n t V a l u e s ( ) ; v a l u e s . p u t ( K E Y _ T O D O ,t o d o . g e t N o t e ( ) ) ; v a l u e s . p u t ( K E Y _ S T A T U S ,t o d o . g e t S t a t u s ( ) ) ; / /u p d a t i n gr o w r e t u r nd b . u p d a t e ( T A B L E _ T O D O ,v a l u e s ,K E Y _ I D+"=? " , n e wS t r i n g [ ]{S t r i n g . v a l u e O f ( t o d o . g e t I d ( ) )} ) ;

6. Deleting a Todo
Pass todo id to the following function to delete the todo from db.

/ * *D e l e t i n gat o d o * / p u b l i cv o i dd e l e t e T o D o ( l o n gt a d o _ i d ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; d b . d e l e t e ( T A B L E _ T O D O ,K E Y _ I D+"=? " , n e wS t r i n g [ ]{S t r i n g . v a l u e O f ( t a d o _ i d )} ) ; }

Until now we are done creating the CRUD methods onto todos table. Now we can start the methods required on tags table.

7. Creating Tag
Following method will insert a row into tags table.

/ * *C r e a t i n gt a g * / p u b l i cl o n gc r e a t e T a g ( T a gt a g ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; C o n t e n t V a l u e sv a l u e s=n e wC o n t e n t V a l u e s ( ) ; v a l u e s . p u t ( K E Y _ T A G _ N A M E ,t a g . g e t T a g N a m e ( ) ) ; v a l u e s . p u t ( K E Y _ C R E A T E D _ A T ,g e t D a t e T i m e ( ) ) ; / /i n s e r tr o w l o n gt a g _ i d=d b . i n s e r t ( T A B L E _ T A G ,n u l l ,v a l u e s ) ; } r e t u r nt a g _ i d ;

8. Fetching all Tag names


Performing select all statement on tags table will give you list of tag names.
SELECT * FROM tags;

/ * * *g e t t i n ga l lt a g s ** / p u b l i cL i s t < T a g >g e t A l l T a g s ( ){ L i s t < T a g >t a g s=n e wA r r a y L i s t < T a g > ( ) ; S t r i n gs e l e c t Q u e r y=" S E L E C T *F R O M"+T A B L E _ T A G ; L o g . e ( L O G ,s e l e c t Q u e r y ) ; S Q L i t e D a t a b a s ed b=t h i s . g e t R e a d a b l e D a t a b a s e ( ) ; C u r s o rc=d b . r a w Q u e r y ( s e l e c t Q u e r y ,n u l l ) ; / /l o o p i n gt h r o u g ha l lr o w sa n da d d i n gt ol i s t i f( c . m o v e T o F i r s t ( ) ){ d o{ T a gt=n e wT a g ( ) ; t . s e t I d ( c . g e t I n t ( ( c . g e t C o l u m n I n d e x ( K E Y _ I D ) ) ) ) ; t . s e t T a g N a m e ( c . g e t S t r i n g ( c . g e t C o l u m n I n d e x ( K E Y _ T A G _ N A M E ) ) ) ; / /a d d i n gt ot a g sl i s t

} r e t u r nt a g s ;

t a g s . a d d ( t ) ; }w h i l e( c . m o v e T o N e x t ( ) ) ;

9. Updating Tags
Following method will update tag.

/ * *U p d a t i n gat a g * / p u b l i ci n tu p d a t e T a g ( T a gt a g ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; C o n t e n t V a l u e sv a l u e s=n e wC o n t e n t V a l u e s ( ) ; v a l u e s . p u t ( K E Y _ T A G _ N A M E ,t a g . g e t T a g N a m e ( ) ) ; / /u p d a t i n gr o w r e t u r nd b . u p d a t e ( T A B L E _ T A G ,v a l u e s ,K E Y _ I D+"=? " , n e wS t r i n g [ ]{S t r i n g . v a l u e O f ( t a g . g e t I d ( ) )} ) ;

10. Deleting Tag and Todos under the Tag name


Following method will delete a tag from db. This also will delete all the todos under the tag name, but this is optional. should_delete_all_tag_todos = Passing true will delete all the todos under the tag name

/ * *D e l e t i n gat a g * / p u b l i cv o i dd e l e t e T a g ( T a gt a g ,b o o l e a ns h o u l d _ d e l e t e _ a l l _ t a g _ t o d o s ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; / /b e f o r ed e l e t i n gt a g / /c h e c ki ft o d o su n d e rt h i st a gs h o u l da l s ob ed e l e t e d i f( s h o u l d _ d e l e t e _ a l l _ t a g _ t o d o s ){ / /g e ta l lt o d o su n d e rt h i st a g L i s t < T o d o >a l l T a g T o D o s=g e t A l l T o D o s B y T a g ( t a g . g e t T a g N a m e ( ) ) ; / /d e l e t ea l lt o d o s f o r( T o d ot o d o:a l l T a g T o D o s ){ / /d e l e t et o d o d e l e t e T o D o ( t o d o . g e t I d ( ) ) ; }

} / /n o wd e l e t et h et a g d b . d e l e t e ( T A B L E _ T A G ,K E Y _ I D+"=? " , n e wS t r i n g [ ]{S t r i n g . v a l u e O f ( t a g . g e t I d ( ) )} ) ;

Below are the methods to access the rows from todo_tags table

11. Assigning a Tag to Todo


Following method will assign a todo under a tag name. You can also assign multiple tags to a todo by calling this function multiple times.

/ *

*C r e a t i n gt o d o _ t a g * / p u b l i cl o n gc r e a t e T o d o T a g ( l o n gt o d o _ i d ,l o n gt a g _ i d ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; C o n t e n t V a l u e sv a l u e s=n e wC o n t e n t V a l u e s ( ) ; v a l u e s . p u t ( K E Y _ T O D O _ I D ,t o d o _ i d ) ; v a l u e s . p u t ( K E Y _ T A G _ I D ,t a g _ i d ) ; v a l u e s . p u t ( K E Y _ C R E A T E D _ A T ,g e t D a t e T i m e ( ) ) ; l o n gi d=d b . i n s e r t ( T A B L E _ T O D O _ T A G ,n u l l ,v a l u e s ) ; } r e t u r ni d ;

12. Removing Tag of Todo


Following method will remove the tag assigned to a todo

/ * *U p d a t i n gat o d ot a g * / p u b l i ci n tu p d a t e N o t e T a g ( l o n gi d ,l o n gt a g _ i d ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; C o n t e n t V a l u e sv a l u e s=n e wC o n t e n t V a l u e s ( ) ; v a l u e s . p u t ( K E Y _ T A G _ I D ,t a g _ i d ) ; / /u p d a t i n gr o w r e t u r nd b . u p d a t e ( T A B L E _ T O D O ,v a l u e s ,K E Y _ I D+"=? " , n e wS t r i n g [ ]{S t r i n g . v a l u e O f ( i d )} ) ;

13. Changing the tag of todo


Following simply replaces the tag name of a todo

/ * *U p d a t i n gat o d ot a g * / p u b l i ci n tu p d a t e N o t e T a g ( l o n gi d ,l o n gt a g _ i d ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; C o n t e n t V a l u e sv a l u e s=n e wC o n t e n t V a l u e s ( ) ; v a l u e s . p u t ( K E Y _ T A G _ I D ,t a g _ i d ) ; / /u p d a t i n gr o w r e t u r nd b . u p d a t e ( T A B L E _ T O D O ,v a l u e s ,K E Y _ I D+"=? " , n e wS t r i n g [ ]{S t r i n g . v a l u e O f ( i d )} ) ;

14. Closing Database Connection


Importantly dont forget to close the database connection once you done using it. Call following method when you dont need access to db anymore.

/ /c l o s i n gd a t a b a s e p u b l i cv o i dc l o s e D B ( ){ S Q L i t e D a t a b a s ed b=t h i s . g e t R e a d a b l e D a t a b a s e ( ) ; i f( d b! =n u l l& &d b . i s O p e n ( ) ) d b . c l o s e ( ) ; }

How to Use / Testing


As this tutorial already seems lengthy I am not considering giving an example with a sample application. In upcoming tutorial I will give you a simple todo application which will give you complete picture of using multiple SQLite tables in your android apps. For now we will test the class just by printing the data to Logcat . Open your main activity class and type the following. In the below I just created sample tags and todo

data and performed the all the operations by calling the methods which we prepared in DatabaseHelper class.

M a i n A c t i v i t y . j a v a
p a c k a g ei n f o . a n d r o i d h i v e . s q l i t e ; i m p o r ti n f o . a n d r o i d h i v e . s q l i t e . h e l p e r . D a t a b a s e H e l p e r ; i m p o r ti n f o . a n d r o i d h i v e . s q l i t e . m o d e l . T a g ; i m p o r ti n f o . a n d r o i d h i v e . s q l i t e . m o d e l . T o d o ; i m p o r tj a v a . u t i l . L i s t ; i m p o r ta n d r o i d . a p p . A c t i v i t y ; i m p o r ta n d r o i d . o s . B u n d l e ; i m p o r ta n d r o i d . u t i l . L o g ; p u b l i cc l a s sM a i n A c t i v i t ye x t e n d sA c t i v i t y{ / /D a t a b a s eH e l p e r D a t a b a s e H e l p e rd b ; @ O v e r r i d e p r o t e c t e dv o i do n C r e a t e ( B u n d l es a v e d I n s t a n c e S t a t e ){ s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ; s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ; d b=n e wD a t a b a s e H e l p e r ( g e t A p p l i c a t i o n C o n t e x t ( ) ) ; / /C r e a t i n gt a g s T a gt a g 1=n e wT a g ( " S h o p p i n g " ) ; T a gt a g 2=n e wT a g ( " I m p o r t a n t " ) ; T a gt a g 3=n e wT a g ( " W a t c h l i s t " ) ; T a gt a g 4=n e wT a g ( " A n d r o i d h i v e " ) ; / /I n s e r t i n gt a g si nd b l o n gt a g 1 _ i d=d b . c r e a t e T a g ( t a g 1 ) ; l o n gt a g 2 _ i d=d b . c r e a t e T a g ( t a g 2 ) ; l o n gt a g 3 _ i d=d b . c r e a t e T a g ( t a g 3 ) ; l o n gt a g 4 _ i d=d b . c r e a t e T a g ( t a g 4 ) ; L o g . d ( " T a gC o u n t " ," T a gC o u n t :"+d b . g e t A l l T a g s ( ) . s i z e ( ) ) ; / /C r e a t i n gT o D o s T o d ot o d o 1=n e wT o d o ( " i P h o n e5 S " ,0 ) ; T o d ot o d o 2=n e wT o d o ( " G a l a x yN o t eI I " ,0 ) ; T o d ot o d o 3=n e wT o d o ( " W h i t e b o a r d " ,0 ) ; T o d ot o d o 4=n e wT o d o ( " R i d d i c k " ,0 ) ; T o d ot o d o 5=n e wT o d o ( " P r i s o n e r s " ,0 ) ; T o d ot o d o 6=n e wT o d o ( " T h eC r o o d s " ,0 ) ; T o d ot o d o 7=n e wT o d o ( " I n s i d i o u s :C h a p t e r2 " ,0 ) ; T o d ot o d o 8=n e wT o d o ( " D o n ' tf o r g e tt oc a l lM O M " ,0 ) ; T o d ot o d o 9=n e wT o d o ( " C o l l e c tm o n e yf r o mJ o h n " ,0 ) ; T o d ot o d o 1 0=n e wT o d o ( " P o s tn e wA r t i c l e " ,0 ) ; T o d ot o d o 1 1=n e wT o d o ( " T a k ed a t a b a s eb a c k u p " ,0 ) ;

/ /I n s e r t i n gt o d o si nd b / /I n s e r t i n gt o d o su n d e r" S h o p p i n g "T a g l o n gt o d o 1 _ i d=d b . c r e a t e T o D o ( t o d o 1 ,n e wl o n g [ ]{t a g 1 _ i d} ) ; l o n gt o d o 2 _ i d=d b . c r e a t e T o D o ( t o d o 2 ,n e wl o n g [ ]{t a g 1 _ i d} ) ; l o n gt o d o 3 _ i d=d b . c r e a t e T o D o ( t o d o 3 ,n e wl o n g [ ]{t a g 1 _ i d} ) ; / /I n s e r t i n gt o d o su n d e r" W a t c h l i s t "T a g l o n gt o d o 4 _ i d=d b . c r e a t e T o D o ( t o d o 4 ,n e wl o n g [ ]{t a g 3 _ i d} ) ; l o n gt o d o 5 _ i d=d b . c r e a t e T o D o ( t o d o 5 ,n e wl o n g [ ]{t a g 3 _ i d} ) ; l o n gt o d o 6 _ i d=d b . c r e a t e T o D o ( t o d o 6 ,n e wl o n g [ ]{t a g 3 _ i d} ) ; l o n gt o d o 7 _ i d=d b . c r e a t e T o D o ( t o d o 7 ,n e wl o n g [ ]{t a g 3 _ i d} ) ; / /I n s e r t i n gt o d o su n d e r" I m p o r t a n t "T a g l o n gt o d o 8 _ i d=d b . c r e a t e T o D o ( t o d o 8 ,n e wl o n g [ ]{t a g 2 _ i d} ) ; l o n gt o d o 9 _ i d=d b . c r e a t e T o D o ( t o d o 9 ,n e wl o n g [ ]{t a g 2 _ i d} ) ; / /I n s e r t i n gt o d o su n d e r" A n d r o i d h i v e "T a g l o n gt o d o 1 0 _ i d=d b . c r e a t e T o D o ( t o d o 1 0 ,n e wl o n g [ ]{t a g 4 _ i d} ) ; l o n gt o d o 1 1 _ i d=d b . c r e a t e T o D o ( t o d o 1 1 ,n e wl o n g [ ]{t a g 4 _ i d} ) ; L o g . e ( " T o d oC o u n t " ," T o d oc o u n t :"+d b . g e t T o D o C o u n t ( ) ) ; / /" P o s tn e wA r t i c l e "-a s s i g n i n gt h i su n d e r" I m p o r t a n t "T a g / /N o wt h i sw i l lh a v e-" A n d r o i d h i v e "a n d" I m p o r t a n t "T a g s d b . c r e a t e T o d o T a g ( t o d o 1 0 _ i d ,t a g 2 _ i d ) ; / /G e t t i n ga l lt a gn a m e s L o g . d ( " G e tT a g s " ," G e t t i n gA l lT a g s " ) ; L i s t < T a g >a l l T a g s=d b . g e t A l l T a g s ( ) ; f o r( T a gt a g:a l l T a g s ){ L o g . d ( " T a gN a m e " ,t a g . g e t T a g N a m e ( ) ) ; } / /G e t t i n ga l lT o d o s L o g . d ( " G e tT o d o s " ," G e t t i n gA l lT o D o s " ) ; L i s t < T o d o >a l l T o D o s=d b . g e t A l l T o D o s ( ) ; f o r( T o d ot o d o:a l l T o D o s ){ L o g . d ( " T o D o " ,t o d o . g e t N o t e ( ) ) ; } / /G e t t i n gt o d o su n d e r" W a t c h l i s t "t a gn a m e L o g . d ( " T o D o " ," G e tt o d o su n d e rs i n g l eT a gn a m e " ) ; L i s t < T o d o >t a g s W a t c h L i s t=d b . g e t A l l T o D o s B y T a g ( t a g 3 . g e t T a g N a m e ( ) ) ; f o r( T o d ot o d o:t a g s W a t c h L i s t ){ L o g . d ( " T o D oW a t c h l i s t " ,t o d o . g e t N o t e ( ) ) ; } / /D e l e t i n gaT o D o L o g . d ( " D e l e t eT o D o " ," D e l e t i n gaT o d o " ) ; L o g . d ( " T a gC o u n t " ," T a gC o u n tB e f o r eD e l e t i n g :"+d b . g e t T o D o C o u n t ( ) ) ; d b . d e l e t e T o D o ( t o d o 8 _ i d ) ; L o g . d ( " T a gC o u n t " ," T a gC o u n tA f t e rD e l e t i n g :"+d b . g e t T o D o C o u n t ( ) ) ; / /D e l e t i n ga l lT o d o su n d e r" S h o p p i n g "t a g

L o g . d ( " T a gC o u n t " , " T a gC o u n tB e f o r eD e l e t i n g' S h o p p i n g 'T o d o s :" +d b . g e t T o D o C o u n t ( ) ) ; d b . d e l e t e T a g ( t a g 1 ,t r u e ) ; L o g . d ( " T a gC o u n t " , " T a gC o u n tA f t e rD e l e t i n g' S h o p p i n g 'T o d o s :" +d b . g e t T o D o C o u n t ( ) ) ; / /U p d a t i n gt a gn a m e t a g 3 . s e t T a g N a m e ( " M o v i e st ow a t c h " ) ; d b . u p d a t e T a g ( t a g 3 ) ; / /D o n ' tf o r g e tt oc l o s ed a t a b a s ec o n n e c t i o n d b . c l o s e D B ( ) ; } }

Run the application and the check the Logcat .

Complete Code of DatabaseHelper.java Class


D a t a b a s e H e l p e r . j a v a
p a c k a g ei n f o . a n d r o i d h i v e . s q l i t e . h e l p e r ; i m p o r ti n f o . a n d r o i d h i v e . s q l i t e . m o d e l . T a g ; i m p o r ti n f o . a n d r o i d h i v e . s q l i t e . m o d e l . T o d o ; i m p o r tj a v a . t e x t . S i m p l e D a t e F o r m a t ; i m p o r tj a v a . u t i l . A r r a y L i s t ; i m p o r tj a v a . u t i l . D a t e ; i m p o r tj a v a . u t i l . L i s t ; i m p o r tj a v a . u t i l . L o c a l e ; i m p o r ta n d r o i d . c o n t e n t . C o n t e n t V a l u e s ; i m p o r ta n d r o i d . c o n t e n t . C o n t e x t ; i m p o r ta n d r o i d . d a t a b a s e . C u r s o r ; i m p o r ta n d r o i d . d a t a b a s e . s q l i t e . S Q L i t e D a t a b a s e ; i m p o r ta n d r o i d . d a t a b a s e . s q l i t e . S Q L i t e O p e n H e l p e r ; i m p o r ta n d r o i d . u t i l . L o g ; p u b l i cc l a s sD a t a b a s e H e l p e re x t e n d sS Q L i t e O p e n H e l p e r{ / /L o g c a tt a g p r i v a t es t a t i cf i n a lS t r i n gL O G=D a t a b a s e H e l p e r . c l a s s . g e t N a m e ( ) ; / /D a t a b a s eV e r s i o n p r i v a t es t a t i cf i n a li n tD A T A B A S E _ V E R S I O N=1 ;

/ /D a t a b a s eN a m e p r i v a t es t a t i cf i n a lS t r i n gD A T A B A S E _ N A M E=" c o n t a c t s M a n a g e r " ; / /T a b l eN a m e s p r i v a t es t a t i cf i n a lS t r i n gT A B L E _ T O D O=" t o d o s " ; p r i v a t es t a t i cf i n a lS t r i n gT A B L E _ T A G=" t a g s " ; p r i v a t es t a t i cf i n a lS t r i n gT A B L E _ T O D O _ T A G=" t o d o _ t a g s " ; / /C o m m o nc o l u m nn a m e s p r i v a t es t a t i cf i n a lS t r i n gK E Y _ I D=" i d " ; p r i v a t es t a t i cf i n a lS t r i n gK E Y _ C R E A T E D _ A T=" c r e a t e d _ a t " ; / /N O T E ST a b l e-c o l u m nn m a e s p r i v a t es t a t i cf i n a lS t r i n gK E Y _ T O D O=" t o d o " ; p r i v a t es t a t i cf i n a lS t r i n gK E Y _ S T A T U S=" s t a t u s " ; / /T A G ST a b l e-c o l u m nn a m e s p r i v a t es t a t i cf i n a lS t r i n gK E Y _ T A G _ N A M E=" t a g _ n a m e " ; / /N O T E _ T A G ST a b l e-c o l u m nn a m e s p r i v a t es t a t i cf i n a lS t r i n gK E Y _ T O D O _ I D=" t o d o _ i d " ; p r i v a t es t a t i cf i n a lS t r i n gK E Y _ T A G _ I D=" t a g _ i d " ; / /T a b l eC r e a t eS t a t e m e n t s / /T o d ot a b l ec r e a t es t a t e m e n t p r i v a t es t a t i cf i n a lS t r i n gC R E A T E _ T A B L E _ T O D O=" C R E A T ET A B L E" +T A B L E _ T O D O+" ( "+K E Y _ I D+"I N T E G E RP R I M A R YK E Y , "+K E Y _ T O D O +"T E X T , "+K E Y _ S T A T U S+"I N T E G E R , "+K E Y _ C R E A T E D _ A T +"D A T E T I M E "+" ) " ; / /T a gt a b l ec r e a t es t a t e m e n t p r i v a t es t a t i cf i n a lS t r i n gC R E A T E _ T A B L E _ T A G=" C R E A T ET A B L E"+T A B L E _ T A G +" ( "+K E Y _ I D+"I N T E G E RP R I M A R YK E Y , "+K E Y _ T A G _ N A M E+"T E X T , " +K E Y _ C R E A T E D _ A T+"D A T E T I M E "+" ) " ; / /t o d o _ t a gt a b l ec r e a t es t a t e m e n t p r i v a t es t a t i cf i n a lS t r i n gC R E A T E _ T A B L E _ T O D O _ T A G=" C R E A T ET A B L E" +T A B L E _ T O D O _ T A G+" ( "+K E Y _ I D+"I N T E G E RP R I M A R YK E Y , " +K E Y _ T O D O _ I D+"I N T E G E R , "+K E Y _ T A G _ I D+"I N T E G E R , " +K E Y _ C R E A T E D _ A T+"D A T E T I M E "+" ) " ; p u b l i cD a t a b a s e H e l p e r ( C o n t e x tc o n t e x t ){ s u p e r ( c o n t e x t ,D A T A B A S E _ N A M E ,n u l l ,D A T A B A S E _ V E R S I O N ) ; } @ O v e r r i d e p u b l i cv o i do n C r e a t e ( S Q L i t e D a t a b a s ed b ){ / /c r e a t i n gr e q u i r e dt a b l e s d b . e x e c S Q L ( C R E A T E _ T A B L E _ T O D O ) ; d b . e x e c S Q L ( C R E A T E _ T A B L E _ T A G ) ; d b . e x e c S Q L ( C R E A T E _ T A B L E _ T O D O _ T A G ) ;

@ O v e r r i d e p u b l i cv o i do n U p g r a d e ( S Q L i t e D a t a b a s ed b ,i n to l d V e r s i o n ,i n tn e w V e r s i o n ){ / /o nu p g r a d ed r o po l d e rt a b l e s d b . e x e c S Q L ( " D R O PT A B L EI FE X I S T S"+T A B L E _ T O D O ) ; d b . e x e c S Q L ( " D R O PT A B L EI FE X I S T S"+T A B L E _ T A G ) ; d b . e x e c S Q L ( " D R O PT A B L EI FE X I S T S"+T A B L E _ T O D O _ T A G ) ;

/ /c r e a t en e wt a b l e s o n C r e a t e ( d b ) ;

/ /-" t o d o s "t a b l em e t h o d s/ / / * * *C r e a t i n gat o d o * / p u b l i cl o n gc r e a t e T o D o ( T o d ot o d o ,l o n g [ ]t a g _ i d s ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; C o n t e n t V a l u e sv a l u e s=n e wC o n t e n t V a l u e s ( ) ; v a l u e s . p u t ( K E Y _ T O D O ,t o d o . g e t N o t e ( ) ) ; v a l u e s . p u t ( K E Y _ S T A T U S ,t o d o . g e t S t a t u s ( ) ) ; v a l u e s . p u t ( K E Y _ C R E A T E D _ A T ,g e t D a t e T i m e ( ) ) ; / /i n s e r tr o w l o n gt o d o _ i d=d b . i n s e r t ( T A B L E _ T O D O ,n u l l ,v a l u e s ) ; / /i n s e r tt a g _ i d s f o r( l o n gt a g _ i d:t a g _ i d s ){ c r e a t e T o d o T a g ( t o d o _ i d ,t a g _ i d ) ; } } r e t u r nt o d o _ i d ;

/ * * *g e ts i n g l et o d o * / p u b l i cT o d og e t T o d o ( l o n gt o d o _ i d ){ S Q L i t e D a t a b a s ed b=t h i s . g e t R e a d a b l e D a t a b a s e ( ) ; S t r i n gs e l e c t Q u e r y=" S E L E C T *F R O M"+T A B L E _ T O D O+"W H E R E" +K E Y _ I D+"="+t o d o _ i d ; L o g . e ( L O G ,s e l e c t Q u e r y ) ; C u r s o rc=d b . r a w Q u e r y ( s e l e c t Q u e r y ,n u l l ) ; i f( c! =n u l l ) c . m o v e T o F i r s t ( ) ; T o d ot d=n e wT o d o ( ) ; t d . s e t I d ( c . g e t I n t ( c . g e t C o l u m n I n d e x ( K E Y _ I D ) ) ) ; t d . s e t N o t e ( ( c . g e t S t r i n g ( c . g e t C o l u m n I n d e x ( K E Y _ T O D O ) ) ) ) ; t d . s e t C r e a t e d A t ( c . g e t S t r i n g ( c . g e t C o l u m n I n d e x ( K E Y _ C R E A T E D _ A T ) ) ) ; } r e t u r nt d ;

/ * * *g e t t i n ga l lt o d o s ** / p u b l i cL i s t < T o d o >g e t A l l T o D o s ( ){ L i s t < T o d o >t o d o s=n e wA r r a y L i s t < T o d o > ( ) ; S t r i n gs e l e c t Q u e r y=" S E L E C T *F R O M"+T A B L E _ T O D O ;

L o g . e ( L O G ,s e l e c t Q u e r y ) ; S Q L i t e D a t a b a s ed b=t h i s . g e t R e a d a b l e D a t a b a s e ( ) ; C u r s o rc=d b . r a w Q u e r y ( s e l e c t Q u e r y ,n u l l ) ; / /l o o p i n gt h r o u g ha l lr o w sa n da d d i n gt ol i s t i f( c . m o v e T o F i r s t ( ) ){ d o{ T o d ot d=n e wT o d o ( ) ; t d . s e t I d ( c . g e t I n t ( ( c . g e t C o l u m n I n d e x ( K E Y _ I D ) ) ) ) ; t d . s e t N o t e ( ( c . g e t S t r i n g ( c . g e t C o l u m n I n d e x ( K E Y _ T O D O ) ) ) ) ; t d . s e t C r e a t e d A t ( c . g e t S t r i n g ( c . g e t C o l u m n I n d e x ( K E Y _ C R E A T E D _ A T ) ) ) ; / /a d d i n gt ot o d ol i s t t o d o s . a d d ( t d ) ; }w h i l e( c . m o v e T o N e x t ( ) ) ;

} }

r e t u r nt o d o s ;

/ * * *g e t t i n ga l lt o d o su n d e rs i n g l et a g ** / p u b l i cL i s t < T o d o >g e t A l l T o D o s B y T a g ( S t r i n gt a g _ n a m e ){ L i s t < T o d o >t o d o s=n e wA r r a y L i s t < T o d o > ( ) ; S t r i n gs e l e c t Q u e r y=" S E L E C T *F R O M"+T A B L E _ T O D O+"t d ," +T A B L E _ T A G+"t g ,"+T A B L E _ T O D O _ T A G+"t tW H E R Et g . " +K E Y _ T A G _ N A M E+"=' "+t a g _ n a m e+" ' "+"A N Dt g . "+K E Y _ I D +"="+" t t . "+K E Y _ T A G _ I D+"A N Dt d . "+K E Y _ I D+"=" +" t t . "+K E Y _ T O D O _ I D ; L o g . e ( L O G ,s e l e c t Q u e r y ) ; S Q L i t e D a t a b a s ed b=t h i s . g e t R e a d a b l e D a t a b a s e ( ) ; C u r s o rc=d b . r a w Q u e r y ( s e l e c t Q u e r y ,n u l l ) ; / /l o o p i n gt h r o u g ha l lr o w sa n da d d i n gt ol i s t i f( c . m o v e T o F i r s t ( ) ){ d o{ T o d ot d=n e wT o d o ( ) ; t d . s e t I d ( c . g e t I n t ( ( c . g e t C o l u m n I n d e x ( K E Y _ I D ) ) ) ) ; t d . s e t N o t e ( ( c . g e t S t r i n g ( c . g e t C o l u m n I n d e x ( K E Y _ T O D O ) ) ) ) ; t d . s e t C r e a t e d A t ( c . g e t S t r i n g ( c . g e t C o l u m n I n d e x ( K E Y _ C R E A T E D _ A T ) ) ) ; / /a d d i n gt ot o d ol i s t t o d o s . a d d ( t d ) ; }w h i l e( c . m o v e T o N e x t ( ) ) ;

} }

r e t u r nt o d o s ;

/ * * *g e t t i n gt o d oc o u n t * / p u b l i ci n tg e t T o D o C o u n t ( ){ S t r i n gc o u n t Q u e r y=" S E L E C T *F R O M"+T A B L E _ T O D O ; S Q L i t e D a t a b a s ed b=t h i s . g e t R e a d a b l e D a t a b a s e ( ) ;

C u r s o rc u r s o r=d b . r a w Q u e r y ( c o u n t Q u e r y ,n u l l ) ; i n tc o u n t=c u r s o r . g e t C o u n t ( ) ; c u r s o r . c l o s e ( ) ; / /r e t u r nc o u n t r e t u r nc o u n t ;

/ * * *U p d a t i n gat o d o * / p u b l i ci n tu p d a t e T o D o ( T o d ot o d o ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; C o n t e n t V a l u e sv a l u e s=n e wC o n t e n t V a l u e s ( ) ; v a l u e s . p u t ( K E Y _ T O D O ,t o d o . g e t N o t e ( ) ) ; v a l u e s . p u t ( K E Y _ S T A T U S ,t o d o . g e t S t a t u s ( ) ) ; / /u p d a t i n gr o w r e t u r nd b . u p d a t e ( T A B L E _ T O D O ,v a l u e s ,K E Y _ I D+"=? " , n e wS t r i n g [ ]{S t r i n g . v a l u e O f ( t o d o . g e t I d ( ) )} ) ;

/ * * *D e l e t i n gat o d o * / p u b l i cv o i dd e l e t e T o D o ( l o n gt a d o _ i d ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; d b . d e l e t e ( T A B L E _ T O D O ,K E Y _ I D+"=? " , n e wS t r i n g [ ]{S t r i n g . v a l u e O f ( t a d o _ i d )} ) ; } / /-" t a g s "t a b l em e t h o d s/ / / * * *C r e a t i n gt a g * / p u b l i cl o n gc r e a t e T a g ( T a gt a g ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; C o n t e n t V a l u e sv a l u e s=n e wC o n t e n t V a l u e s ( ) ; v a l u e s . p u t ( K E Y _ T A G _ N A M E ,t a g . g e t T a g N a m e ( ) ) ; v a l u e s . p u t ( K E Y _ C R E A T E D _ A T ,g e t D a t e T i m e ( ) ) ; / /i n s e r tr o w l o n gt a g _ i d=d b . i n s e r t ( T A B L E _ T A G ,n u l l ,v a l u e s ) ; } r e t u r nt a g _ i d ;

/ * * *g e t t i n ga l lt a g s ** / p u b l i cL i s t < T a g >g e t A l l T a g s ( ){ L i s t < T a g >t a g s=n e wA r r a y L i s t < T a g > ( ) ; S t r i n gs e l e c t Q u e r y=" S E L E C T *F R O M"+T A B L E _ T A G ; L o g . e ( L O G ,s e l e c t Q u e r y ) ;

S Q L i t e D a t a b a s ed b=t h i s . g e t R e a d a b l e D a t a b a s e ( ) ; C u r s o rc=d b . r a w Q u e r y ( s e l e c t Q u e r y ,n u l l ) ; / /l o o p i n gt h r o u g ha l lr o w sa n da d d i n gt ol i s t i f( c . m o v e T o F i r s t ( ) ){ d o{ T a gt=n e wT a g ( ) ; t . s e t I d ( c . g e t I n t ( ( c . g e t C o l u m n I n d e x ( K E Y _ I D ) ) ) ) ; t . s e t T a g N a m e ( c . g e t S t r i n g ( c . g e t C o l u m n I n d e x ( K E Y _ T A G _ N A M E ) ) ) ; / /a d d i n gt ot a g sl i s t t a g s . a d d ( t ) ; }w h i l e( c . m o v e T o N e x t ( ) ) ;

} r e t u r nt a g s ;

/ * * *U p d a t i n gat a g * / p u b l i ci n tu p d a t e T a g ( T a gt a g ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; C o n t e n t V a l u e sv a l u e s=n e wC o n t e n t V a l u e s ( ) ; v a l u e s . p u t ( K E Y _ T A G _ N A M E ,t a g . g e t T a g N a m e ( ) ) ; / /u p d a t i n gr o w r e t u r nd b . u p d a t e ( T A B L E _ T A G ,v a l u e s ,K E Y _ I D+"=? " , n e wS t r i n g [ ]{S t r i n g . v a l u e O f ( t a g . g e t I d ( ) )} ) ;

/ * * *D e l e t i n gat a g * / p u b l i cv o i dd e l e t e T a g ( T a gt a g ,b o o l e a ns h o u l d _ d e l e t e _ a l l _ t a g _ t o d o s ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; / /b e f o r ed e l e t i n gt a g / /c h e c ki ft o d o su n d e rt h i st a gs h o u l da l s ob ed e l e t e d i f( s h o u l d _ d e l e t e _ a l l _ t a g _ t o d o s ){ / /g e ta l lt o d o su n d e rt h i st a g L i s t < T o d o >a l l T a g T o D o s=g e t A l l T o D o s B y T a g ( t a g . g e t T a g N a m e ( ) ) ; / /d e l e t ea l lt o d o s f o r( T o d ot o d o:a l l T a g T o D o s ){ / /d e l e t et o d o d e l e t e T o D o ( t o d o . g e t I d ( ) ) ; }

/ /n o wd e l e t et h et a g d b . d e l e t e ( T A B L E _ T A G ,K E Y _ I D+"=? " , n e wS t r i n g [ ]{S t r i n g . v a l u e O f ( t a g . g e t I d ( ) )} ) ;

/ /-" t o d o _ t a g s "t a b l em e t h o d s/ / / * * *C r e a t i n gt o d o _ t a g * /

p u b l i cl o n gc r e a t e T o d o T a g ( l o n gt o d o _ i d ,l o n gt a g _ i d ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; C o n t e n t V a l u e sv a l u e s=n e wC o n t e n t V a l u e s ( ) ; v a l u e s . p u t ( K E Y _ T O D O _ I D ,t o d o _ i d ) ; v a l u e s . p u t ( K E Y _ T A G _ I D ,t a g _ i d ) ; v a l u e s . p u t ( K E Y _ C R E A T E D _ A T ,g e t D a t e T i m e ( ) ) ; l o n gi d=d b . i n s e r t ( T A B L E _ T O D O _ T A G ,n u l l ,v a l u e s ) ; } r e t u r ni d ;

/ * * *U p d a t i n gat o d ot a g * / p u b l i ci n tu p d a t e N o t e T a g ( l o n gi d ,l o n gt a g _ i d ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; C o n t e n t V a l u e sv a l u e s=n e wC o n t e n t V a l u e s ( ) ; v a l u e s . p u t ( K E Y _ T A G _ I D ,t a g _ i d ) ; / /u p d a t i n gr o w r e t u r nd b . u p d a t e ( T A B L E _ T O D O ,v a l u e s ,K E Y _ I D+"=? " , n e wS t r i n g [ ]{S t r i n g . v a l u e O f ( i d )} ) ;

/ * * *D e l e t i n gat o d ot a g * / p u b l i cv o i dd e l e t e T o D o T a g ( l o n gi d ){ S Q L i t e D a t a b a s ed b=t h i s . g e t W r i t a b l e D a t a b a s e ( ) ; d b . d e l e t e ( T A B L E _ T O D O ,K E Y _ I D+"=? " , n e wS t r i n g [ ]{S t r i n g . v a l u e O f ( i d )} ) ; } / /c l o s i n gd a t a b a s e p u b l i cv o i dc l o s e D B ( ){ S Q L i t e D a t a b a s ed b=t h i s . g e t R e a d a b l e D a t a b a s e ( ) ; i f( d b! =n u l l& &d b . i s O p e n ( ) ) d b . c l o s e ( ) ; } / * * *g e td a t e t i m e ** / p r i v a t eS t r i n gg e t D a t e T i m e ( ){ S i m p l e D a t e F o r m a td a t e F o r m a t=n e wS i m p l e D a t e F o r m a t ( " y y y y M M d dH H : m m : s s " ,L o c a l e . g e t D e f a u l t ( ) ) ; D a t ed a t e=n e wD a t e ( ) ; r e t u r nd a t e F o r m a t . f o r m a t ( d a t e ) ; }

Whats Next ?
An example of Todo application is coming soon stay tuned

Share this article on


102
Like

5
Tw eet

Report a Bug in this article


(If you find any error either in code or content please help me in improvising the content)

Email address / Full name

Give brief description about the bug...

Report

R A VI T A MA D A , I ND I A

Like

9.8k

Tw eet

350

850

Subscribe for latest updates

97872
SUBSCRIBE

Enter your email here

AndroidHive
Like 9,831 people like AndroidHive.

F acebook social plugin

Tag Cloud
Animat ion Dat abase Google Apps facebook GPS Grid Asy nc GCM Beginner Gest ures json

I nt ermediat e

List View Quick Tips Swipe

Maps

My SQL

PH P

Pinch SQLit e xml

sessions

Spinner Twit t er UI

Tab View

MOST POPULAR

NETWORK

Android

SQLite

Database

Tutorial - 491,397 views

design.androidhive.info

DESIGN TIPS

Android Custom ListView with Image and Text - 407,642 views

Android JSON Parsing Tutorial 379,510 views

tips.androidhive.info

How to connect Android with PHP, MySQL - 344,229 views

errors.androidhive.info

ERRORS

Android Tab Layout Tutorial 276,668 views

Android (GCM),

Push PHP

Notifications MySQL -

using Google Cloud Messaging and 272,682 views

download.androidhive.info

DOWNLOAD

Android Login and Registration with PHP, MySQL and SQLite 267,840 views

97872 755428
&

subscribers

downloads

Android XML Parsing Tutorial 218,926 views

REQUEST TUTORIAL
Email / Name *

Android Login and Registration

Screen Design - 202,100 views

Your email id or name


-

10 Android

ListView

Tutorial

189,874 views

Description * Brief description about your thought. (Please don't spam)

SEND

Creative Commons Attribution 3.0 Unported License

.
2013 AndroidHive | All Rights Reserved Advertise | Privacy Policy | Terms & Conditions

You might also like