Android数据存储-DB(SQLite)
来源:互联网 发布:html5app软件代码 编辑:程序博客网 时间:2024/06/05 11:10
适用类型:重复、大量、结构化的数据
在APP中,DB被保存到了程序的private空间,这些空间默认是私有的,不能被其它的应用所访问,从而保证了DB中数据的安全性
在程序中,我们借助SQLiteOpenHelper对数据库进行读写操作,系统对于一些耗时的操作会在程序需要时才执行,而不是程序启动就开始执行,对于耗时的操作,我们应该AsyncTask or IntentService中进行,避免对程序主线程的影响
package net.oschina.git.zhaikun.androiddeveloped.db;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by zhaikun68 on 2017/8/2. * <p> * SQLite数据操作类 */public class SQLiteHelper extends SQLiteOpenHelper { private static final String TABLE_NAME = "students";//表名 private static final String CREATE_TABLE_SQL =//创建表students "create table " + TABLE_NAME + "(" + "_id integer primary key," +//Android中SQLite默认的主键 "id integer," + "name text" + //添加更多的属性 ")"; private static final String DELETE_TABLE_SQL = "DROP TABLE IF EXISTS " + TABLE_NAME; /** * Create a helper object to create, open, and/or manage a database. * This method always returns very quickly. The database is not actually * created or opened until one of {@link #getWritableDatabase} or * {@link #getReadableDatabase} is called. * * @param context to use to open or create the database * @param name of the database file, or null for an in-memory database * @param factory to use for creating cursor objects, or null for the default * @param version number of the database (starting at 1); if the database is older, * {@link #onUpgrade} will be used to upgrade the database; if the database is * newer, {@link #onDowngrade} will be used to downgrade the database */ public SQLiteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } /** * Called when the database is created for the first time. This is where the * creation of tables and the initial population of the tables should happen. * * @param db The database. */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE_SQL); } /** * Called when the database needs to be upgraded. The implementation * should use this method to drop tables, add tables, or do anything else it * needs to upgrade to the new schema version. * <p> * <p> * The SQLite ALTER TABLE documentation can be found * <a href="http://sqlite.org/lang_altertable.html">here</a>. If you add new columns * you can use ALTER TABLE to insert them into a live table. If you rename or remove columns * you can use ALTER TABLE to rename the old table, then create the new table and then * populate the new table with the contents of the old table. * </p><p> * This method executes within a transaction. If an exception is thrown, all changes * will automatically be rolled back. * </p> * * @param db The database. * @param oldVersion The old database version. * @param newVersion The new database version. */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL(DELETE_TABLE_SQL); onCreate(db); } @Override public void onOpen(SQLiteDatabase db) { super.onOpen(db); } @Override public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { super.onDowngrade(db, oldVersion, newVersion); }}
package net.oschina.git.zhaikun.androiddeveloped.activitys;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import net.oschina.git.zhaikun.androiddeveloped.db.SQLiteHelper;/** * Created by zhaikun68 on 2017/8/2. * <p> * DB数据操作 */public class DBActivity extends AppCompatActivity { private static final String DATABASE_NAME = "dbTest.db";//数据库名臣 private static final int DATABASE_VERSION = 1;//数据库版本号 private SQLiteHelper sqLiteHelper = new SQLiteHelper(this, DATABASE_NAME, null, DATABASE_VERSION); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //1、向数据库写入数据 SQLiteDatabase dbWrite = sqLiteHelper.getWritableDatabase(); //向数据库中插入的列对应的值 ContentValues contentValues = new ContentValues(); contentValues.put("name", "123456"); /** * insert()方法说明 * 参数一:操作的表名 * 参数二:参数会使得系统自动对那些ContentValues 没有提供数据的列填充数据为null,如果第二个参数传递的是null,那么系统则不会对那些没有提供数据的列进行填充 */ dbWrite.insert("students", null, contentValues); //2、读取数据库中的数据 SQLiteDatabase dbRead = sqLiteHelper.getReadableDatabase(); String[] columns = {"name"}; String selection = "id=? and name=?"; String[] selectionArgs = {"1", "小明"};//与selection中问号的先后顺序相对应,一个问号对应一个值 /** * query()方法说明 * 参数一:操作的表名 * 参数二:查询的列的名称,返回所查询列对应的结果 * 参数三:查询条件中的列 * 参数四:查询条件中的列对应的值 * 参数五:分组 * 参数六:分组过滤 * 参数七:排序 * 返回Cursor游标对象 */ Cursor cursor = dbRead.query("students", columns, selection, selectionArgs, null, null, null); cursor.moveToFirst();//取游标中的数据,将读取位置移动到数据集中最开始的位置,使用cursor的其中一个get方法如getString()或getLong()获取列的值 String name = cursor.getString(cursor.getColumnIndex("name"));//对于每一个get方法必须传递想要获取的列的索引位置,索引位置可以通过调用getColumnIndex()或getColumnIndexOrThrow()获得 while (cursor.moveToNext()) { name = cursor.getString(cursor.getColumnIndex("name")); } //3、删除数据 String whereClause = "id like ?"; String[] whereClauseArgs = {"12"}; /** * delete()方法说明 * 参数一:操作的表名 * 参数二:删除条件 * 参数三:删除条件中对应的值 */ dbRead.delete("students", whereClause, whereClauseArgs); //4、跟新数据 ContentValues updateContentValues = new ContentValues(); contentValues.put("name", "小花"); String updateSelection = "id = ?"; String[] updateSelectionArgs = {"123456"};//更新条件对应的值,与updateSelection中?顺序一致 /** * update()方法说明 * 参数一:操作的表名 * 参数二:更新的列对应的值 * 参数三:更新条件 * 参数四:更新条件对应的值 */ dbRead.update("students", updateContentValues, updateSelection, updateSelectionArgs); dbWrite.close(); dbRead.close(); }}
阅读全文
0 0
- Android数据存储-DB(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(ResultActivity)
- Android 数据存储 (一)SQLite
- Android中的数据存储(三):SQLite
- Android 数据存储方式(SQLite)
- Android基础:数据存储(1)--SQLite
- 【Android】数据存储之SQLite
- Qt 布局管理器
- springboot 配置使用拦截器 interceptor
- APK Signature Scheme v2
- JS改变input的value值不触发onchange事件解决方案
- 玩转树莓派之在树莓派Jessie系统中安装ROS
- Android数据存储-DB(SQLite)
- 欢迎使用CSDN-markdown编辑器
- Codeforces Round #426 (Div. 2) A B C The Meaningless Game
- js高级教程阅读笔记 第二章-在HTML中使用JavaScript
- android子线程怎样向主线程传递集合
- Ceres-Solver学习笔记(9)
- 如何把SQLServer数据库从高版本降级到低版本?
- 第一章:Python数据分析前的基础铺垫
- ES6中的Set和Map集合