其实在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);
}
}
布局整体效果图
启动效果图
添加操作效果图
查询效果图
修改操作效果图
删除操作效果图
修改后查询效果图
关闭操作效果图
最后还是那句话:我不是一个好的程序员,因为我只会默默奉献。