Android рдореЗрдВ Snappy рдХреЗ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

SnappyDB - Android рдХреЗ рд▓рд┐рдП NoSQL рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ NoSQL рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ( рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг ) рддреЛ рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ ред
рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ Snappy SQLite рд╕реЗ рддреЗрдЬ рд╣реИ:

рдЫрд╡рд┐

рддреЛ, рдЪрд▓реЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ build.gradle рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЕрдм, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП, рд╕реАрдзреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдиреИрдкреАрдбреАрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЙрдиреНрд╣реЗрдВ рдмрдЪрд╛рдПрдВ рдФрд░ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЫреЛрдЯрд╛ рдорд╛рд░реНрдХрдЕрдк рдмрдирд╛рдПрдВ:

implementation 'com.snappydb:snappydb-lib:0.5.2'
implementation 'com.esotericsoftware.kryo:kryo:2.24.0'





<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/filmNameTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="25sp"
        android:layout_centerInParent="true"
        android:layout_margin="8dp"
        />

    <TextView
        android:id="@+id/filmBudgetTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="25sp"
        android:layout_below="@+id/filmNameTextView"
        android:layout_margin="8dp"
        />

    <TextView
        android:id="@+id/genreTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="25sp"
        android:layout_below="@id/filmBudgetTextView"
        android:layout_margin="8dp"
        />

    <TextView
        android:id="@+id/isAdult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/genreTextView"
        android:textSize="25sp"
        android:layout_centerInParent="true"
        />
</RelativeLayout>

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдореВрд╡реА рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕

рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗ рдореЗрдирдРрдХреНрдЯрд┐рд╡рд┐рдЯреА рдореЗрдВ рд╣рдо PutValues тАЛтАЛрд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВрдЧреЗ:
private void putValues(String name, int budget, boolean isAdult, String[] genres) throws SnappydbException {
        DB snappyDB = DBFactory.open(this,"Film");
        //     Film (      open)

        snappyDB.put("Name", name);
        snappyDB.putInt("budget", budget);
        snappyDB.putBoolean("isAdult", isAdult);
        snappyDB.put("genres", genres);
        //       
}

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрд┐рд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рд╣рдо SnappyDB рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕реЗ SnappydbException рдХреЛ рдлреЗрдВрдХ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдм рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП setValues тАЛтАЛрд╡рд┐рдзрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
private void setValues(DB snappyDB) throws SnappydbException {
        TextView filmNameTextView = findViewById(R.id.filmNameTextView),
                 filmBudgetTextView = findViewById(R.id.filmBudgetTextView),
                 genresTextView = findViewById(R.id.genreTextView),
                 isAdultTextView = findViewById(R.id.isAdult); //    

        String name = snappyDB.get("Name");
        int budget = snappyDB.getInt("budget");
        boolean isAdult = snappyDB.getBoolean("isAdult");
        String[] genres = snappyDB.getObjectArray("genres", String.class);//2  =  
        //  get...     

        filmNameTextView.setText(name);
        filmBudgetTextView.setText(String.valueOf(budget));
        isAdultTextView.setText(String.valueOf(isAdult));

        for(int i = 0;i < genres.length;i++) {
            genresTextView.setText(genresTextView.getText() + " " + genres[i]);
        }
}


рдСрди-рдХреНрд░рд┐рдПрдЯ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ (рдПрдХ рдХреЛрд╢рд┐рд╢ / рдХреИрдЪ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдШреЗрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ):
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        try {
            putValues("Forrest Gump", 677000000,false, new String[] {"Drama","Melodrama"});
        } catch (SnappydbException e) {
            e.printStackTrace();
        }
        
        try {
            DB snappyDB = DBFactory.open(this, "Film");
            setValues(snappyDB);
        } catch (SnappydbException e) {
            e.printStackTrace();
        }
}


рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ:
рдЫрд╡рд┐

рдЕрдм рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рд╣рдорд╛рд░реА рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдЕрдиреНрдп рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред
3 рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд┐рд▓реНрдо рд╢реНрд░реЗрдгреА рдмрдирд╛рдПрдБ:
public class Film {
    private String name;
    private int budget;
    private String[] genres;

    public Film() {}

