Android基础之SQLite数据

来源:互联网 发布:excel去重复数据计数 编辑:程序博客网 时间:2024/05/19 03:21

    在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 Dbprivate 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时会                 *      检测数据表是否存在 * 不存在则创建数据表,反之则不创建 */@Overridepublic 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的时候调用 */@Overridepublic 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 --- > ContentValuesprivate 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字符串);
     

    

      

0 0
原创粉丝点击