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);
相关推荐
spencer_tseng14 小时前
Android Studio [Gradle JDK]
android·ide·android studio
KongHen0215 小时前
Android Studio最新版汉化教程(2025年10月17日)
android·ide·android studio
小陈工15 小时前
Python Web开发入门(八):用户认证系统实现,给你的应用加上安全锁
开发语言·前端·数据库·python·安全·django·sqlite
帅得不敢出门19 小时前
Android Studio同一个工程根据不同芯片平台加载不同的framework.jar及使用不同的代码
android·android studio·jar
ggabb1 天前
美国大力投资AI的原因分析
sqlite
huabiangaozhi1 天前
vscode配置django环境并创建django项目(全图文操作)
vscode·django·sqlite
mldlds2 天前
使用 Qt 插件和 SQLCipher 实现 SQLite 数据库加密与解密
数据库·qt·sqlite
码农果果2 天前
android studio 打包aar文件
android studio
用户69371750013842 天前
Android 17 完整更新详解:Beta 3 已达平台稳定,这些新功能值得期待
android·前端·android studio
小驰行动派2 天前
Android Studio中,使用完全免费的Ai来写APP
android·ide·android studio