学徒浅析Android开发:第七讲——数据存储之SQLite

            其实在Android开发的过程中,SQLite的使用频率如同你睡觉一样,是必须的,如果你没使用SQLite,你的APP只能是一个Demo,称不上是个应用程序。

             作为四大存储工具之首,SQLite的江湖地位无人撼动,是每个开发人员必掌握的技能。下面就有小编给大家讲解一下SQLite的使用方法和主要功能。


这是Activity里的设置。

package com.example.demo_sqlite;
/**
 * @author Arthur Lee
 * @date 06/01/2014*/
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity{

	private Button bt_create,bt_add,bt_delete,bt_updata,bt_query,bt_close;
	SQLiteHelper helper;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		helper = new SQLiteHelper(this);
		bt_create = (Button)findViewById(R.id.bt_create);
		bt_add = (Button)findViewById(R.id.bt_add);
		bt_updata = (Button)findViewById(R.id.bt_updata);
		bt_query = (Button)findViewById(R.id.bt_query);
		bt_delete = (Button)findViewById(R.id.bt_delete);
		bt_close = (Button)findViewById(R.id.bt_close);
		
		bt_create.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				helper.open();
				Toast.makeText(MainActivity.this, "数据库已启动!", Toast.LENGTH_LONG).show();
			}
		});
		bt_add.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				if(helper.InsertData())
					Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_LONG).show();
			}
		});
		bt_updata.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				if(helper.UpdataData(1, "1002", "2014-06-02"))
				     Toast.makeText(MainActivity.this, "修改成功", Toast.LENGTH_LONG).show();
			}
		});
		bt_delete.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				if(helper.DelectData("guid='1'"))
				     Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_LONG).show();
			}
		});
		bt_query.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Cursor c = helper.QueryData(1);
				String name = null,sex = null,number = null,joindate = null;
				while(c.moveToNext()){
					name = c.getString(c.getColumnIndex("name"));
					sex = c.getString(c.getColumnIndex("sex"));
					number = c.getString(c.getColumnIndex("number"));
					joindate = c.getString(c.getColumnIndex("joindate"));
				}
				c.close();
				Toast.makeText(MainActivity.this, "当前查询结果为:姓名:"+name+" 性别:"+sex+" 编号:"+number+" 加入时间:"+joindate, Toast.LENGTH_LONG).show();
			}
		});
		bt_close.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				helper.close();
				Toast.makeText(MainActivity.this, "数据库已关闭", Toast.LENGTH_LONG).show();
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

}


这里便是数据库的详细设计类,小编已经把注释都写在代码中了,大家仔细品味吧,欢迎交流。
package com.example.demo_sqlite;
/**
 * @author Arthur Lee
 * @date 06/01/2014*/
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
/**
 * */
public class SQLiteHelper {

	//创建SQLite数据库管理对象
	DatebaseHelper   helper;
	//创建SQLite数据库对象
	SQLiteDatabase data;
	private final Context myContext;
	//数据库库名
	private static final String myName = "wfxy.db";
	//数据库版本号
	private static final int myVersion = 1;
	
	//创建user数据表,sql字段含义:当前数据表user若不存在,就创建它,
	//其中(guid为主键,长度为字符串32位,...)
	private static final String CREATE_TABLE_USER = "create table if not exists user (guid "+
	//设置当前属性为主键
	"integer primary key autoincrement, "+
	//设置个各属性列
	"name varchar(64), sex varchar(10), number varchar(20), joindate varchar(50))";
   
	private static class DatebaseHelper extends SQLiteOpenHelper{

