2012-05-10 17 views
5

Witam, zaczynam opracowywać aplikację na Androida, która będzie korzystała z bazy danych SQLite, która pomieści kilka tabel. To, co chciałbym wiedzieć, to to, kiedy ostatnie tabele były ostatnio aktualizowane, ponieważ niektóre dane nie musiałyby być aktualizowane, na przykład przez tydzień, ponieważ inne tabele będą musiały być aktualizowane co kilka godzin. Próbujesz oszczędzać przepustowość i tworzysz szybszą, bardziej elastyczną aplikację. Nie jestem pewien, czy jest jakieś polecenie (nie mogę niczego znaleźć), czy też powinienem dodać pole w każdej tabeli z aktualnym czasem i datą i użyć System.currentTimeMillis(), aby ustalić, jak długo było.Sprawdzanie Androida przy ostatniej aktualizacji tabeli

Znam ten został poproszony poniżej, ale nigdy nie została wysłuchana, jakiejkolwiek pomocy byłoby super :)

Check when an SQLite database/table was last updated (PHP)

Odpowiedz

3

tego co wiem nie ma funkcji SQL, aby to zrobić.

Można dodać pole do każdego rekordu ze znacznikiem czasu, a następnie wykonać zapytanie, aby zwrócić ostatni datownik z tabeli.

+0

Prawie co myślałem :) – James

+0

Możesz sprawdzić cały DB, sprawdzając znacznik pliku, ale to nie pomoże dla poszczególnych tabel. : p – Barak

+1

Tak, po prostu nie widziałem sensu odświeżania danych, kiedy nie ma takiej potrzeby. Wiem, że dzisiejsze prędkości połączeń są dobre, ale czytanie z lokalnego pliku DB musi być szybsze! Jestem nowicjuszem w całym tym biznesie na Androida, moje głowy trochę się kręcą! – James

7

Trochę za późno, ale co tam, do diabła - możesz też umieścić na stolik kilka paczek i utrzymywać tabelę modyfikacji, jak pokazano poniżej. Najnowsza modyfikacja jest rejestrowana za pomocą typu i daty + czasu w tabeli modifications. Tworzenie TRIGGER Like które można łatwo osiągnąć w prosty sposób & nazwie dla każdej tabeli utworzony w SQLiteOpenHelper

CREATE TABLE table1 (
    _id INTEGER PRIMARY KEY AUTOINCREMENT, 
    text1 TEXT, 
    text2 TEXT 
); 

CREATE TABLE table2 (
    _id INTEGER PRIMARY KEY AUTOINCREMENT, 
    text1 TEXT, 
    int1 INTEGER 
); 

CREATE TABLE modifications (
    table_name TEXT NOT NULL PRIMARY KEY ON CONFLICT REPLACE, 
    action TEXT NOT NULL, 
    changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
); 

CREATE TRIGGER IF NOT EXISTS table1_ondelete AFTER DELETE ON table1 
BEGIN 
    INSERT INTO modifications (table_name, action) VALUES ('table1','DELETE'); 
END; 

CREATE TRIGGER IF NOT EXISTS table2_ondelete AFTER DELETE ON table2 
BEGIN 
    INSERT INTO modifications (table_name, action) VALUES ('table2','DELETE'); 
END; 

CREATE TRIGGER IF NOT EXISTS table1_onupdate AFTER UPDATE ON table1 
BEGIN 
    INSERT INTO modifications (table_name, action) VALUES ('table1','UPDATE'); 
END; 

CREATE TRIGGER IF NOT EXISTS table2_onupdate AFTER UPDATE ON table2 
BEGIN 
    INSERT INTO modifications (table_name, action) VALUES ('table2','UPDATE'); 
END; 

CREATE TRIGGER IF NOT EXISTS table1_oninsert AFTER INSERT ON table1 
BEGIN 
    INSERT INTO modifications (table_name, action) VALUES ('table1','INSERT'); 
END; 

CREATE TRIGGER IF NOT EXISTS table2_oninsert AFTER INSERT ON table2 
BEGIN 
    INSERT INTO modifications (table_name, action) VALUES ('table2','INSERT'); 
END; 
-2

Wierzę, że operacja może zostać osiągnięty za pomocą następujących kroków

KROK 1: Można użyć sqlite spust mechanizm

KROK 2: powołać SQLite polecenia od krok 1 do napisać zaktualizowany zapis do pliku tekstowego (Sprawdź wyniki zapisu do pliku: http://www.sqlite.org/sqlite.html)

Krok 3: Wykonaj plików systemowych Watcher operacja jak w C# lub w PHP

Krok 4: Wyślij dane z php do Android poprzez bramki sms

kolejny szalony Frankenstein algo, jak pracuję dla mojej aplikacji ;-)

Jakakolwiek wykonalna i prostsza metodologia niż ta jest mile widziana ...

Powiązane problemy