рдПрдВрдбреНрд░реЙрдЗрдб рдРрдк рдореЗрдВ рдмрд░реНрдХрд▓реЗ рдбреАрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рдЪрд░рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдПрдХ рд╕рд░рд▓ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдЬрд┐рд╕рдХреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдерд╛ред рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЖрджреА рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рд╕рдВрдЧрдд рдПрдВрдбреНрд░реЙрдЗрдб рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдорд┐рд▓реА - рдмрд░реНрдХрд▓реЗ рдбреАрдмреА, рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рдбреЗрдЯрд╛рдмреЗрд╕ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдУрд░реЗрдХрд▓ рд╕реЗ рдкреНрд░рд▓реЗрдЦрди SQlite рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рд╕рдВрдХреЗрддрдХ рдереЗред рдЗрд╕рд▓рд┐рдП, рдореЗрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП (рдпрд╣ рдореЗрд░реЗ рдлреЛрди рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдЬрд╛рддрд╛), рдореИрдВрдиреЗ рдЗрд╕ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдЪреБрдирд╛ред
рд╡рд░реНрдЧ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдореВрд▓ рд╣реИ рд╡рд╣ рд╕рд┐рдВрдЧрд▓рдЯрди рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

public class DatabaseConfig { private static DatabaseConfig ourInstance; private Environment envmnt; private EntityStore store; public static DatabaseConfig getInstance() { if (ourInstance == null) throw new IllegalArgumentException("You need initialize database config previously!"); return ourInstance; } public static void init(File envDir) { ourInstance = new DatabaseConfig(envDir); } private DatabaseConfig(File envDir) { EnvironmentConfig envConfig = new EnvironmentConfig(); StoreConfig storeConfig = new StoreConfig(); envConfig.setTransactional(true); envConfig.setAllowCreate(true); storeConfig.setAllowCreate(true); storeConfig.setTransactional(true); envmnt = new Environment(envDir, envConfig); try { store = new EntityStore(envmnt, "autocalc", storeConfig); } catch (IncompatibleClassException e) { //todo:   . } } public static void shutdown() { if (ourInstance != null) { ourInstance.close(); } } private void close() { store.close(); envmnt.close(); } public EntityStore getStore() { return store; } public Transaction startTransaction() { return envmnt.beginTransaction(null, null); } } 


рдЗрд╕ рд╡рд░реНрдЧ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдХрд╛рдлреА рдореБрдХрдореНрдорд▓ рд╣реИрдВ, рдХрд┐рд╕реА рд╕рдВрд╕реНрдерд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рднреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рд▓реЗрди-рджреЗрди рдмрдирд╛рдиреЗ / рдмрдВрдж рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдкреЙрдк рдЕрдк рд╣реБрдИред рдПрдХ рд▓реЗрди-рджреЗрди рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдЦреБрд▓рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рднреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдЕрдм рддрдХ, рдпрд╣ "рдЧрд▓рддреА" рдореИрдВ "рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ" рд╕рд╣реА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреБрдЯрд┐рд▓ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдирджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░, DataAccess рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдХреНрд▓рд╛рд╕реЗрд╕ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВред

 public class FuelItemDA { private PrimaryIndex<Long, FuelItem> prIndex; private SecondaryIndex<Long, Long, FuelItem> odometerIndex; private SecondaryIndex<Date, Long, FuelItem> dateIndex; private DatabaseConfig dbConfig; public FuelItemDA() { dbConfig = DatabaseConfig.getInstance(); prIndex = dbConfig.getStore().getPrimaryIndex( Long.class, FuelItem.class); odometerIndex = dbConfig.getStore().getSecondaryIndex( prIndex, Long.class, "odometer"); dateIndex = dbConfig.getStore().getSecondaryIndex( prIndex, Date.class, "operationDate"); } public void save(FuelItem item) { Transaction tx = dbConfig.startTransaction(); try { if (item.getId() == 0) { long id = dbConfig.getStore().getSequence("SPENT_ID").get(tx, 1); item.setId(id); } prIndex.put(tx, item); tx.commit(); } catch (Exception e) { e.printStackTrace(); if (tx != null) { tx.abort(); tx = null; } } } public FuelItem load(long id) { return prIndex.get(id); } public List<FuelItem> getItemsInDates(Date bDate, Date eDate) { List<FuelItem> result = new LinkedList<FuelItem>(); EntityCursor<FuelItem> cursor = dateIndex.entities(bDate, true, eDate, true); for (Iterator<FuelItem> iterator = cursor.iterator(); iterator.hasNext(); ) { FuelItem spentItem = iterator.next(); result.add(spentItem); } cursor.close(); return result; } public void removeFuelItem(long id) { try { prIndex.delete(id); } catch (DatabaseException e) { e.printStackTrace(); prIndex.delete(id); } } } 


рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рддрдм рдЦреЛрдЬрд╛ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝реАрд▓реНрдб рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдмрд░реНрдХрд▓реЗ рдбреАрдмреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрдХрд╛рдИ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рд▓реЗрдЦрди рдереА рдЬреЛ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА, рдмрд░реНрдХрд▓реЗ рдбреАрдмреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

 @Persistent(version = 1) public class SpentItem implements Item{ @PrimaryKey(sequence="SPENT_ID") private long id; @SecondaryKey(relate= Relationship.MANY_TO_ONE) private long odometer; @SecondaryKey(relate= Relationship.MANY_TO_ONE) private Date operationDate; private double sum; .... } @Entity(version = 1) public class FuelItem extends SpentItem { private double count; private double price; private boolean full; ..... } 


рдЗрдХрд╛рдИ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ, рдЬрд╛рдирдХрд╛рд░реА рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:


рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рдг рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рдЖрдпрд╛ред рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреА рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реИ, рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдпрд╣ рдХреЗрд╡рд▓ DatabaseConfig рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рд╣реИред
 public class Calc extends Activity { private void setup() throws DatabaseException { File envDir = new File(android.os.Environment.getExternalStorageDirectory(), "data"); envDir = new File(envDir, "autoexpence"); if (!envDir.exists()) { if (!envDir.mkdirs()) { Log.e("TravellerLog :: ", "Problem creating Image folder"); } } DatabaseConfig.init(envDir); } } 


SQlite рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдлрд╛рдпрджреЛрдВ рдореЗрдВ SQL рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рдХрд╕рд┐рдд рдЙрдкрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдмрд░реНрдХрд▓реЗ рдбреАрдмреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдлрд╛рдпрджреЛрдВ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕реАрдЖрд░рдпреВрдбреА рд╕рдВрдЪрд╛рд▓рди рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рдж рдХреЗ рддрд╛рд░реНрдХрд┐рдХ рдХрд╛рдо рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, рдЗрд╕рдиреЗ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдЖрдЙрдЯрдкреБрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рднрд╛рд░ рдЙрдард╛рдпрд╛ред

рдкреБрдирд╢реНрдЪ
рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХред рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдмрд░реНрдХрд▓реЗ рдбреАрдмреА рдЬрд╛рд╡рд╛ред рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЕрдВрджрд░ рдЖрдкрдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдорд┐рд▓реЗрдЧреАред

Source: https://habr.com/ru/post/In172777/


All Articles