【Android】SQLiteOpenHelper类(sql语句实现增删改查),封装SQLite模板代码成一个小框架
16lz
2021-01-26
本文目录
- 操作SQLite的小框架
- 创建数据库
- 新建封装数据库模板代码的模板类SQLiteTemplate
- 在AS中使用这个框架操作SQLite
- 小结
操作SQLite的小框架
SQLite是一款轻量级的关系型数据库,它的运行速度很快,占用资源少,通常只需要几百K的内存就足够了,因而现在的主流移动设备都使用SQLite作为复杂数据的存储引擎。对于Android来说,系统内置了丰富的API来提供开发人员操作SQLite,从而轻松的实现数据的操作。
而操作SQLite时,经常会反复写下面红框中的代码,可以说是SQLite的模板代码,接下来就将模板代码整合为一个小框架,让使用者轻松去使用数据库提供的相关功能。用一个简单的AS程序展示使用这个框架。
创建数据库
新建封装数据库操作的类MySQLiteOpenHelper继承自SQLiteOpenHelper (Android为我们专门提供的一个帮助类)
MySQLiteOpenHelper.java
package com.example.sqlite_myframe;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;public class MySQLiteOpenHelper extends SQLiteOpenHelper { //上下文 private static Context context; //数据库版本号 //为了便于重用和防止不一致错误,将数据库名,表名,字段名都抽出为常量 private static int versionDB = 4; private final static String dbName = "UserDB";//数据库名 private final static String tableName = "information";//表名 private static String colName = "name";//列名 private static String colPrice = "price";//列名 public static String getTableName() { return tableName; } public static String getColName() { return colName; } public static String getColPrice() { return colPrice; } //考虑到版本问题,设计了两个构造方法 public MySQLiteOpenHelper(Context context, int versionDB) { super(context, dbName, null, versionDB); this.context = context; //上下文 this.versionDB = versionDB; //数据库版本号 Log.v("DAB", "MySQLiteOpenHelper: 构造方法"); } public MySQLiteOpenHelper(Context context) { this(context, versionDB); } //当数据库创建的时候被调用 @Override public void onCreate(SQLiteDatabase db) { //创建了数据库并创建一个叫 information 的表 //SQLite 数据创建支持的数据类型:整型数据,字符串类型,日期类型,二进制的数据类型 //使用SQL创建数据库,设计一个记录表 //Create table 表名称(id INTEGER PRIMARY KEY AUTOINCREMENT, name varchar, type Integer); String sql = "create table " + tableName + "(id integer primary key autoincrement," + colName + " varchar(20)," + colPrice + " integer)"; Log.v("DAB", "MySQLiteOpenHelper:onCreate():sql=" + sql); //execSQL 用于执行SQL 语句(对大小写不敏感), 完成数据库的创建 db.execSQL(sql); //数据库实际上是没有被创建或者打开的, //到调用 getWritableDatabase ()或 getReadableDatabase () 时才会进行创建或者打开 } //数据库升级时调用 //如果 DATABASE_VERSION值被改为 2,系统发现现有数据库版本不同 ,即会调用 onUpgrade ()方法 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.v("DAB", "MySQLiteOpenHelper:onUpgrade(),更新数据库版本为:" + newVersion); }}
新建封装数据库模板代码的模板类SQLiteTemplate
SQLiteTemplate.java
package com.example.sqlite_myframe;import android.content.Context;import android.database.sqlite.SQLiteDatabase;//AS中,操作SQLite数据库中有许多模板代码//将他们整合为一个小框架,封装成类,用时直接调用//让我们能轻松去使用数据库提供的相关功能//本着一个java文件最好一个类,就没有和继承SQLiteOpenHelper的操作类放在一起//下面是我写的模板类SQLiteTemplatepublic class SQLiteTemplate extends MySQLiteOpenHelper{ //声明部分 private static MySQLiteOpenHelper dbHelper; private static SQLiteDatabase sqliteDatabase; private static Context context; //模板类需要继承自己写的操作类MySQLiteOpenHelper,也要有两个构造方法 public SQLiteTemplate(Context context, int versionDB) { super(context, versionDB); } public SQLiteTemplate(Context context) { super(context); this.context=context; } public static MySQLiteOpenHelper getDbHelper() { //创建 SQLiteOpenHelper 子类对象 dbHelper=new MySQLiteOpenHelper(context); return dbHelper; } public static SQLiteDatabase getSqliteDatabase() { //调用 getWritableDatabase ()方法创建或打开一个可以读的数据库 sqliteDatabase=dbHelper.getWritableDatabase(); return sqliteDatabase; } public static void getSqliteDatabase(String sql) { //增删改操作即可用insert//delete/query,也可用execSQL()方法 //实际开发时,建议都使用SQL语句,比较通用; sqliteDatabase.execSQL(sql); //关闭数据库 sqliteDatabase.close(); }}
在AS中使用这个框架操作SQLite
1.新建界面按钮,以完成交互2.编写主界面的java代码,完成逻辑
MainActivity.java
package com.example.sqlite_myframe;import androidx.appcompat.app.AppCompatActivity;import android.database.Cursor;import android.os.Bundle;import android.util.Log;import android.view.View;public class MainActivity extends AppCompatActivity { //声明我的封装类,并调用构造方法 private final SQLiteTemplate sqLiteTemplate=new SQLiteTemplate(this); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //创建数据库 public void onClick_CreatDB(View view) { Log.v("DAB", "CreatDB"); SQLiteTemplate.getDbHelper(); SQLiteTemplate.getSqliteDatabase(); } //插入数据操作 public void onClick_Insert(View view) { Log.v("DAB", "onClick_Insert"); SQLiteTemplate.getDbHelper(); SQLiteTemplate.getSqliteDatabase(); //使用sql语句(对大小写不敏感),使用时注意语句间要有空格 //sql插入语法:INSERT INTO 表名称 (列1, 列2,...) VALUES (值1, 值2,....) String sql = "insert into " + MySQLiteOpenHelper.getTableName() + "(" + MySQLiteOpenHelper.getColName() + "," + MySQLiteOpenHelper.getColPrice() + ") values('怡宝',2),('脉动',4),('体质能量',5)"; Log.v("DAB", "sql=" + sql); SQLiteTemplate.getSqliteDatabase(sql); } //删除数据操作 public void onClick_Delete(View view) { Log.v("DAB", "onClick_Delete"); SQLiteTemplate.getDbHelper(); SQLiteTemplate.getSqliteDatabase(); //sql删除语法:DELETE FROM 表名称 WHERE 列名称 = 值 String sql="delete from "+MySQLiteOpenHelper.getTableName()+" where id='2'"; Log.v("DAB", "delete的sql=" + sql); SQLiteTemplate.getSqliteDatabase(sql); } //修改数据操作 public void onClick_Update(View view) { Log.v("DAB", "onClick_Update"); SQLiteTemplate.getDbHelper(); SQLiteTemplate.getSqliteDatabase(); //sql更新语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 String sql = "update " + MySQLiteOpenHelper.getTableName() + " set " + MySQLiteOpenHelper.getColPrice() + "=4.5 where " +MySQLiteOpenHelper.getColName()+"='脉动'"; //打印sql Log.v("DAB", "update的sql=" + sql); SQLiteTemplate.getSqliteDatabase(sql); } //查询数据操作 public void onClick_Query(View view) { Log.v("DAB", "onClick_Query"); SQLiteTemplate.getDbHelper(); SQLiteTemplate.getSqliteDatabase(); //sql查询语法:SELECT 列名称 FROM 表名称 // 或者:SELECT * FROM 表名称 String sql = "select * from information where name=?"; //字符类的占位符写法要注意,sql中字符类占位符不能用单引号括起来 Cursor cursor = SQLiteTemplate.getSqliteDatabase().rawQuery(sql, new String[]{"脉动"}); Log.v("DAB", "rawQuery()查询到的数据是:\n"); while (cursor.moveToNext()) {//如有则true,没有则false String id = cursor.getString(0); String name=cursor.getString(cursor.getColumnIndex(MySQLiteOpenHelper.getColName())); String price = cursor.getString(cursor.getColumnIndex(MySQLiteOpenHelper.getColPrice())); //打印出查询结果 Log.v("DAB", "id: " + id +",name:"+name+ " " + "price: " + price); } //关闭数据库 SQLiteTemplate.getSqliteDatabase().close(); } //删除数据库 public void onClick_DestroyDB(View view) { Log.v("DAB", "onClick_DestroyDB"); //删除名为 UserDB.db 数据库 deleteDatabase("UserDB"); }}
运行程序看看效果
小结
可以发现主界面的操作SQLite代码,简洁了许多,使用者只用编写必要的增删改查代码即可,并且编写的操作类、模板类可以移植,再要使用数据库操作时,直接复制自己写的操作类和模板类的java文件;
欢迎点赞评论,指出不足,笔者由衷感谢哦!~
更多相关文章
- 自定义UI框架
- 每天学习一个Android中的常用框架——2.greenDao
- 【Android】[1]APP桌面图标和显示名字国际化
- Android(安卓)学习笔记四:创建工具栏按钮
- 浅看Android与IOS
- (Android) 如何使用HOOK实现动态注入以及自动化操作
- Android目前流行三方数据库ORM分析及对比
- Android下的配置管理之道之gerrit代码服务器搭建
- 十大技巧优化Android(安卓)App性能