在android中保存数据有多种方法,跟大家讲讲android中的数据库存储数据。
1.android中使用什么数据?
在一些小型的移动科技中有很多产品都有保存数据的数据,基本上使用的是SQLite数据。SQLite 是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下 - 只要确保SQLite的二进制文件存在即可开始创建、连接和使用数据库。
2.如何在android创建数据?
创建数据库的SQL语句和大部分的数据库基本相同,都是一些create table xxx(id integer primary key autoincrement ,name varchar not null,.....);
基本上都是这种创建形式,口头描述可能不是太清晰吧,我们直接上代码,在代码处描述功能和一些知识点吧,可以这样才对程序猿的胃口吧。O(∩_∩)O哈哈~
/**首相,如果我们想创建数据库,那么必然很用到SQLiteOpenHelper,因为这样类是供我们程序猿创建数据
* 库用户的,在这个类中有两个方法,onCreate,onUpgrade,这两个方法很重要。在对应方法的地方讲它的
* 用处,以及创建时间
*/
//create Db
private class UserDataBaseHelper extends SQLiteOpenHelper{
/*
* 构造函数,SQLiteOpenHelper的构造函数是带有四个参数的
* 第一个参数:android中上下文对象 Context
* 第二个参数:创建数据库的名称 例如:user.db
* 第三个参数:CursorFactory 创建Cursor的工厂 一般都是传null就可以了
* 第四个参数:数据的版本号,当我们对数据中表结构添加字段时,我们就需要升级数据库的版本
* 号,否则,添加的字段是无效的。
*
* 注意:必须调用父类四个参数的构造。但是子类可以由多种形式的构造函数。就我写的这个一
* 样,只传递了一个参数,其它参
* 是早定义好了的,也可以传递四个,像第二个构造函数那样
*
* 用处:创建数据库,是一个辅助工具,辅助我们增,删,改查数据
*
*/
public UserDataBaseHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public UserDataBaseHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
/**
* onCreate是用来创建数据表的,当我们getReadableDatabase和getWriteableDatabase时会
* 检测数据表是否存在
* 不存在则创建数据表,反之则不创建
*/
@Override
public void onCreate(SQLiteDatabase db) {
final String createSQL = "CREATE TABLE "+TABLE_NAEM+" ("
+ UserColumns._ID +" INTEGER PRIMARY KEY AUTOINCREMENT,"
+ UserColumns.KEY_USER_NAME +" varchar not null,"
+ UserColumns.KEY_USER_PWD +" varchar not null,"
+ UserColumns.KEY_USER_AGE + " integer default 18,"
+ UserColumns.KEY_USER_ADDRESS + " text)";
db.execSQL(createSQL);
}
/**
* 当数据的中版本号升级时调用,就相当于newVersion > oldVersion的时候调用
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if(newVersion > oldVersion){
final String deleteSQL = "DROP TABLE IF EXISTS " + TABLE_NAEM;
db.execSQL(deleteSQL);
onCreate(db);
}
}
}
3.对数据的增,删,改,查
//添加数据 我是传入一个对象,通过对象来取其中的数据
public long addUser(UserModel user){
mDatabase = mUserDatabaseHelper.getWritableDatabase();
ContentValues values = createContentValues(user);
final long lines = mDatabase.insert(TABLE_NAEM, null, values);
Log.i(BaseActivity.TAG, "ADD " + lines);
return lines;
}
//删除数据 根据ID删除
public long deleteUser(final int userID){
mDatabase = mUserDatabaseHelper.getReadableDatabase();
final String where = UserColumns._ID + " = ?";
final String[] args = {String.valueOf(userID)};
final long lines = mDatabase.delete(TABLE_NAEM, where, args);
Log.i(BaseActivity.TAG, "DELETE " + lines);
return lines;
}
//修改数据表,根据ID去修改数据
public long updateUser(UserModel user){
mDatabase = mUserDatabaseHelper.getReadableDatabase();
ContentValues values = createContentValues(user);
final String where = UserColumns._ID + " = ?";
final String[] args = {String.valueOf(user.userID)};
final long lines = mDatabase.update(TABLE_NAEM, values, where, args);
Log.i(BaseActivity.TAG, "UPDATE " + lines);
return lines;
}
//将对象中的数据装换我们数据库中认识的字段 UserModel --- > ContentValues
private ContentValues createContentValues(final UserModel user){
ContentValues values = new ContentValues();
values.put(UserColumns.KEY_USER_NAME, user.userName);
values.put(UserColumns.KEY_USER_PWD, user.userPwd);
values.put(UserColumns.KEY_USER_AGE, user.userAge);
values.put(UserColumns.KEY_USER_ADDRESS, user.userAddress);
return values;
}
//查询所有的数据 查询完成后,就要关闭cursor,否者会抛异常
public List<UserModel> findAllUser(){
mDatabase = mUserDatabaseHelper.getReadableDatabase();
List<UserModel> userModels = null;
final String[] columns = {
UserColumns._ID,
UserColumns.KEY_USER_NAME,
UserColumns.KEY_USER_PWD,
UserColumns.KEY_USER_AGE,
UserColumns.KEY_USER_ADDRESS};
Cursor cursor = mDatabase.query(TABLE_NAEM, columns, null, null, null, null, null);
if(cursor.moveToFirst()){
userModels = new ArrayList<UserModel>();
do {
UserModel user = new UserModel();
user.userID = cursor.getInt(cursor.getColumnIndex(UserColumns._ID));
user.userName = cursor.getString(cursor.getColumnIndex(UserColumns.KEY_USER_NAME));
user.userPwd = cursor.getString(cursor.getColumnIndex(UserColumns.KEY_USER_PWD));
user.userAge = cursor.getInt(cursor.getColumnIndex(UserColumns.KEY_USER_AGE));
user.userAddress = cursor.getString(cursor.getColumnIndex(UserColumns.KEY_USER_ADDRESS));
userModels.add(user);
} while (cursor.moveToNext());
}
if(!cursor.isClosed()){
cursor.close();
}
Log.i(BaseActivity.TAG, "FIND ALL " + (userModels == null ? "null" : userModels.size()));
return userModels;
}
public UserModel findOneUser(int userID){
mDatabase = mUserDatabaseHelper.getReadableDatabase();
UserModel user = null;
final String[] columns = {
UserColumns._ID,
UserColumns.KEY_USER_NAME,
UserColumns.KEY_USER_PWD,
UserColumns.KEY_USER_AGE,
UserColumns.KEY_USER_ADDRESS};
final String selection = UserColumns._ID +" = ?";
final String[] selectionArgs = {String.valueOf(userID)};
Cursor cursor = mDatabase.query(TABLE_NAEM, columns, selection,
selectionArgs, null, null, null);
if(cursor.moveToFirst()){
user = new UserModel();
user.userID = cursor.getInt(cursor.getColumnIndex(UserColumns._ID));
user.userName = cursor.getString(cursor
.getColumnIndex(UserColumns.KEY_USER_NAME));
user.userPwd = cursor.getString(cursor
.getColumnIndex(UserColumns.KEY_USER_PWD));
user.userAge = cursor.getInt(cursor
.getColumnIndex(UserColumns.KEY_USER_AGE));
user.userAddress = cursor.getString(
cursor.getColumnIndex(UserColumns.KEY_USER_ADDRESS));
}
if(!cursor.isClosed()){
cursor.close();
}
Log.i(BaseActivity.TAG, "FIND ONE " + (user == null));
return user;
}
在写SQLite时,还以直接写SQL语句,首相需要获取到SQLiteOpenHelper的对象,然后调用execSQL(sql字符串);