Android SQLite操作之“SQLiteOpenHelper”
来源:互联网 发布:今日头条 源码 编辑:程序博客网 时间:2024/05/29 10:56
最近在写Android SQLite,第一次用了SQLiteDatabase,这一次用SQLiteOpenHelper。还是用Android Studio,查看数据库的软件是SQLite Expert Personal 4.x 传送门:http://www.sqliteexpert.com/download.html
具体操作见《Android对SQLite的”增删改查”——SQLiteDatabase》
SQLiteOpenHelper使用很灵活,版本号、数据库名称和光标位置都可以在MainActivity中获取,也可以在DBHelp(继承SQLiteOpenHelper的类)中设定。
public SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version);}
例:在MainActivity中获取数据库名称,版本预设1
public DBHelp(Context context,String name) { super(context, name, null, 1); }
那么MainActivity就要传一个名称过来:
dbHelp = new DBHelp(MainActivity.this,"Zhan.db");
如果是DBHelp中设定的参数,那么传值就不需要了
public static String DB_Name = "Zhan.db"; public static int DB_Version = 1; public DBHelp(Context context) { super(context, DB_Name, null, DB_Version); }
MainActivity中代码:
dbHelp = new DBHelp(MainActivity.this);
SQLiteOpenHelper自带两个方法,一个是onCreate: 程序自动调用,用作创建数据库。若database文件夹中已经存在数据库时,则不会调用此方法。值得注意的是,仅仅生成DataBaseHelper对象(SQLiteOpenHelper类型)的时候是不会调用该函数的,也就是说
dbHelp = new DBHelp(MainActivity.this);
这句语句并不会让程序自动调用onCreate方法。我们在后面必须得跟getWritableDatabase或getReadableDatabase。就像这样:
dbHelp = new DBHelp(MainActivity.this);db = dbHelp.getWritableDatabase();
然后onCreate中再写创建表格的语句,这样才能被执行。
public void onCreate(SQLiteDatabase db) { String sql = "CREATE TABLE IF NOT EXISTS Zhan (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age INTEGER)"; db.execSQL(sql); System.out.println("finish creat table"); }
第二个是onUpgrade(SQLiteDatabase db, int DB_OldVersion, int DB_NewVersion):用于升级软件时更新数据库表结构,如增加表、列字段等操作。
提示一下,在升级前,最好对原有数据进行备份,在新表建好后把数据导入新表中。
写到这里,又出现了两个方法getWritableDatabase() 和getReadableDatabase()。
两个方法的介绍在百度知道上已经解释的很清楚了。
这样看来似乎getReadableDatabase更安全一些。
除了上述的两种方法,我们还可以在BDHelp这个类里面写自己的方法。比如数据的“增删改查”。这就把SQLite的功能都独立出来了,对后期的维护比较方便,如果出现错误并且是SQLite出错了,只要看DBHelp就好了,不需要在一堆杂乱无章的代码中找错误。虽然这个工程并不是典型的MVC设计模式,但还是可以看得出MVC的影子。
public void Insert() { SQLiteDatabase db = this.getWritableDatabase(); //获取数据库实例 db.execSQL("INSERT INTO Zhan (_id,name,age)"+" VALUES(1,'Zhan',8)"); db.execSQL("INSERT INTO Zhan VALUES (2,?,?)", new Object[]{"abc",21}); db.execSQL("INSERT INTO Zhan (_id, name, age) VALUES (?, 'xyz', 22)"); db.execSQL("INSERT INTO Zhan VALUES (6,'Michael',9)"); }
public void Delete(String s){ SQLiteDatabase db = this.getReadableDatabase(); db.execSQL("DELETE FROM Zhan WHERE name = ?",new Object[]{ s }); }
这里就放了两段代码,具体的“增删改查”怎么写,可以参考本人所写的《Android对SQLite的”增删改查”——SQLiteDatabase》。其中的SQL语句其实都是一样的。
那我们看一下,这边的两段代码实现了什么功能。第一个插入数据,是往表格中插入4条数据。
第二个删除是删除name为xyz的记录。
最终只剩下三条记录。
文章的最后,我们看一下整个工程文件
1、继承SQLiteOpenHelper的类DBHelp
2、MainActivity
参考资料:SQLiteOpenHelper SQLiteDatabase ContentProvider三者的关系
getWritableDatabase() 和getReadableDatabase()操作上有什么
- Android SQLite操作之“SQLiteOpenHelper”
- Android -SQLite 操作第一章 SQLiteOpenHelper
- (4.1.29.1)Android 操作SQLite基本用法之SQLiteOpenHelper
- android 之SQLite使用SQLiteOpenHelper对数据库操作
- Android中SQLite之SQLiteOpenHelper详解
- Android中SQLite之SQLiteOpenHelper详解
- Android SQLite数据库之三,SQLiteOpenHelper
- 【android】SQLite数据库之SQLiteOpenHelper与SQLiteDatabase
- Android之Sqlite,SQLiteOpenHelper的使用
- SQLite使用方法 SQLiteOpenHelper操作
- SQLite使用方法 SQLiteOpenHelper操作 .
- android SQLite SQLiteOpenHelper
- Android-SQLite和SQLiteOpenHelper
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
- LeetCode Binary Tree Level Order Traversal I.II
- 神器推荐:应用之星,零代码就能制作炫酷的H5页面
- 关于ARM9协处理器CP15及MCR和MRC指令
- 全栈工程师眼中的HTTP
- Java List排序
- Android SQLite操作之“SQLiteOpenHelper”
- 导mysql数据,遇到 longtext 类型,navicat导出会出现乱码
- 简谈python hashlib
- Windows本地端口冲突
- Jsp页面动态显示当前时间
- PHP得到当前GIT分支的代码
- android中进程优先级
- UVA 10392-Factoring Large Numbers
- lookalike 人群扩散调研