What you learn: You will learn how to create databases and tables, insert and query datasets in the Android-built-in SQLite-DataBase-Server.
Difficulty: 1 of 5
Questions/Problems: Simply post below...
What it will look like:
Description:
We'll need to to the following things:
- Create a DataBase (generally this is done just once)
- Open the DataBase
- Create a Table (generally this is done just once)
- Insert some Datasets
- Query for some Datasets
- Close the Database
0.) So lets work it out:
We first do some setup. Declaring the DataBases/Tables we are using as final should always be preferred before typing the name to every single statement. (Changes are a lot easier !).
Java: |
public
class DataBaseWork
extends ListActivity
{
private final String MY_DATABASE_NAME = "myCoolUserDB"; private final String MY_DATABASE_TABLE = "t_Users"; /** Called when the activity is first created. */ @Override public void onCreate (Bundle icicle ) { super. onCreate (icicle ); /* Will hold the 'Output' we want to display at the end. */ ArrayList results = new ArrayList ( ); |
1.) So lets create the DataBase:
Java: |
SQLiteDatabase myDB =
null;
try { /* Create the Database (no Errors if it already exists) */ this. createDatabase (MY_DATABASE_NAME, 1, MODE_PRIVATE, null ); |
2.) Having created the DataBase we want to open it:
Java: |
/* Open the DB and remember it */
myDB = this. openDatabase (MY_DATABASE_NAME, null ); |
3.) Now we create a simple Table with just four columns:
Java: |
/* Create a Table in the Database. */
myDB. execSQL ( "CREATE TABLE IF NOT EXISTS " + MY_DATABASE_TABLE + " (LastName VARCHAR, FirstName VARCHAR," + " Country VARCHAR, Age INT(3));" ); |
4.) Put two DataSets to the recently created Table:
Java: |
/* Add two DataSets to the Table. */
myDB. execSQL ( "INSERT INTO " + MY_DATABASE_TABLE + " (LastName, FirstName, Country, Age)" + " VALUES ('Gramlich', 'Nicolas', 'Germany', 20);" ); myDB. execSQL ( "INSERT INTO " + MY_DATABASE_TABLE + " (LastName, FirstName, Country, Age)" + " VALUES ('Doe', 'John', 'US', 34);" ); |
5.) Having written some DataSets to the Table, we would want to receive them back somewhen. Thr result of a query is a Cursor that can move over all the results returned by the query. We apply Projection (Just the Specified Columns) and Selection (WHERE ...) to it and a LIMIT. Just as we would do in any other SQL-"Dialect":
Java: |
/* Query for some results with Selection and Projection. */
Cursor c = myDB. query ( "SELECT FirstName,Age" + " FROM " + MY_DATABASE_TABLE + " WHERE Age > 10 LIMIT 7;", null ); |
6.) Now having queried, we retrieve the ColumIndexes of two Columns calling the getColumnIndex(String);-method of the Cursor:
Java: |
/* Get the indices of the Columns we will need */
int firstNameColumn = c. getColumnIndex ( "FirstName" ); int ageColumn = c. getColumnIndex ( "Age" ); /* Check if our result was valid. */ if (c != null ) { /* Check if at least one Result was returned. */ if (c. first ( ) ) { int i = 0; /* Loop through all Results */ do { i++; /* Retrieve the values of the Entry * the Cursor is pointing to. */ String firstName = c. getString (firstNameColumn ); int age = c. getInt (ageColumn ); /* We can also receive the Name * of a Column by its Index. * Makes no sense, as we already * know the Name, but just to shwo we can */ String ageColumName = c. getColumnName (ageColumn ); /* Add current Entry to results. */ results. add ( "" + i + ": " + firstName + " (" + ageColumName + ": " + age + ")" ); } while (c. next ( ) ); } } |
7.) Finally close the DataBase (if it has been opened):
Java: |
}
catch
(
FileNotFoundException e
)
{
} finally { if (myDB != null ) myDB. close ( ); } |
8.) In the end, display our Entries:
Java: |
this.
setListAdapter
(
new ArrayAdapter
(
this,
android. R. layout. simple_list_item_1_small, results ) ); } } |