本文目录

    • 操作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文件;

欢迎点赞评论,指出不足,笔者由衷感谢哦!~

更多相关文章

  1. 自定义UI框架
  2. 每天学习一个Android中的常用框架——2.greenDao
  3. 【Android】[1]APP桌面图标和显示名字国际化
  4. Android(安卓)学习笔记四:创建工具栏按钮
  5. 浅看Android与IOS
  6. (Android) 如何使用HOOK实现动态注入以及自动化操作
  7. Android目前流行三方数据库ORM分析及对比
  8. Android下的配置管理之道之gerrit代码服务器搭建
  9. 十大技巧优化Android(安卓)App性能

随机推荐

  1. Android设置头像,手机拍照或从本地相册选
  2. 动画效果编程基础--AnimationAndroid
  3. Android ListView去掉顶部阴影
  4. eclipse的android智能提示设置
  5. Android ListView常见属性问题
  6. 关于Android多项目依赖在Eclipse中无法关
  7. Android:Re-installation failed due to
  8. React Native与Android通信——Android c
  9. Android之Service学习篇一:Service启动方
  10. android 获取路径目录方法 以及 获取路径