在Android开发中,数据库是不可或缺的一部分,SQLite作为一种轻量级、嵌入式的数据库,因其高效性和易用性,成为Android应用开发中的常用选择,本文将对Android程序中的数据库操作进行详细介绍,涵盖从基础概念到实际操作的各个方面。
一、关系型数据库SQLite
每个应用程序都需要使用数据,Android也不例外,Android使用的是开源的、与操作系统无关的SQL数据库—SQLite,SQLite的第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,设计目标是嵌入式的,占用资源非常低,只需要几百K的内存。
SQLite的特点
轻量级:SQLite是进程内的数据库引擎,不存在客户端和服务器的概念,只需带上一个动态库即可享受其全部功能。
独立性:SQLite的核心引擎不依赖第三方软件,使用时无需“安装”,方便管理和维护。
隔离性:所有信息(如表、视图、触发器)都包含在一个文件内。
跨平台:支持大部分操作系统,包括Android、Windows Mobile、Symbian等。
多语言接口:支持多种编程语言接口,如C/C++、Java、Python等。
安全性:通过数据库级的独占性和共享锁实现独立事务处理。
二、导出查看数据库文件
在Android中,为某个应用程序创建的数据库只有该应用可以访问,其他应用无法访问,数据库位于Android设备的数据目录下,可以通过Eclipse导出数据库文件,并使用SQLite Database Browser查看数据库内容。
三、扩展类
3.1 扩展SQLiteOpenHelper
Android不自动提供数据库,需要开发者自己创建,Android提供了SQLiteOpenHelper类帮助创建和管理数据库,继承SQLiteOpenHelper类,可以轻松创建数据库,SQLiteOpenHelper类的子类至少需要实现三个方法:构造函数、onCreate()方法和onUpgrade()方法。
示例代码如下:
public class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version) { super(context, name, cursorFactory, version); } @Override public void onCreate(SQLiteDatabase db) { // TODO 创建数据库后,对数据库的操作 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO 更改数据库版本的操作 } @Override public void onOpen(SQLiteDatabase db) { super.onOpen(db); // TODO 每次成功打开数据库后首先被执行 } }
3.2 Cursor类
Android使用Cursor类返回查询结果集,Cursor作为一个指针,允许更有效地管理所需的行和列,ContentValues对象用于存储键值对,其put()方法允许插入不同数据类型的键值。
3.3 数据类型
SQLite与其他数据库最大的不同在于对数据类型的支持,创建表时可以在CREATE TABLE语句中指定某列的数据类型,但可以将任何数据类型放入任何列中,当插入数据时,SQLite会检查数据类型,如果类型不匹配,将尝试转换数据类型,如果不能转换,则以原类型存储。
四、数据库操作
4.1 创建数据库
Android不自动提供数据库,需要在应用程序中使用SQLite创建数据库,继承SQLiteOpenHelper类,可以实现数据库的创建和更新逻辑。
示例代码如下:
public class SQLiteDbHelp extends SQLiteOpenHelper { private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " + BookEntry.TABLE_NAME + " (" + BookEntry._ID + " INTEGER PRIMARY KEY," + BookEntry.COLUMN_NAME_TITLE + " TEXT," + BookEntry.COLUMN_NAME_PRICE + " INTEGER)"; private static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + BookEntry.TABLE_NAME; public static final String DATABASE_NAME = "budaye_db.db"; //数据库名称 public static final int DATABASE_VERSION = 1; public SQLiteDbHelp(Context context){ super(context, DATABASE_NAME, null, DATABASE_VERSION); } /** * 数据库创建 * @param db */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL(SQL_CREATE_ENTRIES); } /** * 数据库版本升级 * @param db * @param oldVersion * @param newVersion */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL(SQL_DELETE_ENTRIES); onCreate(db); } }
4.2 插入数据
在数据库中插入数据,可以使用ContentValues对象存储键值对,并通过insert()方法插入数据。
示例代码如下:
private long insertDB(){ SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(BookEntry.COLUMN_NAME_TITLE, "Android"); values.put(BookEntry.COLUMN_NAME_PRICE, 10); long newRowId = db.insert(BookEntry.TABLE_NAME, null, values); return newRowId; }
4.3 删除数据
删除数据可以通过delete()方法实现。
示例代码如下:
private int deleteDB(long rowId){ SQLiteDatabase db = dbHelper.getWritableDatabase(); int rowsAffected = db.delete(BookEntry.TABLE_NAME, BookEntry._ID+"=?",new String[]{String.valueOf(rowId)}); return rowsAffected; }
4.4 更新数据
更新数据可以通过update()方法实现。
示例代码如下:
private int updateDB(long rowId, String title, int price){ SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(BookEntry.COLUMN_NAME_TITLE, title); values.put(BookEntry.COLUMN_NAME_PRICE, price); int rowsAffected = db.update(BookEntry.TABLE_NAME, values, BookEntry._ID+"=?", new String[]{String.valueOf(rowId)}); return rowsAffected; }
4.5 查询数据
查询数据可以通过query()方法实现。
示例代码如下:
private Cursor queryDB(){ SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.query(BookEntry.TABLE_NAME,null,null,null,null,null,null); return cursor; }
五、项目结构与实例化SQLiteOpenHelper的子类
为了合理组织项目结构,可以将与数据库相关的类放在单独的包目录下,将所有与Book表相关的代码放在database/book包目录下。
实例化SQLiteOpenHelper的子类,可以在主Activity中完成,以下是一个示例:
private SQLiteDbHelp dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); dbHelper = new SQLiteDbHelp(this.getApplicationContext()); }
新建SQLiteDbHelp对象之后,就可以使用数据库了。
在Android开发中,正确使用SQLite数据库可以有效提高应用的性能和用户体验,以下是一些最佳实践:
后台线程操作:由于数据库操作可能会长时间运行,建议在后台线程中进行数据库创建和更新操作。
使用ContentResolver和ContentProvider:对于复杂的数据库操作,可以考虑使用ContentResolver和ContentProvider。
避免直接拼接SQL语句:为了防止SQL注入攻击,应避免直接拼接SQL语句,使用参数化查询。
定期备份和恢复:定期备份数据库文件,以防止数据丢失。
优化查询性能:合理设计索引,提高查询效率。
通过以上介绍,相信读者对Android程序中的数据库操作有了全面的了解,在实际开发中,可以根据具体需求选择合适的方法和技术,确保应用的稳定性和性能。
各位小伙伴们,我刚刚为大家分享了有关“android程序数据库”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/636511.html