I wanted to redo the database in the simplest way possible to make things clearer. To do this I made a simple initial form with two buttons:
I still needed to create the sqlHelper class. But this time I only created a single table. Here is the code for the SqlHelperClass
package com.spconger.programmingresourcesdata; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class SqlHelperClass extends SQLiteOpenHelper{ /* * This class extends SqlLiteOpenHelper * It creates the database and the tables * and sets static constants that are used * in the other classes */ //set database as priiate constatn private static final String DATABASE_NAME = "ProgramResources.db"; private static final int DATABASE_VERSION = 1; //public constants //database table public static final String TABLE_NAME="Book"; //columns public static final String BOOK_ID="bookId"; public static final String BOOK_TITLE="title"; public static final String BOOK_AUTHOR="author"; public static final String BOOK_RATING="Rating"; //required constructor //takes the contest which is usually the current //activity, it also passes the database name and //version to the super class public SqlHelperClass(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // here we create the table String sql_Book="CREATE TABLE " + TABLE_NAME +"(" + BOOK_ID + " integer primary key autoincrement, " + BOOK_TITLE + " text not null, " + BOOK_AUTHOR + " text not null, " + BOOK_RATING + " int, " + "unique (" +BOOK_TITLE + "))"; //add the table to the database db.execSQL(sql_Book); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //You should put code here to handle new versions of the database } }
Here is the form for adding records
The java behind this form is fairly straight forward. I just initialize a writable database, get the values from the EditText controls and insert them into the database
package com.spconger.programmingresourcesdata; import android.app.Activity; import android.content.ContentValues; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class AddRecordsActivity extends Activity{ /* * This activity adds records to the database. * I purposefully kept this simple * not breaking it into too many methods * Consequently the AddRecord method does * more than it probably should */ EditText txtTitle; EditText txtAuthor; EditText txtRating; Button btnSave; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.addrecords); btnSave = (Button)findViewById(R.id.button1); btnSave.setOnClickListener(new AddRecordListener()); } private class AddRecordListener implements View.OnClickListener{ @Override public void onClick(View v) { //get database SqlHelperClass sqlHelper = new SqlHelperClass(AddRecordsActivity.this); SQLiteDatabase db= sqlHelper.getWritableDatabase(); //get the values from the EditText controls txtTitle = (EditText)findViewById(R.id.editTextTitle); String title=txtTitle.getText().toString(); txtAuthor=(EditText)findViewById(R.id.editTextAuthor); String author=txtAuthor.getText().toString(); txtRating = (EditText)findViewById(R.id.editTextRating); String ratingString=txtRating.getText().toString(); int rating=Integer.parseInt(ratingString); //add the values from the EditViews to the columns ContentValues values = new ContentValues(); values.put(SqlHelperClass.BOOK_TITLE,title); values.put(SqlHelperClass.BOOK_AUTHOR, author); values.put(SqlHelperClass.BOOK_RATING, rating); //Insert into the database long book_id= db.insert(SqlHelperClass.TABLE_NAME, null, values); db.close(); //if the insert is successful if(book_id != -1) { //start a toast (a message) Toast toast = Toast.makeText (AddRecordsActivity.this, "Record Added", Toast.LENGTH_LONG); toast.show(); } else { Toast toast = Toast.makeText (AddRecordsActivity.this, "Record failed to Insert", Toast.LENGTH_LONG); toast.show(); } //clear for next record clearForm(); } } private void clearForm() { txtTitle.setText(""); txtAuthor.setText(""); txtRating.setText(""); } }
finally we just view the records. I didn't do anything fancy. I created a cursor to look through the records and appended them to a string that terminates with a new line character. Then I set the resulting text to the ViewText. Here is the codeL
package com.spconger.programmingresourcesdata; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.widget.TextView; public class ViewRecordsActivity extends Activity{ /* * Again, to make this simple, the getRecords method * does more than one record should do * */ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.viewrecords); getRecords(); } private void getRecords(){ //initiate the SqlHeperClass and get the database SqlHelperClass sqlHelper = new SqlHelperClass(ViewRecordsActivity.this); SQLiteDatabase db= sqlHelper.getWritableDatabase(); //create an array of the columns String[] columns = new String[] {sqlHelper.BOOK_TITLE, sqlHelper.BOOK_AUTHOR, sqlHelper.BOOK_RATING}; //start a cursor to move through the records Cursor cursor = db.query(sqlHelper.TABLE_NAME, columns, null, null, null, null, null); String result=""; //use the cursor to loop through the records for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){ //I am just concatenating the records into a string //terminated by a line break result+= cursor.getString(0) + ", " + cursor.getString(1) + "--" + cursor.getInt(2) + "\n" ; } //assign the result to the textview TextView content=(TextView)findViewById(R.id.content_list); content.setText(result); } }
Here is the the activity running
No comments:
Post a Comment