当前位置: 首页 > news >正文

Android Studio SQLite Manage

一、类DBHelper :

public class DBHelper extends SQLiteOpenHelper {

    private static final String CREATE_TABLE_START_SQL = "CREATE TABLE IF NOT EXISTS ";
    private static final String CREATE_TABLE_PRIMIRY_SQL = " integer primary key autoincrement,";

    public  DBHelper(Context context, String dbname, SQLiteDatabase.CursorFactory factory,int version)
    {
        super(context,dbname,null,1);
    }

    //数据库第一次创建时被调用
    @Override
    public void onCreate(SQLiteDatabase db) {
        //CREATE TABLE person(personid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20))
        StringBuffer mealSql = new StringBuffer();
        mealSql.append(CREATE_TABLE_START_SQL).append(" meals ").append(" ( ");
        mealSql.append(" id").append(CREATE_TABLE_PRIMIRY_SQL);
        mealSql.append(" MealID").append(" varchar(32) default \"\" ,");
        mealSql.append(" MealName").append(" varchar(150) default \"\" ,");
        mealSql.append(" MState").append(" varchar(10) default \"\" ,");
        mealSql.append(" TagID").append(" varchar(20) default \"\" ,");
        mealSql.append(" ImgUrl").append(" varchar(250) default \"\" ,");
        mealSql.append(" SellPrice").append(" double  default 0 ,");
        mealSql.append(" ForIndex").append(" double  default 0 ,");
        mealSql.append(" JLUnit").append(" double  default 1 ,");
        mealSql.append(" JLPrice").append(" double  default 0 ");
        mealSql.append(" )");

        db.execSQL(mealSql.toString());
    }
    //软件版本号发生改变时调用
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL");
    }
}

二、类DBManager

