Android中对数据的存储有很多种方式,Google为Andriod中较大的数据处理提供了SQLite数据库,SQLite是一款轻型的数据库,它在管理、使用和维护上非常强大。当然最主要的特点还是它的轻量级,适合在移动设备上使用。
今天主要来讲下最基本的SQLite数据库使用,让大家更了解SQLite一点。当然本人对SQLite的使用也是比较肤浅的,呵呵。
首先创建1个实体类来操作数据:
/**
* 人
*
* @author yuzhentao
*/
public class Person {public int _id;
public String name;
public String age;
public Person() {}public Person(String name, String age) {this.name = name;
this.age = age;
}}
然后是常量类,主要放了数据库名,因为接下来经常要使用:
/**
* 常量
*
* @author yuzhentao
*/
public class Constants {public static final String TABLE_NAME_PERSON = "person";
}
Android中数据库的创建主要使用SQLiteOpenHelper,它是Android提供给我们一个数据库辅助类,用来创建或打开数据库。
所以创建一个类来继承SQLiteOpenHelper:
/**
* 数据库帮助器
*
* @author yuzhentao
*/
public class DBHelper extends SQLiteOpenHelper {private static SQLiteDatabase db = null;
private static final String DATABASE_NAME = "person.db";
private static final int DATABASE_VERSION = 1;
public DBHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);
}@Override
public void onCreate(SQLiteDatabase db) {db.execSQL("create table if not exists " + Constants.TABLE_NAME_PERSON + " (_id integer primary key autoincrement, name text, age text)");
}@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("alter table person add column other string");
}/**
* 获取打开的本地数据库
*
* @param context:Context
* @return SQLiteDatabase
*/
public static synchronized SQLiteDatabase getOpenedDB(Context context) {if (db == null) {DBHelper dbHelper = new DBHelper(context.getApplicationContext());
db = dbHelper.getWritableDatabase();
}return db;
}/**
* 关闭本地数据库
*/
public static void closeDB() {if (db != null) {db.close();
db = null;
}}}
onCreate()中创建数据库,onUpgrade()中更新数据库,getWritableDatabase()可以获取数据库实例。
数据库的操作主要是增删改查,相信大家都知道,我们可以使用数据库语言来对数据库进行操作,同时也可以使用SQLite提供的方法来做这些操作,所以我们一般会创建一个数据库管理器来对数据库进行操作:
/**
* 数据库管理器
*
* @author violetjack
*/
public class DBManager {private SQLiteDatabase db;
private static DBManager DBManager;
public DBManager(Context context) {db = DBHelper.getOpenedDB(context);
}public static DBManager getInstance(Context context) {if (DBManager == null) {DBManager = new DBManager(context.getApplicationContext());
}return DBManager;
}/**
* 添加数据
*
* @param person:Person
*/
public void add(Person person) {db.beginTransaction();
try {db.execSQL("insert into " + Constants.TABLE_NAME_PERSON + " values (null, ?, ?)",
new Object[]{person.name, person.age});
db.setTransactionSuccessful();
} finally {db.endTransaction();
}}/**
* 根据ID删除数据
*
* @param id:时间
*/
public void delete(int id) {db.delete(Constants.TABLE_NAME_PERSON, "_id = ?", new String[]{String.valueOf(id)});
}/**
* 清空数据
*/
public void clear() {db.delete(Constants.TABLE_NAME_PERSON, "", new String[]{});
}/**
* 根据ID更新数据
*
* @param _id:ID
* @param person:Person
*/
public void update(int _id, Person person) {ContentValues cv = new ContentValues();
cv.put("name", person.name);
cv.put("age", person.age);
db.update(Constants.TABLE_NAME_PERSON, cv, "_id = ?", new String[]{String.valueOf(_id)});
}/**
* 根据ID更新某个字段
*
* @param _id:ID
* @param key:键
* @param value:值
*/
public void update(int _id, String key, String value) {ContentValues cv = new ContentValues();
cv.put(key, value);
db.update(Constants.TABLE_NAME_PERSON, cv, "_id = ?", new String[]{String.valueOf(_id)});
}/**
* /**
* 查询数据
*
* @return ArrayList<Person>*/
public ArrayList<Person> query() {ArrayList<Person> personList = new ArrayList<>();
Cursor c = queryCursor(Constants.TABLE_NAME_PERSON);
while (c.moveToNext()) {Person person = new Person();
person._id = c.getInt(c.getColumnIndex("_id"));
person.name = c.getString(c.getColumnIndex("name"));
person.age = c.getString(c.getColumnIndex("age"));
personList.add(person);
}c.close();
return personList;
}/**
* 查询指针
*
* @param tableName:表名
* @return Cursor
*/
public Cursor queryCursor(String tableName) {return db.rawQuery("select * from " + tableName, null);
}}
怎么使用大家看代码就行,接下来是主界面中使用这些方法:
/**
* 主界面
*
* @author yuzhentao
*/
public class MainActivity extends Activity implements View.OnClickListener {private Context context;
private DBManager dbManager;
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}@Override
protected void onDestroy() {super.onDestroy();
DBHelper.closeDB();
}@Override
public void onClick(View v) {int viewId = v.getId();
switch (viewId) {case R.id.button_add_activity_main:dbManager.add(new Person("A", "20"));
Toast.makeText(context, "增加一条数据", Toast.LENGTH_SHORT).show();
break;
case R.id.button_delete_activity_main:dbManager.delete(1);
Toast.makeText(context, "删除一条数据", Toast.LENGTH_SHORT).show();
break;
case R.id.button_update_activity_main:dbManager.update(5, new Person("B", "20"));
Toast.makeText(context, "更新一条数据", Toast.LENGTH_SHORT).show();
break;
case R.id.button_query_activity_main:for (Person person : dbManager.query()) {Log.e("yuzhentao", "name=" + person.name + ",age=" + person.age);
}Toast.makeText(context, "查询一条数据", Toast.LENGTH_SHORT).show();
break;
case R.id.button_clear_activity_main:dbManager.clear();
Toast.makeText(context, "清空数据", Toast.LENGTH_SHORT).show();
break;
}}private void initView() {context = this;
findViewById(R.id.button_add_activity_main).setOnClickListener(this);
findViewById(R.id.button_delete_activity_main).setOnClickListener(this);
findViewById(R.id.button_update_activity_main).setOnClickListener(this);
findViewById(R.id.button_query_activity_main).setOnClickListener(this);
findViewById(R.id.button_clear_activity_main).setOnClickListener(this);
dbManager = DBManager.getInstance(getApplicationContext());
}}
一共有5个按钮,分别对应5增删改查和清空5种操作,其实清空也就是删除所有数据,更新可以更新某个字段,也可以更新所有字段。在onCreate()中获取数据库管理器的实例顺便打开数据库,别忘记在onDestroy()中关闭数据库。
这里我手机经过Root,然后通过某软件就可以看到数据库,大家可以看下点击按钮的效果:
查询就通过Log来看下:
03-21 21:10:09.133 16949-16949/yuzhentao.sqlitedemo E/yuzhentao: name=A,age=20
03-21 21:10:09.133 16949-16949/yuzhentao.sqlitedemo E/yuzhentao: name=A,age=20
03-21 21:10:09.133 16949-16949/yuzhentao.sqlitedemo E/yuzhentao: name=A,age=20
03-21 21:10:09.133 16949-16949/yuzhentao.sqlitedemo E/yuzhentao: name=B,age=20
Demo地址:http://download.csdn.net/detail/qq_23940659/9468587