SQLite数据库在Android中的使用小结
一,SQLite简介
SQLite是一个无服务器的,零配置的,事务性的SQL数据库引擎。无服务器,意味着使用sqlite不需要联网;不需要配置,意味着不需要安装和管理;同时sqlite遵循ACID原则。SQLIte是一款轻型的数据库,占用资源非常低,在嵌入式设备中,可能只需几百k的内存。
二,SQLIte在Android中的使用
Android中使用SQLiteDatabase代表数据库,并提供了一系列方法来操作数据库。对于常用的增删改查操作,既可以使用execSQL()方法直接执行sql语句,也可以使用Android提供的方法,由于execSQL()方法返回void,无法判断是否执行成功,所以除创建表之外的操作通常使用Android提供的一系列方法。
1,打开或者创建数据库
使用openOrCreateDatabase()打开或者创建一个数据库,如果数据库存在则打开数据库,反之则创建一个数据库。创建成功则返回SQLiteDatabase对象,否则抛出异常。使用时需提供创建路径和一个游标工厂;
private void initDatabase() { String filePath = getFilesDir().getAbsolutePath() + "wordDB.db"; DB = SQLiteDatabase.openOrCreateDatabase(filePath, null); Log.i("DB", "数据库初始化成功!"); }
2,创建表
表的创建可以通过SQLiteDatabase的exexSQL()方法直接执行sql语句来创建;
private void inittable() { String table = "create table tb_word(" + "id integer primary key autoincrement," + "word varchar(20) not null," + "translation varchar(20) not null);"; DB.execSQL(table); }
3,插入数据
- table:所要执行的表名;
- nullColumnHack:在此处指定一个列名,当数据为空时,会向该列插入一个null。一般设为null;
- values:要插入的内容;
private void insert() { //所要插入的数据 ContentValues contentValues = new ContentValues(); contentValues.put("word", word); contentValues.put("translation", translation); //执行插入 long id = wordDB.insert("tb_word", null, contentValues); if(id > 0){ Toast.makeText(this, "录入成功!", Toast.LENGTH_SHORT).show(); } }
4,删除数据
- table:表名;
- whereClause:修改条件,也就是sql语句中where后的内容,可以使用占位符,如"id=?";
- whereArgs:修改条件参数,当whereClause使用占位符时,在此处填入条件参数,形式为字符串数组;
private void delete() { //删除条件 String whereClause = "word = ?"; //删除条件参数 String[] whereArgs = {String.valueOf(words.getWord())}; //执行删除 int row = wordDB.delete("tb_word", whereClause, whereArgs); if(row > 0){ Log.i("delete", "删除成功"); }else { Log.i("delete", "删除失败"); } }
5,修改数据
- table:表名;
- values:修改的内容;
- whereClause:修改的条件,与delete的一致;
- whereArgs:修改条件参数;
private void update(){ //修改的内容 ContentValues values = new ContentValues(); values.put("translation", translation); //修改条件 String whereClause = "word=?"; //修改条件参数 String[] whereArgs = {word}; //执行修改 int row = wordDB.update("tb_word", values, whereClause, whereArgs); if(row > 0){ Log.i("update", "更新成功"); }else { Log.i("update", "更新失败"); } }
6,查询数据
在Android中查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。
- table:表名;
- columns:列名称数组,指定从哪些列寻找;
- selection:查询的条件,相当于where后的内容;
- selectionArgs:查询条件的参数;
- groupBy:分组列;
- having:分组条件;
- orderBy:排序列;
- limit:分页查询限制;
Cursor游标类常用方法:
private void searchWord() { //查询条件 String selection = "word=?"; //查询条件参数 String[] selectionArgs = { String.valueOf(word) }; //执行查询,获取游标类 Cursor cursor = wordDB.query("tb_word", null, selection, selectionArgs , null, null, null); StringBuffer result = new StringBuffer(); while(cursor.moveToNext()){ int idOfWord = cursor.getColumnIndex("word"); String word1 = cursor.getString(idOfWord); int idOfTranslation = cursor.getColumnIndex("translation"); String translation = cursor.getString(idOfTranslation); result.append(word1 + ": " + translation + "\n"); } tv_words.setText(result.toString()); }
三,SQLiteOpenHelper类
Android提供SQLiteOpenHelper类来管理数据库。主要负责数据库的创建、版本更新,一般情况通过创建它的子类并扩展onCreate()和onUpgrade()方法来实现。
SQLiteOpenHelper类常用方法:
- abstract void onCreate():第一次创建数据库时回调;
- abstract void onUpgrade():数据库版本更新时回调;
- SQLiteDatabase getWritableDatabase():获得可读/写的数据库;
- SQLiteDatabase getReadableDatabase():获得可读的数据库;
- void close():关闭所有打开的SQLiteDatabase;
(1)创建SQLiteOpenHelper的子类,并重写方法:
public class MySqliteHelper extends SQLiteOpenHelper { public MySqliteHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { String table = "create table tb_word(" + "id integer primary key autoincrement," + "word varchar(20) not null," + "translation varchar(20) not null);"; db.execSQL(table); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
(2)通过子类来创建数据库:
private void initDatabaseHelper() { mySqliteHelper = new MySqliteHelper( this, "wordDB.db", null, 1 ); SQLiteHelperUtil.wordDB = mySqliteHelper.getWritableDatabase(); Log.i("wordDB", "数据库初始化成功!"); }
四,SQLite中事务的处理
SQLite采用如下方法来处理事务:
- beginTransaction():开启事务;
- setTransactionSuccessful():标记事务成功;
- endTransaction():提交事务,当事务执行失败时,可调用此方法回滚事务;
db.beginTransaction(); try { // 执行事务中的sql语句 db.setTransactionSuccessful(); } finally { db.endTransaction(); } }
到此这篇关于SQLite数据库在Android中的使用的文章就介绍到这了,更多相关Android SQLite数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Flutter最小刷新范围探索ValueListenableBuilder使用详解
这篇文章主要为大家介绍了Flutter最小刷新范围探索ValueListenableBuilder使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-12-12Kotlin 协程 supervisorScope {} 运行崩溃解决方法
看过很多 supervisorScope {} 文档的使用,我照抄一摸一样的代码,运行就崩溃,最后找到了解决方法,应该是kotlin版本更新做过改动,当前我使用的是 androidx.core:core-ktx:1.9.0,本文给大家介绍Kotlin 协程 supervisorScope {} 运行崩溃解决方法,感兴趣的朋友一起看看吧2024-01-01Android 解决dialog弹出时无法捕捉Activity的back事件问题
这篇文章主要介绍了Android 解决dialog弹出时无法捕捉Activity的back事件问题的相关资料,需要的朋友可以参考下2016-11-11
最新评论