tejariapp-new-logotejariapp-new-logotejariapp-new-logotejariapp-new-logo
  • صفحه اصلی
  • پروژه ها
    • پروژه طراحی سایت
    • پروژه های اندروید
    • پروژه های تحت ویندوز
    • UI & UX
    • ربات تلگرام
  • سفارش پروژه
    • انجام پروژه اندروید (Android)
    • طراحی و ساخت اپلیکیشن موبایل
    • انجام پروژه طراحی سایت با php
    • انجام پروژه طراحی سایت با Asp.net
    • انجام پروژه سی شارپ
    • فرم سفارش پروژه
  • مدرسه ی تجاری اپ
    • طراحی سایت
    • اندروید
    • سی شارپ
    • آموزش پایگاه داده
    • برنامه های کاربردی
  • لینک های مفید
    • پرداخت آنلاین
    • درباره تجاری اپ
    • تماس با ما
استخدام برنامه نویس متلب
سفارش پروژه
✕
            هیچ نتیجه ای یافت نشدمشاهده همه نتایج

            سورس کد فریم ورک های دیتابیس اندروید

            • صفحه نخست
            • مدرسه ی تجاری اپ آموزش اندروید
            • سورس کد فریم ورک های دیتابیس اندروید
            mvvmlogo
            آموزش الگوی MVVM و RxJava به صورت پروژه محور + سورس کد
            18 آبان 1396
            telegrambotlogo
            سورس کد ربات تلگرام با سی شارپ
            27 آبان 1396
            منتشر شده توسط مهندس داودی

            greenlogo

            فریم ورک های بسیاری در زمینه دیتابیس اندروید ارائه شده که هرکدام مزیت ها وکمبود های خاص خود را دارند و این به عهده برنامه نویس است که با شناسایی نیاز های خود بتواند بهترین را برگزیند و استفاده کند.

            درادامه سورس کد ۴ فریم ورک رایج دیتابیس را به شما عزیزان ارائه خواهیم داد تا بتوانید یک دید کلی برروی آنها داشته باشید و قدرت انتخاب بالاتری داشته باشید.

            سورس کد فریم ورک ها و انجین های دیتابیس اندروید

            ما برای ۴ کتابخانه دیتابیس REALM ,SQLite ,SUGAR ORM ,GREEDAO سورس کد شامل ۴ دستور اصلی SELECT , READ , INSERT , UPDATE تهیه و به شما عزیزان ارائه کردیم

            برای دانلود سورس کد میتونید به کانال تلگرام ما مراجعه کنید

            SQLite

            تعریفی که SQLite از خود دارد

            SQLite is a self-contained, high-reliability, embedded, full-featured, public-domain, SQL database engine. SQLite is the most useddatabase engine in the world

            یک انجین پایگاه داده بسیار کاربردی و محبوب بین برنامه نویسان که از ویژگی های گفته شده : مستق , مطمئن, تعبیه شده , کامل از آپشن های مورد نیاز و عمومی است

            که همانطور که از نامش مشخص است با دستورات SQL که به صورت String نوشته میشود کار میکند و همین امر مشخص کننده این است که ک نمیتوان متوجه خطاهایی دستور نوشته شده شد

            .

            چون کامپایل نمیشود پس باید آشنایی لازم با دستورات SQL داشته باشید تا در سینتکس دستورات دچار اشتباه نشوید.

            برای شروع کار باید یک بانک داده SQLite با استفاده از ابزارهای مختلفی مثل sqlite manager که به عنوان افزونه یا plugin برای کروم و فایرفاکس ارائه شده و یا ابزار سیستمی navicat که امکان مدیریت ارتباطات بین جداول را به شما میدهد , با هر تعداد جدول مورد نیاز ایجاد کنید(ما در این آموزش تنها یک جدول Person با فیلد Name ,ID داریم) و به فولدر databases در فولدر assests اضافه کنید

            sqlite

            sqlite

            برای ایجاد فولدر assests هم تنها کافی ست برروی ماژول app کلیک راست کرده و New/ Folder / Assest Folder رو انتخاب کنید.

            برای اضافه کردن این کتابخانه به پروژه کافی ست خط زیر را به گریدل پروژه اضافه کنید
            compile 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
            

            سپس یک کلاس برای اتصال به دیتابیس که مشخص کننده نام و ورژن دیتابیس هست ایجاد کنید به صورت زیر

            package com.tejariapp.sqlite;
            
            import android.content.Context;
            
            import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
            
            public class DatabaseOpenHelper extends SQLiteAssetHelper {
            private static final String DATABASE_NAME = "Persondb.db";
            private static final int DATABASE_VERSION = 1;
            
            public DatabaseOpenHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            }
            }
            

             

            .

            و سپس یک کلاس دیگر برای ایجاد دستورات و کوئری های بانک

            package com.tejariapp.sqlite;
            
            import android.content.Context;
            import android.database.Cursor;
            import android.database.sqlite.SQLiteDatabase;
            import android.database.sqlite.SQLiteOpenHelper;
            import android.nfc.tech.NfcA;
            import android.util.Log;
            
            import java.util.ArrayList;
            
            public class DatabaseAccess {
            private SQLiteOpenHelper openHelper;
            private SQLiteDatabase database;
            private static DatabaseAccess instance;
            
            /**
            * Private constructor to aboid
            * object creation from outside classes.
            *
            * @param context
            */
            private DatabaseAccess(Context context) {
            this.openHelper = new DatabaseOpenHelper(context);
            }
            
            /**
            * Return a singleton instance of DatabaseAccess.
            *
            * @param context the Context
            * @return the instance of DabaseAccess
            */
            public static DatabaseAccess getInstance(Context context) {
            if (instance == null) {
            instance = new DatabaseAccess(context);
            }
            return instance;
            }
            
            /**
            * Open the database connection.
            */
            public void open() {
            this.database = openHelper.getWritableDatabase();
            }
            
            /**
            * Close the database connection.
            */
            public void close() {
            if (database != null) {
            this.database.close();
            }
            }
            
            /**
            * Read all person from the database.
            *
            * @return a List of persons
            */
            public ArrayList<Person> getAllPersons() {
            ArrayList<Person> persons = new ArrayList<>();
            Cursor cursor = database.rawQuery("SELECT * FROM Person "
            , null);
            cursor.moveToFirst();
            while (!cursor.isAfterLast()) {
            persons.add(new Person(cursor.getInt(
            cursor.getColumnIndex("ID"))
            , cursor.getString(
            cursor.getColumnIndex("Name"))));
            cursor.moveToNext();
            }
            cursor.close();
            return persons;
            }
            
            /**
            * Insert record into Person
            *
            * @return a boolean value base of inserting or not
            */
            public Person insertSQLite(String name) {
            Person person = null;
            try {
            database.execSQL("INSERT INTO Person(Name) VALUES('"
            + name + "')");
            Cursor cursor = database
            .rawQuery("SELECT * FROM " +
            "Person ORDER BY ID DESC LIMIT 1"
            , null);
            if (cursor.moveToFirst())
            person = new Person(cursor.getInt(
            cursor.getColumnIndex("ID"))
            , cursor.getString(
            cursor.getColumnIndex("Name")));
            } catch (Exception e) {
            Log.e("insert SQLite bug", e.toString());
            person = null;
            }
            return person;
            }
            
            /**
            * Update record into Person
            *
            * @return a boolean value base of updating or not
            */
            public boolean updateSQLite(String name, int id) {
            try {
            database.execSQL("UPDATE Person SET Name='"
            + name + "' WHERE ID=" + id);
            return true;
            } catch (Exception e) {
            Log.e("update SQLite bug", e.toString());
            return false;
            }
            }
            
            /**
            * Delete record from Person
            *
            * @return a boolean value base of deleting or not
            */
            public boolean deleteSQLite(int id) {
            try {
            database.execSQL("DELETE FROM Person WHERE ID=" + id);
            return true;
            } catch (Exception e) {
            Log.e("delete SQLite bug", e.toString());
            return false;
            }
            }
            }
            
            
            حالا خیلی راحت میتونیم از کلاس فوق برای دسترسی به اطلاعات بانک استفاده کنیم بدین صورت

             

            
            /*
            *  insert a record in database
            */
            private void insertSQLite() {
            String newName = nameEditText.getText().toString().trim();
            if (!newName.isEmpty()) {
            DatabaseAccess databaseAccess =
            DatabaseAccess.getInstance(this);
            databaseAccess.open();
            Person person = databaseAccess.insertSQLite(newName);
            if (person != null) {
            personsList.add(person);
            customAdapter.notifyItemInserted(
            personsList.size() - 1);
            }
            databaseAccess.close();
            }
            }
            
            /*
            *  update a record in database by id of that
            */
            private void updateSQLite() {
            String newName = nameEditText.getText()
            .toString().trim();
            if (!newName.isEmpty()) {
            DatabaseAccess databaseAccess =
            DatabaseAccess.getInstance(this);
            databaseAccess.open();
            Person person=personsList.get(position);
            if (databaseAccess.updateSQLite(
            newName,person.getId())){
            person.setName(newName);
            personsList.set(position,person);
            customAdapter.notifyItemChanged(position);
            }
            databaseAccess.close();
            position=-1;
            }
            }
            
            /*
            *  delete record from database
            */
            private void deleteSQLite() {
            DatabaseAccess databaseAccess=
            DatabaseAccess.getInstance(this);
            databaseAccess.open();
            if (databaseAccess.deleteSQLite(
            personsList.get(position).getId())){
            personsList.remove(position);
            customAdapter.notifyDataSetChanged();
            }
            position=-1;
            databaseAccess.close();
            }
            
            /*
            *  read all database records
            */
            private void readSQLite() {
            DatabaseAccess databaseAccess =
            DatabaseAccess.getInstance(this);
            databaseAccess.open();
            personsList = databaseAccess.getAllPersons();
            databaseAccess.close();
            
            for (Person person : personsList)
            Log.d("person info", person.getName());
            }
            

            برای دانلود سورس آموزش SQLiet به کانال تلگرام ما مراجعه کنید.

            Sugar ORM

            فریم ورک Sugar orm از نوع ORM هاست پس بهتره قبل از پرداختن به این فریم ورک کاربردی دیتابیس , مفهوم ORM یا Object-relational mapping رو متوجه بشیم !

            به نقل از wikipedia

            Object-relational mapping (ORM, O/RM, and O/R mapping tool) in computer science is a programming technique for converting data between incompatible type systems using object-oriented programming languages. This creates, in effect, a “virtual object database” that can be used from within the programming language.

            به عبارتی ORM یک تکنیک برنامه نویسی است که برای ذخیره و بازیابی اطلاعات به صورت کاملا شی گرایی است بدین معنی که دیگر نیازی به دستورات SQL نیست و تنها کافی است با زبان شی گرایی با بانک مجازی ایجاد شده صحبت کنیم 😀

            .

            حالا که با مفهوم ORM آشنا شدیم میشه حدس زد که فریم ورک هایی که از ORM پشتیبانی میکنند مثل Sugar ORM و دیگر فریم ورک ها که در ادامه آشنا میشیم , چه ویژگی دارند که باعث برتری آنها شده و اون دسترسی به اطلاعات بانک بصورت کاملا شی گرایی ست.

            نکات مثبت فریم ورک Sugar orm را میتوان چنین نام برد

            • سادگی و دستورات ساده فارغ از پیچیدگی ها
            • حجم پایین 
            • قابلیت پشتیبانی از دستورات SQL برای دستورات خاص که ممکن است با دستورات Sugar orm پیاده سازی نشودندیا مشکل باشند مثل joinهای تو درتو
            • مدیریت ساده ارتباطات بین جداول

            قبل از شروع پروژه وابستگی Sugar orm رو به گردل اضافه میکنیم

            compile 'com.github.satyan:sugar:1.5'
            

             

            تنظیمات manifest

            قبل از شروع به ایجاد جدول و مدل سازی باید یک سری تنظیمات برای ایجاد بانک به manifest در تگ application اضافه کنیم 

            <application
            ...>
            <meta-data
            android:name="DATABASE"
            android:value="testdb.db" />
            <meta-data
            android:name="VERSION"
            android:value="16" />
            <meta-data
            android:name="QUERY_LOG"
            android:value="true" />
            <meta-data
            android:name="DOMAIN_PACKAGE_NAME"
            android:value="com.tejariapp.sugarorm" />
            
            </application>
            

             

            حالا باید بریم سراغ Model پروژه

            توی قسمت SQLite ما ابتدا یک بانک SQLite ایجاد کردیم که مدل ما معرفی میشد.

            اما در Sugar ORM ما گفتیم که همه چیز شی گرایی ست! پس Model ماهم یک کلاس خواهد بود

            پس برای هر جدول باید یک کلاس ایجاد کنیم که از کلاس SugarRecord پشتیبانی میکنند

            package com.tejariapp.sugarorm;
            
            import android.support.annotation.Size;
            
            import com.orm.SugarRecord;
            
            import java.util.List;
            
            /**
            * Created by Marjan on 04/11/2017.
            */
            
            public class Person extends SugarRecord {
            
            String Name;
            
            public Person(){}
            
            public Person(String name){
            this.Name=name;
            }
            
            public String getName() {
            return Name;
            }
            
            public void setName(String name) {
            this.Name = name;
            }
            }
            

            همانطور ک مشخص است یک کلاس ساده با getter , setter است اما درصورت نیاز میتونید از انوتیشن های @NotNull و @Uniq استفاده کنید.

            .

            حالا خیلی راحت میتونیم با دستورات زیر به اطلاعات درون بانک دسترسی پیدا کنیم

            /*
            *  insert a record in database
            */
            private void insertSugarORM() {
            String name = nameEditText.getText().toString();
            
            try {
            Person person = new Person();
            person.setName(name);
            person.save();
            personsList.add(person);
            customAdapter.notifyItemInserted(
            personsList.size() - 1);
            } catch (Exception e) {
            Log.e("e", e.toString());
            }
            
            nameEditText.setText("");
            }
            
            /*
            * read all object from database
            */
            private void readSugarORM() {
            personsList = Person.listAll(Person.class);
            for (Person person : personsList)
            Log.e("person", String.valueOf(
            person.getId()) + person.getName());
            }
            
            /*
            * delete a record by position in list
            */
            private void deleteSugarORM() {
            Person person = Person.findById(
            Person.class, personsList.get(position).getId());
            person.delete();
            personsList.remove(position);
            customAdapter.notifyDataSetChanged();
            
            position = -1;
            nameEditText.setText("");
            }
            
            /*
            * update a record in database
            */
            private void updateSugarORM() {
            String newName = nameEditText.getText().toString().trim();
            
            if (position -1 && !newName.isEmpty()) {
            
            Person person = personsList.get(position);
            person.setName(newName);
            person.save();
            
            personsList.set(position, person);
            customAdapter.notifyItemChanged(position);
            
            position = -1;
            nameEditText.setText("");
            }
            }
            
            

            درصورتی هم یک نیاز به داشتن یک بانک پبشفرض در اپلیکیشن بود میتونید یک دیتابیس رو با استفاده از ابزارهای SQLite که در بخش قبل صحبت کردیم ایجاد کنید به فولدر assets اضافه کنید

            .

            و بعد کلاس زیر را به پروژه خود اضافه کنید که وظیفه انتقال دیتابیس از SQLite به فریم ورک های ORM رادارد

            package com.tejariapp.sugarorm;
            
            import android.content.Context;
            import android.database.SQLException;
            import android.database.sqlite.SQLiteDatabase;
            import android.database.sqlite.SQLiteOpenHelper;
            import android.util.Log;
            
            import java.io.File;
            import java.io.FileOutputStream;
            import java.io.IOException;
            import java.io.InputStream;
            import java.io.OutputStream;
            
            /**
            * Created by Marjan on 06/11/2017.
            */
            
            public class DataBaseHelper extends SQLiteOpenHelper {
            
            //The Android's default system path of your application database.
            private static String DB_PATH =
            "/data/data/com.tejariapp.sugarorm/databases/";
            
            private static String DB_NAME = "testdb.db";
            
            private SQLiteDatabase myDataBase;
            
            private final Context myContext;
            
            /**
            * Constructor
            * Takes and keeps a reference of the passed context
            * in order to access to the application assets and resources.
            *
            * @param context
            */
            public DataBaseHelper(Context context) {
            
            super(context, DB_NAME, null, 1);
            this.myContext = context;
            }
            
            /**
            * Creates a empty database on the system and
            * rewrites it with your own database.
            * */
            public void createDataBase() throws IOException {
            
            boolean dbExist = checkDataBase();
            
            if(dbExist){
            //do nothing - database already exist
            }else{
            
            //By calling this method and empty database will be created into the default system path
            //of your application so we are gonna be able to overwrite that database with our database.
            this.getReadableDatabase();
            
            try {
            copyDataBase();
            
            } catch (IOException e) {
            
            Log.e("copy error",e.toString());
            
            }
            }
            
            }
            
            /**
            * Check if the database already exist to avoid
            * re-copying the file each time you open the application.
            *
            * @return true if it exists, false if it doesn't
            */
            private boolean checkDataBase(){
            
            File dbFile = myContext.getDatabasePath(DB_NAME);
            return dbFile.exists();
            }
            
            /**
            * Copies your database from your local
            * assets-folder to the just created empty database in the
            *
            * system folder, from where it can be accessed and handled.
            * This is done by transfering bytestream.
            * */
            private void copyDataBase() throws IOException{
            
            //Open your local db as the input stream
            InputStream myInput = myContext.getAssets().open(DB_NAME);
            
            // Path to the just created empty db
            String outFileName = myContext.getDatabasePath(DB_NAME).getPath();
            
            //Open the empty db as the output stream
            OutputStream myOutput = new FileOutputStream(outFileName);
            
            //transfer bytes from the inputfile to the outputfile
            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer))>0){
            myOutput.write(buffer, 0, length);
            }
            
            //Close the streams
            myOutput.flush();
            myOutput.close();
            myInput.close();
            
            }
            
            public void openDataBase() throws SQLException {
            
            //Open the database
            String myPath = myContext
            .getDatabasePath(DB_NAME).getPath();
            myDataBase = SQLiteDatabase.openDatabase(
            myPath, null, SQLiteDatabase.OPEN_READONLY);
            
            }
            
            @Override
            public synchronized void close() {
            
            if(myDataBase != null)
            myDataBase.close();
            
            super.close();
            
            }
            
            @Override
            public void onCreate(SQLiteDatabase db) {
            
            }
            
            @Override
            public void onUpgrade(SQLiteDatabase db,
            int oldVersion, int newVersion) {
            
            }
            
            // Add your public helper methods to
            // access and get content from the database.
            // You could return cursors by doing
            // "return myDataBase.query(....)" so it'd be easy
            // to you to create adapters for your views.
            
            }
            

            .

            و سپس تکه کد زیر که برای اجرای کلاس فوق است را در MainActivity خود یا کلاسی که از Application ارث بری میکند (چون حتما باید اجرا شود) قرار دهید

            /*
            *  if you have a database and you want to load it by default in app
            */
            DataBaseHelper myDB;
            myDB = new DataBaseHelper(getApplicationContext());
            
            try {
            myDB.createDataBase();
            }
            catch(IOException e)
            {
            // do nothing
            }
            

            برای دانلود سورس آموزش Sugar ORM به کانال تلگرام ما مراجعه کنید.

             Realm

            فریم ورک Realm هم یک ORM دیگست !

            پس یعنی کاملا شی گرایی رو پشتیبانی میکنه و آپشن های Sugar orm رو داره که البته تا حدودی پیشرفته تر  با اپشن های بیشتر و پیچیده تر  ارائه شده.

            خب بدون معطلی میریم سراغ دستورات و ساختار فریم ورک Realm 

            قبل از هرچیز باید به گردل اضافه ش کنیم پس برای اینکار ابتدا (build.gradle(project: Realm رو کلیک میکنیم و پلاگین زیر رو به dependencies بدین صورت اضافه میکنیم

            buildscript {
            repositories {
            ...
            }
            dependencies {
            ...
            classpath "io.realm:realm-gradle-plugin:4.1.1"
            }
            }
            
            و سپس در (build.gradle(Module: app هم پلاگین Realm رو ابتدای کدها اضافه میکنم

             

            
            apply plugin: 'com.android.application'
            apply plugin: 'realm-android' //add this
            

            حالا میتونیم مدل یا جدول دیتابیس رو بصورت کلاس زیر اضافه کنیم

            package com.tejariapp.realm;
            
            import io.realm.RealmObject;
            import io.realm.annotations.PrimaryKey;
            
            /**
            * Created by Marjan on 01/11/2017.
            */
            
            public class Person extends RealmObject {
            
            @PrimaryKey
            private int id;
            private String name;
            
            public Person(){}
            public Person(int id,String name){
            this.id=id;
            this.name=name;
            }
            
            public int getId() {
            return id;
            }
            
            public String getName() {
            return name;
            }
            
            public void setId(int id) {
            this.id = id;
            }
            
            public void setName(String name) {
            this.name = name;
            }
            }
            

             

            .

            قبل از نوشتن متد های read , delete , update , insert برای کلاس Realm باید ابجکتی از نوع Realm ایجاد و مقداردهی کنیم تا برای اعمال این فانکشن ها از آن استفاده کنیم.

            پس در onCreate اکتیویتی یا فرگمنت این کار رو انجام میدیم

            Realm realm;
            
            @Override
            protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            //bind butter knife
            ButterKnife.bind(this);
            
            //initialize realm object
            Realm.init(this);
            realm = Realm.getDefaultInstance();
            
            //read all Person table records for show in list view
            realmRead();
            
            customAdapter = new CustomAdapter(personsList, this);
            recyclerView.setLayoutManager(new
            LinearLayoutManager(this));
            recyclerView.setAdapter(customAdapter);
            }
            

            همانطور که مشخصه ما از کتابخانه ButterKnife برای درسترسی ساده تر به viewها در سورس کدها استفاده کردیم که برای آموزش کامل این کتابخانه میتوانید به پست مربوط “همه چیز درباره کتابخانه ButterKnife” مراجعه کنید.

            و دستورات دسترسی و ویرایش اطلاعات بانک

            در جداولی که در فریم ورک Realm ایجاد میکنیم آپشن identity برای فیلد ID جداول وجود ندارد و این امر باعث میشود که ما به صورت دستی id هارو وارد کنیم

            که برای این کار هم ما یک متد ایجاد کردیم که بزرگترین id موجود جدول را پیدا میکند و یک واحد بزرگتر از آن را به ما برمیگرداند.

            /*
            * create a id base of maximum id in database
            */
            public int getNextKey() {
            try {
            Number number = realm.where(Person.class).max("id");
            if (number != null) {
            return number.intValue() + 1;
            } else {
            return 0;
            }
            } catch (ArrayIndexOutOfBoundsException e) {
            return 0;
            }
            }
            
            /*
            *  insert a record in database
            */
            private void realmInsert() {
            String name = nameEditText.getText()
            
            .toString().trim();
            if (!name.isEmpty()) {
            realm.beginTransaction();
            
            Person person = realm.createObject(
            Person.class, getNextKey());
            person.setName(name);
            
            realm.commitTransaction();
            }
            nameEditText.setText("");
            }
            
            /*
            * read all object from database
            */
            private void realmRead() {
            // list=new ArrayList<>();
            personsList = realm.where(Person.class)
            .findAllSorted("id", Sort.ASCENDING);
            //list.addAll(realm.copyFromRealm(personsList));
            for (Person student : personsList) {
            Log.e("students", String.valueOf(
            student.getId() + " " + student.getName()));
            }
            }
            
            /*
            * delete a record by position in list
            */
            private void realmDelete() {
            if (position > -1) {
            realm.beginTransaction();
            
            Person person = personsList.get(position);
            person.deleteFromRealm();
            
            realm.commitTransaction();
            nameEditText.setText("");
            position = -1;
            }
            
            }
            
            /*
            * update a record in database
            */
            private void realmUpdate() {
            String newName = nameEditText.
            getText().toString().trim();
            
            if (position > -1 && !newName.isEmpty()) {
            realm.beginTransaction();
            
            Person person = personsList.get(position);
            person.setName(newName);
            
            realm.commitTransaction();
            position = -1;
            nameEditText.setText("");
            }
            }
            

            برای دانلود سورس آموزش Realm به کانال تلگرام ما مراجعه کنید.

             GreenDAO

            فریم ورک GreenDao پرسرعت ترین و پیشرفته ترین فریم ورک دیتابیس ORM است که ارائه شده.

            با استفاده از فریم ورک GreenDAO شما قادر به ذخیره و بازیابی چندین هزار رکورد در چند ثانیه خواهید بود و این خیلی خوبه!

            میتوان گفت فریم ورک GreenDAO برای افراد مبتدی چندان مناسب نیست چون بهتر است با مسائل multi threading و rx و.. تا حدودی آشنایی داشته باشند.

            نکته قابل توجه فریم ورک GreenDAO این است که با وجود امکاناتی که به صورت کامل و جامع به شما ارائه میده حجم بسیار کمی نیز به اپ شما اضا فه میکن درحد چندکیلو بایت.

            .

            برای استفاده از فریم ورک پرسرعت GreenDAO نیز مثل فریم ورک های قبل باید ابتدا وابستگی آن را به گردل اضافه کرد

            ابتدا در (build.gradle(Module:app عبارت زیر را اضافه میکنیم

            compile 'org.greenrobot:greendao:3.2.0'
            

            سپس در (build.gradle(Prioject:greendaoapp نیز پلاگین را اضافه میکنیم

            buildscript {
            repositories {
            ...
            }
            dependencies {
            ...
            classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
            }
            }
            

            حالا باید یک Module دیگر مبنی بر GreenDao Generator  که برای تعریف ساختار بانک ما خواهد بدین صورت ایجاد میکنیم

            greendao1

            greendao1

            و سپس با انتخاب Android Library و انتخاب نام ماژول را ایجاد میکنم

            حالا خواهید دید که پروژه شما دو ماژول app , greendaogenerator دارد.

            greendao-app-creating-module

            greendao-app-creating-module

            حال در فایل گردل ماژول جدید هم باید greendao رو معرفی کنیم پس 

            apply plugin: 'java'
            
            dependencies {
            compile fileTree(dir: 'libs', include: ['*.jar'])
            compile 'org.greenrobot:greendao-generator:3.2.0'
            }
            
            sourceCompatibility = "1.7"
            targetCompatibility = "1.7"
            

            خب حالا باید درون کلاسی که با نام MyGenerator ایجاد کردیم برای ایجاد کلاسی که به عنوان جدول ما شناخانه میشود بدین صورت کد نویسی کنیم

            .

             

            
            package com.example;
            
            import org.greenrobot.greendao.generator.DaoGenerator;
            import org.greenrobot.greendao.generator.Entity;
            import org.greenrobot.greendao.generator.Property;
            import org.greenrobot.greendao.generator.Schema;
            
            public class MyGenerator {
            public static void main(String[] args) {
            // Your app package name and the (.db)
            // is the folder where the DAO files will be generated into.
            Schema schema = new Schema(1, "com.tejariapp.greendao.db");
            schema.enableKeepSectionsByDefault();
            
            addTables(schema);
            
            try {
            new DaoGenerator().generateAll(schema, "./app/src/main/java");
            } catch (Exception e) {
            e.printStackTrace();
            }
            }
            
            private static void addTables(final Schema schema) {
            addUserEntities(schema);
            
            }
            
            // This is use to describe the colums of your table
            private static Entity addUserEntities(final Schema schema) {
            Entity user = schema.addEntity("User");
            user.addIdProperty().primaryKey().autoincrement();
            user.addStringProperty("first_name");
            return user;
            }
            
            }
            
            

            خب همونطور که مشخصه باید هنگام تعریف schema نام پکیج خود به علاوه .db قرار دهید تا کلاس های دیتابیس درون آن مسیر ذخیره شوند

            حالا با run کردن generator خواهید دید که کلاس User برای شما Generate میشود با فیلدهایی که مشخص کردید و خصیصه هایی که برای آنها در نظر گرفتید

            *در صورت نیاز به تغییر هم میتوانید تغییرات را اعمال کنید و ورژن دیتابیس را یک واحد بالا ببرید و دوباره run کنید*

            پس بدین صورت کلاس MyGenerate را run کنید

            greendao2

            greendao2

            درصورت اجرا شدن کامل و بدون اشکال خواهید دید که کلاس های مربوطه در ماژول app ایجاد شده اند

             

            greendao3

            greendao3

            حالا باید یک کلاس مشتق شده از Application در ماژول app ایجاد کنیم تادستورات ایجاد بانک را از طریق این کلاس ایجاد کنیم و دلیل این کار هم این است که میخواهیم حتما و تنها یکبار  این دستورات اجرا شوند.

            package com.tejariapp.greendao;
            
            import android.app.Application;
            
            import com.tejariapp.greendao.db.DaoMaster;
            import com.tejariapp.greendao.db.DaoSession;
            
            import org.greenrobot.greendao.database.Database;
            
            /**
            * Created by Marjan on 07/11/2017.
            */
            
            public class AppController extends Application {
            public static final boolean ENCRYPTED = true;
            private DaoSession daoSession;
            
            @Override
            public void onCreate() {
            super.onCreate();
            
            //The users-db here is the name of our database.
            DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(
            this,"users-db");
            Database db = helper.getWritableDb();
            daoSession = new DaoMaster(db).newSession();
            
            ///// Using the below lines of code we can toggle ENCRYPTED
            /// to true or false in other to use either an encrypted database or not.
            //      DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper
            // (this, ENCRYPTED ? "users-db-encrypted" : "users-db");
            
            //      Database db = ENCRYPTED ? helper.getEncryptedWritableDb
            // ("super-secret") : helper.getWritableDb();
            
            //      daoSession = new DaoMaster(db).newSession();
            }
            
            public DaoSession getDaoSession() {
            return daoSession;
            }
            }
            

            مشخصا عملیات رمزگذاری و رمزگشایی هم میتونیم برای بالا بردن امنیت بانک خود داشته باشیم و greenDAO کاملا از این عملیات پشتیبانی میکند.

            .

            user-db هم نام دیتابیس ما تعیین شده  و همچنین در manifest باید این کلاس را در application به صورت زیر قراردارد.

            <application
            android:name=".AppController"
            ...
            >
            </application>
            

            حال قبل از نوشتن متد های دسترسی و ویرایش اطلاعات بانک باید یک سری آبجکت را درون onCreate اکتیویتی مقداردهی کنیم پس

            DaoMaster.DevOpenHelper helper;
            SQLiteDatabase db;
            DaoMaster daoMaster;
            DaoSession daoSession;
            UserDao userDao;
            
            @BindView(R.id.nameEditText)
            EditText nameEditText;
            @BindView(R.id.nameRecyclerView)
            RecyclerView recyclerView;
            
            CustomAdapter customAdapter;
            
            ArrayList personsList=new ArrayList();
            
            int position = -1;
            
            @Override
            protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            ButterKnife.bind(this);
            
            helper = new DaoMaster.DevOpenHelper(this, "users-db", null);
            db = helper.getWritableDatabase();
            daoMaster = new DaoMaster(db);
            daoSession = daoMaster.newSession();
            daoSession = daoMaster.newSession();
            userDao = daoSession.getUserDao();
            
            QueryBuilder.LOG_SQL = true;
            QueryBuilder.LOG_VALUES = true;
            
            ButterKnife.bind(this);
            readDAO();
            
            customAdapter = new CustomAdapter(personsList, this);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.setAdapter(customAdapter);
            }
            

            حالا میتونیم با استفاده از ابجکت های تعریف شده فوق متدهای insert , delete ,update , read را بدین صورت بنویسیم

             

            /*
            * insert in database
            */
            private void insertDAO() {
            String newName=nameEditText.getText()
            .toString().trim();
            if (!newName.isEmpty()) {
            User person = new User();
            person.setFirst_name(newName);
            userDao.insertOrReplace(person);
            personsList.add(person);
            customAdapter.notifyItemInserted(
            personsList.size() - 1);
            }
            }
            
            /*
            * read all from database
            */
            private void readDAO() {
            personsList= userDao.queryBuilder()
            .orderAsc(UserDao.Properties.Id)
            .list();
            
            for (User user : personsList)
            Log.e("user", String.valueOf(user.getId()) +
            user.getFirst_name());
            }
            
            /*
            * update special record in database
            */
            private void updateDAO() {
            String newName=nameEditText.getText().toString().trim();
            if (!newName.isEmpty() && position >-1) {
            User user = userDao.queryBuilder()
            .where(UserDao.Properties.Id.eq(
            personsList.get(position)
            .getId())).limit(1).unique();
            user.setFirst_name(newName);
            userDao.insertOrReplace(user);
            personsList.set(position, user);
            customAdapter.notifyItemChanged(position);
            position=-1;
            }
            }
            
            /*
            * delete a record base of id
            */
            private void deleteDAO() {
            if (position >-1) {
            User user = userDao.queryBuilder().where(
            UserDao.Properties.Id.eq(
            personsList.get(position).getId())).limit(1).unique();
            userDao.delete(user);
            personsList.remove(position);
            customAdapter.notifyDataSetChanged();
            position=-1;
            }
            }
            

            برای دانلود سورس آموزش GreenDAO به کانال تلگرام ما مراجعه کنید.

            موفق و پیروز باشید 🙂

             

            اشتراک گذاری

            پست های مرتبط

            دستورات جریان کنترل (Control flow statements) یا دستورات شرطی و حلقه ها در زبان برنامه نویسی دارت Dart

            دستورات جریان کنترل (Control flow statements) یا دستورات شرطی و حلقه ها در زبان برنامه نویسی دارت Dart

            30 بهمن 1400

            دستورات شرطی و حلقه ها در زبان برنامه نویسی دارت (Dart)


            ادامه مطلب
            آموزش عملگرها یا Operator ها در زبان برنامه نویسی دارت یا Dart

            آموزش عملگرها یا Operator ها در زبان برنامه نویسی دارت یا Dart

            30 بهمن 1400

            آموزش عملگرها یا Operator ها در زبان برنامه نویسی دارت (Dart)


            ادامه مطلب
            توابع در زبان برنامه نویسی دارت (Dart)

            توابع در زبان برنامه نویسی دارت (Dart)

            27 بهمن 1400

            توابع در زبان برنامه نویسی دارت (Dart)


            ادامه مطلب

            Comments are closed.

            ساخت اپلیکیشن های موبایل

            • ساخت اپلیکیشن فروشگاهی
            • ساخت اپلیکشن ابزاری و خدماتی
            • ساخت اپلیکیشن آموزشی
            • و هزاران موضوع دیگر

             
            کلیک کنید

            آخرین دیدگاه ها

            • 9 اسفند 1401

              مهری اصغری نظر در پیاده سازی اولین پروژه با فلاتر Flutter

            • 26 آبان 1401

              سجاد نظر در پروژه مدیریت سیستم مدرسه با سی شارپ و sql server

            • 7 خرداد 1401

              داودی نظر در آموزش استفاده از ckeditor همراه با آپلود عکس در لاراول 6

            تجاری اپ در شبکه های اجتماعی

            لوگوی تایید پرداخت آنلاین

            2015-2022 © تمامي حقوق مادي و معنوي اين وب سايت نزد تجاری اپ محفوظ بوده و هر گونه کپي برداري از مطالب پيگرد قانوني به همراه دارد! | طراح سایت : ProgRun
            سفارش پروژه
                      هیچ نتیجه ای یافت نشدمشاهده همه نتایج