2012-05-10 18 views
5

Hi there Sto iniziando a sviluppare un'applicazione per Android che utilizzerà un DB SQLite che conterrà diverse tabelle. Quello che vorrei sapere è quando le tabelle specifiche sono state aggiornate l'ultima volta in quanto alcuni dati non avrebbero bisogno di essere aggiornati per dire una settimana dove altre tabelle dovranno essere aggiornate ogni poche ore. Cercando di risparmiare larghezza di banda e creare un'app più veloce e reattiva. Non sono sicuro se c'è un comando per questo (non riesco a trovare nulla) o se dovrei aggiungere un campo all'interno di ogni tabella con l'ora e la data attuali e utilizzare System.currentTimeMillis() per calcolare quanto tempo è passato.Controllo Android all'ultima tabella di aggiornamento

So che questo è stato chiesto di seguito, ma non è mai stato risposto, qualsiasi aiuto sarebbe impressionante :)

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

risposta

3

che io sappia non v'è alcuna funzione SQL per farlo.

È possibile aggiungere un campo a ciascun record con un timestamp, quindi eseguire una query per restituire l'ultimo timestamp dalla tabella.

+0

Praticamente quello che pensavo :) – James

+0

È possibile controllare l'intero DB controllando la data e l'ora del file, ma questo non è di aiuto per le singole tabelle. : p – Barak

+1

Sì, proprio non ha visto il punto di aggiornare i dati quando non ce n'è bisogno. So che le velocità delle connessioni di oggi sono buone, ma leggere da un file DB locale deve essere più veloce! Sono nuovo di tutto questo business Android, le mie teste girano un po '! – James

7

Un po 'tardi, ma che diavolo: puoi anche mettere un po' di TRIGGER s sui tuoi tavoli e mantenere una tabella di modifica, come mostrato di seguito. La modifica più recente viene registrata con tipo e data + ora nella tabella modifications. Creazione TRIGGER s del genere può essere facilmente realizzato in un metodo semplice & chiamato per ogni tabella creata nella vostra 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

Credo che l'operazione potrebbe essere raggiunto con le seguenti operazioni

FASE 1: Si potrebbe utilizzare grilletto sqlite meccanismo

FASE 2: richiamare un sqlite comando dalla FASE 1 al scrivere il record aggiornato per un file di testo (Controlla i risultati di scrittura di un file: http://www.sqlite.org/sqlite.html)

FASE 3: Eseguire File System Watcher operazione come in C# o in PHP

FASE 4: Invia i dati da PHP per android via gateway SMS

ancora un altro pazzo Frankenstein algo, come sto lavorando per la mia applicazione ;-)

Qualsiasi metodo fattibile e più semplice di questo è il benvenuto ....

Problemi correlati