您的位置:首页 > 数据库

数据存储方式——SQLite

2015-11-07 11:59 274 查看
如果想要在android中使用数据库,使用SQLite是一个非常好的选择,因为它是android内置的数据库,提供了很多支持。

      数据库的使用无非就是CRUD,也就是"Create,Read,Update,Delete"这四个基本操作。

下面就介绍一个简单的SQLite写的一个记事本实例来说明吧

首先看一下效果图:



完成这个的主要看几个activity

先看这个添加单词的这个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()时,就会真正创建数据库。

对于更新数据库版本这里没有做。

下面就是关于数据的增删改查








基本的操作都有了,再就是注意注册文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sqlite