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 getmeal(List mlst) {
        Cursor cursor = null;
        List 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 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 qmlst=new ArrayList<>();
                qmlst.add("2146");
  List mlst = DBManager.getInstance().getmeal(qmlst);

你可能感兴趣的:(android,studio,android,studio,sqlite)