Questo è il codice che ho trovato nella Palestra Database:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Helper helper=new Helper(this);
Date d=new Date();
helper.save(d);
Long numero=helper.query(5).getLong(1);
Log.v("NUMERO",""+numero);
DateFormat df=new SimpleDateFormat("hh:mm:ss");
Log.v("DATA",df.format(new Date(numero)).toString());
}
class Helper extends SQLiteOpenHelper{
public Helper(Context context) {
super(context, "Database.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table TABELLA(_id integer primary key, data integer)");
}
public void save(Date d){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("data", d.getTime());
db.insert("TABELLA", null, values);
}
public Cursor query(int numero){
SQLiteDatabase db=this.getReadableDatabase();
Cursor crs=db.rawQuery("select * from TABELLA where _id="+numero, null);
crs.moveToFirst();
return crs;
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
}
Ecco, non ricordo praticamente niente.Il campo in cui memorizzare la data è un Integer, e ricordo che in SQL un campo di tipo Integer può memorizzare anche un numero Long.
Perché memorizzare un numero long?
Fosse perché si mette il tempo in millisecondi dal 1 gennaio 1970?
Credo proprio di sì.
Analizziamo il codice...
Ho scritto agevolmente il codice per la creazione di un Database:
class Helper extends SQLiteOpenHelper{
public Helper(Context context) {
super(context, "database.db", null, 1);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table TABELLA(_id integer primary key, date integer)");
}
public void save(int data){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("date", data);
db.insert("TABELLA", null, values);
}
public Cursor query(){
SQLiteDatabase db=this.getWritableDatabase();
Cursor crs=db.rawQuery("select * from tabella",null);
crs.moveToFirst();
Cursor c=crs;
crs.close();
return c;
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
ma riguardando il codice precedente ho visto che il codice per la conversione a numero Long è presente all'interno dello stesso metodo save del database.Risolto:
public void save(Date data){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("date", data.getTime());
db.insert("TABELLA", null, values);
}
Vado a salvare e a verificare:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Helper helper=new Helper(this);
Date d=new Date();
helper.save(d);
Sì, sono scritti dei numeri, che sarebbero i millisecondi dalla data chiamata Epoch.Come si ricompongono in una data?
Si usa DateFormat.
Proviamo.
Definiamo un oggetto DateFormat.
DateFormat df=new SimpleDateFormat("dd:MM:yyyy");
Log.v("DATA", ""+df.format(new Date(numero)));
E vediamo:
07-16 20:50:26.622: V/DATA(15687): 16:07:2016Perfetto!
Nessun commento:
Posta un commento