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
- Android基础之SQLite数据
- android基础之SQLite:
- Android基础之Sqlite
- Android基础之十四数据存储 之 SQLite数据库详解
- Android基础之数据存储SharedPreference和SQLite
- android基础学习之sqlite
- Android基础之Sqlite数据库
- Android学习之sqlite基础
- 【Android】数据存储之SQLite
- android 数据操作之SQLite
- android数据存储之SQLite
- Android数据存储之SQLite
- Android数据存储之SQLite
- Android数据存储之SQLite
- Android之SQLite 数据存储
- Android之SQLite 数据存储
- Android 数据存储之SQLite
- android:数据保存之SQLite
- Spring核心学习(1)实现基本的容器-包括注入和获取功能
- VTK点云的显示
- [leetcode] 46.Permutations
- Mono 4.0 伴随着C# 6发布
- 【转】JAVA设计模式之单例模式
- Android基础之SQLite数据
- 柔性数组
- 后缀数组
- Java 常用类库
- 3--黑马程序员--技术总结之流程控制语句
- C语言宏与单井号(#)和双井号(##)
- win7中删除某一个服务
- Objective-C中NSValue的使用
- Android Handler机制