public class DBManager {private static DBManager instance;private static SQLiteOpenHelper mDBHelper;private SQLiteDatabase mDatabase;private AtomicInteger mOpenCounter = new AtomicInteger();/***单例模式,初始化DBManager* @return*/public  static  synchronized  DBManager getInstance(){if(instance==null){instance=new DBManager()   ;}return  instance;}/***数据库初始化* @param context*/public  void init(Context context){if(context==null)   {return;}if(mDBHelper==null){mDBHelper=new DBHelper(context.getApplicationContext(),"meals.db",null,1);}}/*** 释放数据库*/public void release() {if (mDBHelper != null) {mDBHelper.close();mDBHelper = null;}instance = null;}/*** 打开数据库*/public synchronized SQLiteDatabase openDatabase() {if (mOpenCounter.incrementAndGet() == 1) {// Opening new databasetry {mDatabase = mDBHelper.getWritableDatabase();} catch (Exception e) {//Log.e(TAG, "openDatabase e = " + e.getMessage());Logger.d("openDatabase e "+e.getMessage());mDatabase = mDBHelper.getReadableDatabase();}}return mDatabase;}/*** 关闭数据库*/public synchronized void closeDatabase() {if (mOpenCounter.decrementAndGet() == 0) {// Closing databasemDatabase.close();}}private void closeCursor(Cursor cursor) {if (cursor != null) {try {cursor.close();} catch (Throwable e) {//Log.e(TAG, "closeCursor e = " + e.getMessage());}}}/*** 保持菜品,如果已经存在菜品编号则更新,否则新增* @param meal* @return*/public ResponseBean addmeal(dishmeal meal) {Cursor cursor =null;ResponseBean res = new ResponseBean();res.setSucceed(false);try {if (mDBHelper == null) {res.setData("未初始化 mDBHelper");return res;}SQLiteDatabase db = mDBHelper.getReadableDatabase();cursor = db.rawQuery("SELECT * FROM meals WHERE MealID = ?",new String[]{meal.getMealID()});//存在数据才返回trueif (cursor == null) {res.setData("cursor==null");return res;}if (cursor.getCount() > 0) {//存在该菜品,则修改mDatabase = mDBHelper.getWritableDatabase();ContentValues cv = new ContentValues();cv.put("ForIndex", meal.getForIndex());
//                    cv.put("ImgUrl", meal.getImgUrl());cv.put("JLPrice", meal.getJLPrice());cv.put("JLUnit", meal.getJLUnit());cv.put("MealID", meal.getMealID());cv.put("MealName", meal.getMealName());cv.put("MState", meal.getMState());cv.put("SellPrice", meal.getSellPrice());cv.put("TagID", meal.getTagID());//参数依次是表名,修改后的值,where条件,以及约束,如果不指定三四两个参数,会更改所有行int rowId = mDatabase.update("meals", cv, "MealID = ?", new String[]{meal.getMealID()});Logger.d("update meal rowId:"+rowId);if (rowId < 0) {res.setData("更新失败," + rowId);closeCursor(cursor);//return res;} else {res.setSucceed(true);res.setData("更新数据成功");closeCursor(cursor);//return res;}} else {mDatabase = mDBHelper.getWritableDatabase();ContentValues cv = new ContentValues();cv.put("ForIndex", meal.getForIndex());
//                    cv.put("ImgUrl", meal.getImgUrl());cv.put("JLPrice", meal.getJLPrice());cv.put("JLUnit", meal.getJLUnit());cv.put("MealID", meal.getMealID());cv.put("MealName", meal.getMealName());cv.put("MState", meal.getMState());cv.put("SellPrice", meal.getSellPrice());cv.put("TagID", meal.getTagID());long rowId = mDatabase.insert("meals", null, cv);Logger.d("insert meal rowId:"+rowId);if (rowId < 0) {res.setData("插入失败," + rowId);//closeCursor(cursor);//return res;} else {res.setSucceed(true);res.setData("插入数据成功");//closeCursor(cursor);//return res;}}//return  res ;} catch (Exception ex) {res.setData("出错了," + ex.getMessage());//closeCursor(cursor);}finally {closeCursor(cursor);}return res;}/*** 查询出识别的菜品详细信息* @param mlst* @return*/public List<dishmeal> getmeal(List<String> mlst) {Cursor cursor = null;List<dishmeal> meallist = new ArrayList<>();try {if(mDBHelper==null){return  null;}SQLiteDatabase db=mDBHelper.getReadableDatabase();String where =null;//"MealID in (?,?,?)  ";String[] whereValue =null;//{"11","10","12"};if(mlst!=null && mlst.size()>0) {where ="";whereValue = mlst.toArray(new String[0]);//. " MealID"for(int i=0;i<mlst.size();i++){where+=where==""?"":",";where+="?";}where=" MealID in ("+where+") ";}
//            Logger.d("getmeal where:" +where);
//            Logger.d("getmeal whereValue :" + JSON.toJSONString(whereValue));cursor = db.query("meals", null, where, whereValue, null, null, null);
//            cursor =  db.rawQuery("SELECT * FROM meals ", new String[]{});
//            Logger.d("cursor getCount:" +cursor.getCount());while (cursor != null && cursor.getCount() > 0 && cursor.moveToNext()) {//int dbId = cursor.getInt(cursor.getColumnIndex("_id"));double ForIndex = cursor.getDouble(cursor.getColumnIndex("ForIndex"));String ImgUrl = cursor.getString(cursor.getColumnIndex("ImgUrl"));double JLPrice = cursor.getDouble(cursor.getColumnIndex("JLPrice"));double JLUnit = cursor.getDouble(cursor.getColumnIndex("JLUnit"));String MealID = cursor.getString(cursor.getColumnIndex("MealID"));String MealName = cursor.getString(cursor.getColumnIndex("MealName"));String MState = cursor.getString(cursor.getColumnIndex("MState"));double SellPrice = cursor.getDouble(cursor.getColumnIndex("SellPrice"));String TagID = cursor.getString(cursor.getColumnIndex("TagID"));dishmeal meal=new dishmeal();meal.setForIndex(ForIndex);meal.setImgUrl(ImgUrl);meal.setJLPrice(JLPrice);meal.setJLUnit(JLUnit);meal.setMealID(MealID);meal.setMealName(MealName);meal.setMState(MState);meal.setSellPrice(SellPrice);meal.setTagID(TagID);meallist.add(meal);}} catch (Exception ex) {Logger.d("getmeal Error:" +ex.getMessage());} finally {closeCursor(cursor);}return meallist;}public ResponseBean updatemealimg(String mealid,String imgpath) {Cursor cursor = null;ResponseBean res = new ResponseBean();res.setSucceed(false);try {if (mDBHelper == null) {res.setData("未初始化 mDBHelper");return res;}//存在该菜品,则修改mDatabase = mDBHelper.getWritableDatabase();ContentValues cv = new ContentValues();cv.put("ImgUrl", imgpath);cv.put("MealID", mealid);//参数依次是表名,修改后的值,where条件,以及约束,如果不指定三四两个参数,会更改所有行int rowId = mDatabase.update("meals", cv, "MealID = ?", new String[]{mealid});Logger.d("update meal rowId:" + rowId);if (rowId < 0) {res.setData("更新失败," + rowId);closeCursor(cursor);//return res;} else {res.setSucceed(true);res.setData("更新数据成功");closeCursor(cursor);//return res;}} catch (Exception ex) {res.setData("出错了," + ex.getMessage());//closeCursor(cursor);} finally {closeCursor(cursor);}return res;}}

三、简单调用

