网站建设 企业,短视频运营计划书,房产信息门户网站建设方案,哪个网络公司做网站好使用 SQLite 保存数据 | Android Developers (google.cn) SQLiteOpenHelper 类包含一组用于管理数据库的实用 API。当您使用此类获取对数据库的引用时#xff0c;系统仅在需要时才执行可能需要长时间运行的数据库创建和更新操作#xff0c;而不是在应用启动期间执行。您仅…使用 SQLite 保存数据 | Android Developers (google.cn) SQLiteOpenHelper 类包含一组用于管理数据库的实用 API。当您使用此类获取对数据库的引用时系统仅在需要时才执行可能需要长时间运行的数据库创建和更新操作而不是在应用启动期间执行。您仅需调用 getWritableDatabase() 或 getReadableDatabase() 即可。 注意由于这些操作可能会长时间运行因此请务必在后台线程中调用 getWritableDatabase() 或 getReadableDatabase()。 这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开否则创建一个新的数据库)并返回一个可对数据库进行读写操作的对象。不同的是当数据库不可写入的时候(如磁盘空间已满)。 getReadableDatabase()方法返回的对象将以只读的方式去打开数据库 getWritableDatabase()方法则将出现异常 创建一个数据库管理类继承 SQLiteOpenHelper并重写其中的方法
onCreate() 创建数据库onUpgrade() 数据库升级onDowngrade() 和 onOpen() 并不是必须
准备数据库框架
准备表名、列名 // ----表名public static final String STUTDY_SQLITE_TABLE STUTDY_SQLITE_TABLE;// ----列名public static final String COLUNM_ID ID;public static final String COLUNM_NAME COLUNM_NAME;public static final String COLUNM_PHONE COLUNM_PHONE;public static final String COLUNM_PASSWORD COLUNM_PASSWORD;
创建数据库 onCreate() // 第一次尝试访问数据库对象时会调用该方法创建新表public void onCreate(SQLiteDatabase sqLiteDatabase) {// 创建新表的语句String createNewTableSqlStr CREATE TABLE STUTDY_SQLITE_TABLE (ID INTEGER PRIMARY KEY AUTOINCREMENT, COLUNM_NAME TEXT, COLUNM_PHONE TEXT, COLUNM_PASSWORD TEXT);sqLiteDatabase.execSQL(createNewTableSqlStr);}
修改数据库 onUpgrade()
// 当数据库的版本号发生变化时会调用该方法public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {}
CRUD 操作
C-添加
public long insert(String table, String nullColumnHack, ContentValues values) 参数1表名 参数2将指示框架在 ContentValues 为空即您没有 put 任何值时应执行哪些操作 参数3内容 通过将 ContentValues 对象传递给 insert() 方法将数据插入到数据库中 方法会返回新创建行的 ID如果在插入数据时出错会返回 -1。如果数据与数据库中已有的数据之间存在冲突就会出现这种情况。 public boolean addOne(UserBean userBean) {//获取要编写的唯一一个数据库/* getWritableDatabase SQLiteOpenHelper中的方法*/SQLiteDatabase sqLiteDatabase this.getWritableDatabase();// 有点像flutter里的键值对ContentValues cv new ContentValues();cv.put(COLUNM_NAME, userBean.getName());cv.put(COLUNM_PHONE, userBean.getPhone());cv.put(COLUNM_PASSWORD, userBean.getPassWord());long insert sqLiteDatabase.insert(STUTDY_SQLITE_TABLE, null, cv);return insert ! -1;}
R-查询
使用 query() 方法向其传递选择条件和所需的列。
该方法合并了 insert() 和 update() 元素查询结果会包含在 Cursor 对象中返回。
Cursor对象是查询的结果集 public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) table:表名columns指定要查询的列如果为空则返回所有列selection指定查询条件使用占位符 ?selectionArgs查询条件具体的值groupBy:指定分组方式having指定having方式orderBy指定排序方式limit限制查询返回的行数 使用rawQuery()方法 public Cursor rawQuery(String sql, String[] selectionArgs) sql查询语句selectionArgs查询条件 // 从数据库中查询String querySqlStr SELECT * FROM STUTDY_SQLITE_TABLE;SQLiteDatabase sqLiteDatabase this.getReadableDatabase(); //可读Cursor cursor sqLiteDatabase.rawQuery(querySqlStr, null);
U-修改
使用 update() 方法.
更新表可将 insert() 的 ContentValues 语法与 delete() 的 WHERE 语法相结合。
update() 方法的返回值是数据库中受影响的行数. public int update(String table, ContentValues values, String whereClause, String[] whereArgs) table表名values更新的值whereClause可选的更新条件whereArgs更新条件的值 public boolean updataInfo(UserBean userBean) {SQLiteDatabase sqLiteDatabase this.getWritableDatabase();ContentValues cv new ContentValues();cv.put(COLUNM_NAME, userBean.getName());cv.put(COLUNM_PHONE, userBean.getPhone());cv.put(COLUNM_PASSWORD, userBean.getPassWord());int result sqLiteDatabase.update(STUTDY_SQLITE_TABLE, cv, ID ?, new String[]{String.valueOf(userBean.getId())});return result 0;}
D-删除
需从表中删除行您需要提供选择条件以标识 delete() 方法的目标行。该机制与 query() 方法的目标选择参数的工作方式相同
delete() 方法的返回值表示从数据库中删除的行数。 public int delete(String table, String whereClause, String[] whereArgs) table:表名whereClause:可选的更新条件whereArgs:更新条件的值 public boolean deleteOne(UserBean userBean) {SQLiteDatabase sqLiteDatabase this.getWritableDatabase();System.out.println(要删除的id: userBean.getId());/* 删除语句返回的是受影响的行数* 行数0返回true 否则返回false */int result sqLiteDatabase.delete(STUTDY_SQLITE_TABLE, COLUNM_ID ?, new String[]{String.valueOf(userBean.getId())});return result 0;}
保留数据库连接
由于在数据库关闭时调用 getWritableDatabase() 和 getReadableDatabase() 的成本比较高因此只要有可能需要访问数据库就应保持数据库连接处于打开状态。通常情况下最好在发出调用的 Activity 的 onDestroy() 中关闭数据库。
Override
protected void onDestroy() {dbHelper.close();super.onDestroy();
}