		/**
	     * DatebaseHelper的方法之一,用以构建当前所需的数据库。该方法共包含四个参数,它们分别是:
	     * @param Context context 指定当前的实体类。
	     * @param String name 数据库库名,由开发者自定义,一般会结合开发的项目命名。
	     * @param CusorFactory factory 指定当前使用的游标工厂实例,一般默认为null。
	     * @param int version 数据库的版本号,一般默认为1。*/
		public DatebaseHelper(Context context) {
			super(context, myName, null, myVersion);
			// TODO Auto-generated constructor stub
		}
	    /**
	     * DatebaseHelper的方法之一,用以创建初始化情况下的数据表。*/
		@Override
		public void onCreate(SQLiteDatabase db) {
			// TODO Auto-generated method stub
			//执行SQL语句,实现在数据库创建的同时,创建相应的数据表。
		    db.execSQL(CREATE_TABLE_USER);
		}
		/**
	     * DatebaseHelper的方法之一,用以检测当前数据库是否为最新版本,
	     * 如若不是,则升级当前数据库。如若是,则不用升级。*/
		@Override
		public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
			// TODO Auto-generated method stub
			db.execSQL("DROP TABLE IF EXISTS user");
			onCreate(db);
		}
	}

	public SQLiteHelper(Context context){
		this.myContext = context;
	}
	/**
	 * 自定义方法,开启数据库。*/
	public void open(){
		helper = new DatebaseHelper(myContext);
		//将data设置为数据库编辑状态。可直接调用它的增删改查功能。方便使用。
		data = helper.getWritableDatabase();
	}
	/**
	 * 自定义方法,关闭数据库。*/
	public void close(){
		data.close();
		helper.close();
	}
    /**
     * 自定义方法,添加新数据,此处的参数可换成添加所需的内容 */
	public boolean InsertData(){
		//ContentValues是数据库中专门用来封装数据的类,它采用键值对的形式封装数据,
		//其中的键key就是对应数据表中的属性。
		ContentValues value = new ContentValues();
		value.put("guid", 1);
		value.put("name", "lizg");
		value.put("sex", "男");
		value.put("number","10021240114");
		value.put("joindate","2014-06-01");
		/**
		 * 添加所需三个参数,即确定在哪添加,添加的条件,添加的内容。
		 * @param String tableName 在哪个表执行添加操作,此处输入表名。
		 * @param String nullColumnHack 添加的条件。
		 * @param ContentValues value 添加的内容。
		 * 数据库提供的insert方法的返回值为long型,所以只需加上判断即可转化成布尔型*/
		return data.insert("user", null, value)>0;
	}
	/**
	 * 自定义方法,删除某数据,此处的参数可换成删除条件所需的内容*/
	public boolean DelectData(String whereClause){
		/**
		 * 删除所需三个参数,即确定在哪删除,删除的条件,删除的范围
		 * @param String tableName 在哪个表执行删除操作,此处输入表名。
		 * @param String whereClause 删除的条件。
		 * @param ContentValues value 修改的内容。
		 * 数据库提供的delete方法的返回值为int型,所以只需加上判断即可转化成布尔型*/
		return data.delete("user", whereClause, null)>0;
	}
	/**
	 * 自定义方法,修改某数据,此处的参数可换成修改的内容*/
	public boolean UpdataData(int id,String number,String joindate){
		//ContentValues是数据库中专门用来封装数据的类,它采用键值对的形式封装数据,
		//其中的键key就是对应数据表中的属性。
		ContentValues value = new ContentValues();
		value.put("number",number);
		value.put("joindate",joindate);
		/**
		 * 修改所需四个参数,即确定在哪修改,修改的内容,修改的条件,修改的范围
		 * @param String tableName 在哪个表执行删除操作,此处输入表名。
		 * @param ContentValues value 修改的内容。
		 * @param String whereClause 修改的条件。
		 * @param String[] whereArgs 修改的范围,一般默认为null,即将符合条件的全部删除
		 * 数据库提供的update方法的返回值为int型,所以只需加上判断即可转化成布尔型*/
		return data.update("user", value, "guid="+id, null)>0;
	}
	/**
	 * 自定义方法,查询某数据
	 * Cursor 游标,即用来确定数据库中具体的数据,通过设置一定的参数,从而能将指针快速指向目标数据*/
	public Cursor QueryData(int guid){
		/**
		 * 查询的参数共有七个,分别是:
		 * @param String table 在哪个表执行查询操作,此处输入表名。
		 * @param String[] columns 对当前表的哪些属性进行查询。
		 * @param String selection SQL查询方法之一,检索数据,即select。
		 * @param String[] selectionArgs 
		 * @param String group by SQL查询方法之一,用以将数据按特定的属性内容分组。
		 * @param String having   SQL查询方法之一,用以筛选数据,后跟筛选条件,只出现在集合函数中,场合group by连用
		 * @param String orderBy  SQL查询方法之一,用以将数据按升序(asc)或降序(desc)排序。
		 * */
		return data.query("user", new String[]{"name","sex","number","joindate"}, "guid='"+guid+"'", null, null, null, null);
	} 
	
}

布局整体效果图


启动效果图



添加操作效果图



查询效果图



修改操作效果图


删除操作效果图

修改后查询效果图


关闭操作效果图


最后还是那句话:我不是一个好的程序员,因为我只会默默奉献。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值