  DBManager.getInstance().init(context);List<String> qmlst=new ArrayList<>();qmlst.add("2146");List<dishmeal> mlst = DBManager.getInstance().getmeal(qmlst);

相关文章:

  • Java集合框架--LIST,ArrayList,LinkedList
  • 笔记-系统规划与管理师-案例题-2022年-IT服务部署实施
  • 第三十一章:docker如何部署Nexus
  • 搭建Windows环境下的Redis服务与TinyRDM客户端
  • libcurl 库curl_easy_setopt()函数CURLOPT_WRITEDATA和CURLOPT_BUFFERSIZE选项
  • git 落后主分支提交
  • 2.2 python基础知识复习——python面向对象的原理和代码详解
  • web 3D可视化技术
  • 【TB作品】TM1637芯片数码管,PIC16单片机驱动显示,Proteus仿真
  • leetcode860:柠檬水找零
  • 基于51单片机设计的简易直流电机调测速系统(可用在普中开发板)——程序源码设计文档演示视频等(文末工程资料下载)
  • .NET_WebForm_layui控件使用及与webform联合使用
  • Nginx: 配置项之http模块connection和request的用法以及limit_conn和limit_req模块
  • vscode 阅读linux内核(vscode+clangd)
  • mybatisplus 通过xml 定义接口
  • .pyc 想到的一些问题
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • CEF与代理
  • chrome扩展demo1-小时钟
  • css系列之关于字体的事
  • Java的Interrupt与线程中断
  • Java知识点总结(JavaIO-打印流)
  • JSDuck 与 AngularJS 融合技巧
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • k个最大的数及变种小结
  • Laravel5.4 Queues队列学习
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vue--为什么data属性必须是一个函数
  • 构建工具 - 收藏集 - 掘金
  • 马上搞懂 GeoJSON
  • 项目实战-Api的解决方案
  • 正则与JS中的正则
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • UI设计初学者应该如何入门?
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​iOS安全加固方法及实现
  • ​插件化DPI在商用WIFI中的价值
  • ​什么是bug?bug的源头在哪里?
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • ​虚拟化系列介绍(十)
  • #{} 和 ${}区别
  • #微信小程序:微信小程序常见的配置传旨
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (js)循环条件满足时终止循环
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (poj1.3.2)1791(构造法模拟)
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (待修改)PyG安装步骤
  • (第二周)效能测试
  • (二)测试工具
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (理论篇)httpmoudle和httphandler一览
  • (力扣记录)235. 二叉搜索树的最近公共祖先