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 database
            try {
                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 database
            mDatabase.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()});

                //存在数据才返回true
                if (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);
相关推荐
AC使者5 小时前
介绍 TensorFlow 的基本概念和使用场景。
开发语言·自然语言处理·sqlite·github
begei8 小时前
在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
数据库·django·sqlite
AnalogElectronic14 小时前
问题记录,在使用android studio 构建项目时遇到的问题
android·ide·android studio
信阳农夫1 天前
python 3.6.8支持的Django版本是多少?
python·django·sqlite
彬sir哥1 天前
Cannot import to svn: ‘C:\Program‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
svn·android studio
LCY1332 天前
websocket与django
websocket·django·sqlite
九思x2 天前
Android Studio安装配置及运行
android·ide·android studio
B.-2 天前
在 Flutter 中实现文件读写
开发语言·学习·flutter·android studio·xcode
胖虎12 天前
2025 新版Android Studio创建Java语言项目
android·java·android studio·创建java项目
一个处女座的程序猿O(∩_∩)O2 天前
Django+Vue3全栈开发实战:从零搭建博客系统
vue.js·python·django·sqlite