    public Film(String name, int budget, String[] genres) {
        this.name = name;
        this.budget = budget;
        this.genres = genres;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getBudget() {
        return budget;
    }

    public void setBudget(int budget) {
        this.budget = budget;
    }

    public String[] getGenres() {
        return genres;
    }

    public void setGenres(String[] genres) {
        this.genres = genres;
    }
}

OnCreate рдореЗрдВ setValues тАЛтАЛрдФрд░ putValues тАЛтАЛрд╡рд┐рдзрд┐ рдХреЙрд▓ рдирд┐рдХрд╛рд▓реЗрдВред рдЗрд╕рдореЗрдВ рдлрд┐рд▓реНрдо рд╡рд░реНрдЧ рдХреА рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
Film film = new Film("Shawshank redemption",28000000, new String[] {"Drama"});
try {
       DB snappyDB = DBFactory.open(this, "NewFilmDB");
       snappyDB.put("FilmObj",film);
} catch (SnappydbException e) {
       e.printStackTrace();
}


рд╣рдо рд╕реЗрдЯрд╡реИрд▓реНрдпреВрдЬрд╝ рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:
private void setValues(DB snappyDB) throws SnappydbException {
        TextView filmNameTextView = findViewById(R.id.filmNameTextView),
                 filmBudgetTextView = findViewById(R.id.filmBudgetTextView),
                 genresTextView = findViewById(R.id.genreTextView);

        Film film = snappyDB.getObject("FilmObj", Film.class);
        
        String name = film.getName();
        int budget = film.getBudget();
        String[] genres = film.getGenres();

        filmNameTextView.setText(name);
        filmBudgetTextView.setText(String.valueOf(budget));

        for(int i = 0;i < genres.length;i++) {
            genresTextView.setText(genresTextView.getText() + " " + genres[i]);
        }
}

рдХреЙрд▓ рд╕реЗрдЯрд╡реИрд▓реНрдпреВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдБ:
try {
        DB snappyDB = DBFactory.open(this, "NewFilmDB");
        setValues(snappyDB);
} catch (SnappydbException e) {
        e.printStackTrace();
}

рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдЫрд╡рд┐

рдЕрдм рдЖрдЗрдП рдХреБрдЫ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк SnappyDB рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ:
1) рдЙрдкрд╕рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛:
Film film1 = new Film("Green mile",60000000,new String[] {"Drama", "Fantasy"}),
  film2 = new Film("Gentlemen",22000000,new String[] {"Comedy", "Crime"}),
  film3 = new Film("In Bruges",15000000,new String[] {"Comedy", "Crime", "Thriller"});

        try {
            DB snappyDB = DBFactory.open(this, "NewFilmDB");
            snappyDB.put("FilmObj: Green Mile",film1);
            snappyDB.put("FilmObj: Gentlemen",film2);
            snappyDB.put("FilmObj: In Bruges",film3);
            String[] filmKeys = snappyDB.findKeys("FilmObj:");
            //   filmKeys    "FilmObj:"
            //      ,   
            for(int i = 0;i < filmKeys.length;i++) {
                Log.d("film_key: ",  filmKeys[i] + "\n");
            }

            Log.d("film_name: ",  snappyDB.getObject(filmKeys[2],Film.class).getName() + "\n");
            // -  ,    filmKeys

        } catch (SnappydbException e) {
            e.printStackTrace();
 }

рдЫрд╡рд┐
рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ

2) DB рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐:
try {

            DB snappyDB = DBFactory.open(this, "NewFilmDB");

            for (String[] batch : snappyDB.allKeysIterator().byBatch(1)) {
                //    (batch),     
                for (String key : batch) {
                    Log.d("film",snappyDB.getObject(key,Film.class).getName());
                }
            }
        } catch (SnappydbException e) {
            e.printStackTrace();
}

ByBatch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ KeyIterator рд╣реЛрдЧрд╛ рдЬреЛ Iterator рдпрд╛ Iterable рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рд▓реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
byBatch (n) рдПрдХ рдмреИрдЪреИрдЯреЗрдмрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ Iterable рдФрд░ Iterator рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдпрд╣ KeyIterator рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓рд╛ (n) рдХрд╣рддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓рд╛ () рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди ByBatch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, рдпрд╣ findKeys / findKeysBetween рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред

3) рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛:
snappyDB.del("FilmObj: Gentlemen");

рдЫрд╡рд┐
рддрддреНрд╡ рд╣рдЯрд╛рдП рдЧрдП
4) рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛:
snappyDB.close();
snappyDB.destroy();


5) рдкрддрд╛ рд▓рдЧрд╛рдПрдБ рдХрд┐ рдХреНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА рдореМрдЬреВрдж рд╣реИ:
snappyDB.put("FilmObj: Gentlemen",new Film());
boolean isExist = snappyDB.exists("FilmObj: Gentlemen");// true
snappyDB.del("FilmObj: Gentlemen");
isExist = snappyDB.exists("FilmObj: Gentlemen");//false



рддреЛ рд╡рд╣ рд╕рдм рд╣реИред рдЖрдк рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рдХрд╛рдлреА рддреЗрдЬрд╝ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЪреБрдирд╛рд╡ рдЖрдкрдХрд╛ рд╣реИред рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдХрдХреНрд╖, SQLite, рджрд╛рдпрд░реЗ, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдмреЗрд╣рддрд░ рд╣реИред рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдХрд▓реНрдкред

рдкреБрдирд╢реНрдЪ: GitHub рдкрд░ SnappyDB (рд╡рд╣рд╛рдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ)ред
SQL рдФрд░ NoSQL рдХреЗ рдмреАрдЪ рдЕрдВрддрд░: 1 , 2
SQL рдмрдирд╛рдо рдХреА-рд╡реИрд▓реНрдпреВ DB

All Articles