Android基础之SQLite数据

    在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字符串);
     

    

      

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值