如果想要在android中使用数据库,使用sqlite是一个非常好的选择,因为它是android内置的数据库,提供了很多支持。
数据库的使用无非就是CRUD,也就是"Create,Read,Update,Delete"这四个基本操作。
下面就介绍一个简单的sqlite写的一个记事本实例来说明吧
首先看一下效果图:
完成这个的主要看几个activity
import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; /** * @author zhangvalue * @Date 2015年11月4日 下午8:21:39 * */ public class ActivityDiaryEdit extends Activity{ private EditText mTitleText; private EditText mBodyText; private Long mRowId = null; private DiaryDbAdapter mDbHelper; private Context mcontext =this; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); mDbHelper = new DiaryDbAdapter(this);//获得一个DiaryDbAdapter对象 mDbHelper.open(); setContentView(R.layout.diary_edit);//加载布局文件 mTitleText = (EditText) findViewById(R.id.title);//获得组件id mBodyText = (EditText) findViewById(R.id.body); Button confirmButton = (Button) findViewById(R.id.confirm); Button deletButton = (Button) findViewById(R.id.delet); Bundle extras = getIntent().getExtras(); if(extras !=null){ String title = extras.getString(DiaryDbAdapter.KEY_TITLE); String body = extras.getString(DiaryDbAdapter.KEY_BODY); mRowId = extras.getLong(DiaryDbAdapter.KEY_ROWID); if(title !=null){ mTitleText.setText(title); } if(body !=null){ mBodyText.setText(body); } } confirmButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String title = mTitleText.getText().toString().trim(); String body = mBodyText.getText().toString().trim(); if(!title.equals("")&&!body.equals("")){ if(mRowId !=null){ mDbHelper.updateDiary(mRowId,title,body); }else mDbHelper.createDiary(title,body); } finish(); } }); deletButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(mRowId != null){ mDbHelper.deleteDiary(mRowId); finish(); //Call this when your activity is done and should be closed. The ActivityResult is propagated back to whoever launched you via onActivityResult(). } } }); } }
这里需要注意的是
这里的传的参数是在另一个activity中传输过来的
这里还用到了一个确定操作:
还有一个delete操作:
下面的Activity就是查看所有数据库中的数据的那个activity操作了
import android.app.ListActivity; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.support.v4.widget.SimpleCursorAdapter; import android.view.View; import android.widget.ListView; /** * @author zhangvalue * @Date 2015年11月4日 下午8:21:32 * */ public class ActivityMain extends ListActivity{ private DiaryDbAdapter mDbHelper; private Cursor mDiaryCursor; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.diary_list);//加载布局文件 mDbHelper = new DiaryDbAdapter(this);//创建一个DiaryDbAdapter对象 mDbHelper.open(); mDiaryCursor= mDbHelper.getAllNotes(); String[] from = new String[] {DiaryDbAdapter.KEY_TITLE,DiaryDbAdapter.KEY_CREATED}; int[] to = new int[] {R.id.text1,R.id.created}; SimpleCursorAdapter notes = new SimpleCursorAdapter( this,//参数表示上下文 R.layout.diary_row,//将要加载的布局文件 mDiaryCursor,//数据源,将要填充的数据 from,//一个包含数据库的列的String型数组 to//一个包含布局文件对应组件的id的int型数组 ); setListAdapter(notes); } @Override //需要对position和id进行一个很好的区分 // position指的是点击的这个ViewItem在当前ListView中的位置 // 每一个和ViewItem绑定的数据,肯定都有一个id,通过这个id可以找到那条数据。 protected void onListItemClick(ListView l,View v,int position,long id) { super.onListItemClick(l,v,position,id); Cursor c = mDiaryCursor; c.moveToPosition(position); Intent i = new Intent(this,ActivityDiaryEdit.class); i.putExtra(DiaryDbAdapter.KEY_ROWID,id);//将KEY_ROWID,给存放到Intent对象中 i.putExtra(DiaryDbAdapter.KEY_TITLE,c.getString(c.getColumnIndexOrThrow(DiaryDbAdapter.KEY_TITLE)));//将KEY_TITLE给存放到Intent对象中 /*getColumnIndexOrThrow(String columnName) 从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。*/ i.putExtra(DiaryDbAdapter.KEY_BODY,c.getString(c.getColumnIndexOrThrow(DiaryDbAdapter.KEY_BODY)));//将KEY_BODY给存放到Intent对象中 startActivity(i); } }这里继承的是ListActivity方便了后面重写onListItenClick()方法
首先看这个是将数据库中的内容通过listview给显示出出来,下面就是往里面绑定数据
还有就是在我们点击listview中的item一条条数据是能够准确的找到并跳转到编辑Activity中去
下面就是最关键的一个关于数据库的各种操作了,把它单独写了一个类DirayDbAdapter
使用sqliteOpenHelper
sqliteOpenHelper是sqliteDatabse的一个帮助类,用来管理数据的创建和版本更新。一般的用法是定义一个类继承sqliteOpenHelper,并实现两个回调方法,OnCreate(sqliteDatabase db)和onUpgrade(sqliteDatabse,int oldVersion,int newVersion)来创建和更新数据库
sqliteOpenHelper是一个抽象的数据库操作类,首先执行的是OnCreate,这里我们可以执行创建表等动作,但该方法并没有真正创建数据库,创建数据库是在以下的情况:
调用getWritableDatabase()或者getReadableDatabase()时,就会真正创建数据库。
对于更新数据库版本这里没有做。
下面就是关于数据的增删改查