Android数据库教程
在Android开发中,SQLite是一个轻量级的、嵌入式关系型数据库管理系统,它被广泛用于移动应用的数据存储,本文将详细介绍如何在Android中使用SQLite进行数据库操作。
一、SQLite简介
SQLite是一种开源的嵌入式关系型数据库管理系统,支持标准的SQL语言,它的主要特点包括:
轻量级:库文件非常小,适合嵌入式系统使用。
自给自足:不需要安装或配置服务器。
事务性:支持ACID事务。
零配置:无需复杂的设置即可运行。
二、SQLite在Android中的使用
1、引入SQLiteOpenHelper
SQLiteOpenHelper
是一个帮助类,用于管理数据库的创建和版本管理,通过继承这个类,可以轻松地创建和管理数据库。
public class DbHandler extends SQLiteOpenHelper { private static final String DATABASE_NAME = "usersdb"; private static final int DATABASE_VERSION = 1; private static final String TABLE_USERS = "userdetails"; private static final String KEY_ID = "id"; private static final String KEY_NAME = "name"; private static final String KEY_LOC = "location"; private static final String KEY_DESG = "designation"; public DbHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String CREATE_USERS_TABLE = "CREATE TABLE " + TABLE_USERS + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME + " TEXT," + KEY_LOC + " TEXT," + KEY_DESG + " TEXT" + ")"; db.execSQL(CREATE_USERS_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS); onCreate(db); } }
2、执行SQL语句
Android提供了几种方法来执行SQL语句,包括execSQL
和rawQuery
。
execSQL
用于执行更新(如INSERT、UPDATE、DELETE)语句。
rawQuery
用于执行查询(SELECT)语句,并返回一个Cursor
对象。
// 插入数据 public void addUser(User user) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_NAME, user.getName()); values.put(KEY_LOC, user.getLocation()); values.put(KEY_DESG, user.getDesignation()); db.insert(TABLE_USERS, null, values); db.close(); } // 查询数据 public Cursor getAllUsers() { SQLiteDatabase db = this.getReadableDatabase(); Cursor res = db.rawQuery("select * from " + TABLE_USERS, null); return res; }
3、使用Cursor遍历查询结果
Cursor
对象用于遍历查询结果,以下是一些常用的方法:
moveToFirst()
: 移动到第一条记录。
moveToNext()
: 移动到下一条记录。
moveToPrevious()
: 移动到前一条记录。
isAfterLast()
: 判断是否已超过最后一条记录。
Cursor res = dbHandler.getAllUsers(); if (res.getCount() == 0) { // 没有数据的情况 return; } while (res.moveToNext()) { String name = res.getString(res.getColumnIndex(DbHandler.KEY_NAME)); String location = res.getString(res.getColumnIndex(DbHandler.KEY_LOC)); String designation = res.getString(res.getColumnIndex(DbHandler.KEY_DESG)); // 处理查询结果 } res.close();
4、更新和删除数据
更新数据可以使用update
方法,删除数据可以使用delete
方法。
public int updateUser(User user) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_NAME, user.getName()); values.put(KEY_LOC, user.getLocation()); values.put(KEY_DESG, user.getDesignation()); return db.update(TABLE_USERS, values, KEY_ID + " = ?", new String[]{String.valueOf(user.getId())}); } public void deleteUser(User user) { SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_USERS, KEY_ID + " = ?", new String[]{String.valueOf(user.getId())}); db.close(); }
三、完整示例代码
以下是一个完整的示例,展示了如何在Android中使用SQLite数据库进行CRUD操作。
public class DbHandler extends SQLiteOpenHelper { private static final String DATABASE_NAME = "usersdb"; private static final int DATABASE_VERSION = 1; private static final String TABLE_USERS = "userdetails"; private static final String KEY_ID = "id"; private static final String KEY_NAME = "name"; private static final String KEY_LOC = "location"; private static final String KEY_DESG = "designation"; public DbHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String CREATE_USERS_TABLE = "CREATE TABLE " + TABLE_USERS + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME + " TEXT," + KEY_LOC + " TEXT," + KEY_DESG + " TEXT" + ")"; db.execSQL(CREATE_USERS_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS); onCreate(db); } // 添加用户 public void addUser(User user) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_NAME, user.getName()); values.put(KEY_LOC, values.put(KEY_DESG, user.getDesignation()); db.insert(TABLE_USERS, null, values); db.close(); } // 获取所有用户 public Cursor getAllUsers() { SQLiteDatabase db = this.getReadableDatabase(); return db.rawQuery("select * from " + TABLE_USERS, null); } // 更新用户信息 public int updateUser(User user) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_NAME, user.getName()); values.put(KEY_LOC, values.put(KEY_DESG, user.getDesignation()); return db.update(TABLE_USERS, values, KEY_ID + " = ?", new String[]{String.valueOf(user.getId())}); } // 删除用户 public void deleteUser(User user) { SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_USERS, KEY_ID + " = ?", new String[]{String.valueOf(user.getId())}); db.close(); } }
四、常见问题解答
Q1: SQLiteOpenHelper类的onCreate方法在整个应用程序生命周期内会被调用几次?
A1:onCreate
方法在整个应用程序生命周期内只会被调用一次,即当数据库第一次被创建时,如果数据库已经存在,则不会再次调用该方法。
到此,以上就是小编对于“android数据库教程”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/635507.html