Отформатируйте дату в EditText (MM-дд-гггг) в (гггг-ММ-дд) и запишите ее в sqlite - PullRequest
0 голосов
/ 07 сентября 2011

Формат даты в EditText должен быть записан в испанском формате (MM-dd-yyyy) и переписать ее в английском формате (yyyy-MM-dd) в базе данных sqlite.

Вот мой код адаптера:

public class AuxGlucDbAdapter {

public static final String KEY_IDPACIENTE = "IdPaciente";
public static final String KEY_FECHA = "Fecha";
public static final String KEY_EVE1 = "Eve1";
public static final String KEY_EVE2 = "Eve2";
public static final String KEY_EVE3 = "Eve3";
public static final String KEY_EVE4 = "Eve4";  
public static final String KEY_EVE5 = "Eve5";
public static final String KEY_EVE6 = "Eve6";
public static final String KEY_EVE7 = "Eve7";
public static final String KEY_ID = "_id";
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date date = sdf.parse(KEY_FECHA);
private static final String TAG = "AuxGlucDbAdapter";
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;


private static final String DATABASE_CREATE =
    "create table AuxGluc (_id integer primary key autoincrement, "
    + "IdPaciente numeric not null, Fecha datetime not null, Eve1 numeric not null, Eve2 numeric not null, Eve3 numeric not null, Eve4 numeric not null, Eve5 numeric not null, Eve6 numeric not null, Eve7 numeric not null);";

private static final String DATABASE_NAME = "data";
private static final String DATABASE_TABLE = "AuxGluc";
private static final int DATABASE_VERSION = 2;

private final Context mCtx;

private static class DatabaseHelper extends SQLiteOpenHelper {

    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS AuxGluc");
        onCreate(db);
    }
}

public AuxGlucDbAdapter(Context ctx) {
    this.mCtx = ctx;
}

public AuxGlucDbAdapter open() throws SQLException {
    mDbHelper = new DatabaseHelper(mCtx);
    mDb = mDbHelper.getWritableDatabase();
    return this;
}

public void close() {
    mDbHelper.close();
}

public long createNote(String IdPaciente, String Fecha, String Eve1, String Eve2, String Eve3, String Eve4, String Eve5, String Eve6, String Eve7) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_IDPACIENTE, IdPaciente);
    initialValues.put(KEY_FECHA, Fecha);
    initialValues.put(KEY_EVE1, Eve1);
    initialValues.put(KEY_EVE2, Eve2);
    initialValues.put(KEY_EVE3, Eve3);
    initialValues.put(KEY_EVE4, Eve4);
    initialValues.put(KEY_EVE5, Eve5);
    initialValues.put(KEY_EVE6, Eve6);
    initialValues.put(KEY_EVE7, Eve7);

    return mDb.insert(DATABASE_TABLE, null, initialValues);
}

public boolean deleteNote(long Id) {

    return mDb.delete(DATABASE_TABLE, KEY_ID + "=" + Id, null) > 0;
}

public Cursor fetchAllNotes() {

    return mDb.query(DATABASE_TABLE, new String[] {KEY_ID, KEY_IDPACIENTE, KEY_FECHA,
            KEY_EVE1, KEY_EVE2, KEY_EVE3, KEY_EVE4, KEY_EVE5, KEY_EVE6, KEY_EVE7}, null, null, null, null, null, null);
}

public Cursor fetchNote(long Id) throws SQLException {

    Cursor mCursor =

        mDb.query(true, DATABASE_TABLE, new String[] {KEY_ID, KEY_IDPACIENTE,
                KEY_FECHA, KEY_EVE1, KEY_EVE2, KEY_EVE3, KEY_EVE4, KEY_EVE5, KEY_EVE6, KEY_EVE7}, KEY_ID + "=" + Id, null,
                null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;

}

public boolean updateNote(long Id, String IdPaciente, String Fecha, String Eve1, String Eve2, String Eve3, String Eve4, String Eve5, String Eve6, String Eve7) {
    ContentValues args = new ContentValues();
    args.put(KEY_IDPACIENTE, IdPaciente);
    args.put(KEY_FECHA, Fecha);
    args.put(KEY_EVE1, Eve1);
    args.put(KEY_EVE2, Eve2);
    args.put(KEY_EVE3, Eve3);     
    args.put(KEY_EVE4, Eve4);   
    args.put(KEY_EVE5, Eve5); 
    args.put(KEY_EVE6, Eve6); 
    args.put(KEY_EVE7, Eve7); 

    return mDb.update(DATABASE_TABLE, args, KEY_ID + "=" + Id, null) > 0;
}
}

А вот другой код:

public class NoteEdit extends Activity {

private EditText mIdPacienteText;
private EditText mFechaText;
private EditText mEve1Text;
private EditText mEve2Text;
private EditText mEve3Text;
private EditText mEve4Text;
private EditText mEve5Text;
private EditText mEve6Text;
private EditText mEve7Text;
private Long mId;
private AuxGlucDbAdapter mDbHelper;

@Override

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mDbHelper = new AuxGlucDbAdapter(this);
    mDbHelper.open();

    setContentView(R.layout.note_edit);
    setTitle(R.string.edit_note);

    mIdPacienteText = (EditText) findViewById(R.id.IdPaciente);
    mFechaText = (EditText) findViewById(R.id.Fecha);
    mEve1Text = (EditText) findViewById(R.id.Eve1);
    mEve2Text = (EditText) findViewById(R.id.Eve2);
    mEve3Text = (EditText) findViewById(R.id.Eve3);
    mEve4Text = (EditText) findViewById(R.id.Eve4);
    mEve5Text = (EditText) findViewById(R.id.Eve5);
    mEve6Text = (EditText) findViewById(R.id.Eve6);
    mEve7Text = (EditText) findViewById(R.id.Eve7);

    Button confirmButton = (Button) findViewById(R.id.confirm);

    mId = (savedInstanceState == null) ? null :
        (Long) savedInstanceState.getSerializable(AuxGlucDbAdapter.KEY_ID);
    if (mId == null) {
        Bundle extras = getIntent().getExtras();
        mId = extras != null ? extras.getLong(AuxGlucDbAdapter.KEY_ID)
                                : null;
    }

    populateFields();

    confirmButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            setResult(RESULT_OK);
            finish();
        }

    });
}

private void populateFields() {
    if (mId != null) {
        Cursor note = mDbHelper.fetchNote(mId);
        startManagingCursor(note);
        mIdPacienteText.setText(note.getString(
                note.getColumnIndexOrThrow(AuxGlucDbAdapter.KEY_IDPACIENTE)));
        mFechaText.setText(note.getString(
                note.getColumnIndexOrThrow(AuxGlucDbAdapter.KEY_FECHA)));
        mEve1Text.setText(note.getString(
                note.getColumnIndexOrThrow(AuxGlucDbAdapter.KEY_EVE1)));
        mEve2Text.setText(note.getString(
                note.getColumnIndexOrThrow(AuxGlucDbAdapter.KEY_EVE2)));
        mEve3Text.setText(note.getString(
                note.getColumnIndexOrThrow(AuxGlucDbAdapter.KEY_EVE3)));
        mEve4Text.setText(note.getString(
                note.getColumnIndexOrThrow(AuxGlucDbAdapter.KEY_EVE4)));
        mEve5Text.setText(note.getString(
                note.getColumnIndexOrThrow(AuxGlucDbAdapter.KEY_EVE5)));
        mEve6Text.setText(note.getString(
                note.getColumnIndexOrThrow(AuxGlucDbAdapter.KEY_EVE6)));
        mEve7Text.setText(note.getString(
                note.getColumnIndexOrThrow(AuxGlucDbAdapter.KEY_EVE7)));

    }
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    saveState();
    outState.putSerializable(AuxGlucDbAdapter.KEY_ID, mId);
}

@Override
protected void onPause() {
    super.onPause();
    saveState();
}

@Override
protected void onResume() {
    super.onResume();
    populateFields();
}

private void saveState() {
    String IdPaciente = mIdPacienteText.getText().toString();
    String Fecha = mFechaText.getText().toString();
    String Eve1 = mEve1Text.getText().toString();
    String Eve2 = mEve2Text.getText().toString();
    String Eve3 = mEve3Text.getText().toString();
    String Eve4 = mEve4Text.getText().toString();
    String Eve5 = mEve5Text.getText().toString();
    String Eve6 = mEve6Text.getText().toString();
    String Eve7 = mEve7Text.getText().toString();

    if (mId == null) {
        long Id = mDbHelper.createNote(IdPaciente, Fecha, Eve1, Eve2, Eve3, Eve4, Eve5, Eve6, Eve7);
        if (Id > 0) {
            mId = Id;
        }
    } else {
        mDbHelper.updateNote(mId, IdPaciente, Fecha, Eve1, Eve2, Eve3, Eve4, Eve5, Eve6, Eve7);
    }
}

}

1 Ответ

1 голос
/ 07 сентября 2011

Sqlite не имеет типа «дата-время».Было бы лучше сохранить Unix Timestamp (date.getTime (), я думаю), который измеряется в миллисекундах, и преобразовать его в sqlite во все, что вам нравится, используя функции date (), time () и strftime () в sqlite.(см. ссылки ниже).

См. эту ссылку, чтобы узнать о типах данных sqlite.

См. эту ссылку, чтобы узнать, как форматировать датыв sqlite.

Также см. этот и этот вопрос для получения дополнительной помощи.

РЕДАКТИРОВАТЬ: В ответ на ваш вопрос (по ссылке выше):

SQLite не имеет класса хранения, выделенного для хранения дат и / или времени.Вместо этого встроенные функции даты и времени в SQLite могут сохранять даты и время в виде значений TEXT, REAL или INTEGER:

TEXT в виде строк ISO8601 («ГГГГ-ММ-ДД ЧЧ: ММ: СС»)..SSS ").НАСТОЯЩЕЕ, как юлианские числа, число дней с полудня в Гринвиче 24 ноября 4714 г. до н.э.INTEGER как Unix Time, количество секунд с 1970-01-01 00:00:00 UTC.Приложения могут выбрать для сохранения даты и времени в любом из этих форматов и свободно конвертировать между форматами, используя встроенные функции даты и времени.

Так что, когда вы сохраняете yyyy-MM-dd, он фактически сохраняетэто как текстовое поле (или строка).Когда вы извлекаете его, он выходит так же, как вы его сохранили, но это строка, которую нельзя манипулировать как датой без предварительного анализа в Java.Даже при использовании моего метода вам все равно придется анализировать дату, но вы можете форматировать даты в своих запросах так, как вам нравится (гггг-мм-дд или мм-дд-гггг).

Преимущество сохранения даты в миллисекундах как INTEGER в sqlite заключается в том, что теперь вы можете сортировать даты в своем запросе.

РЕДАКТИРОВАТЬ:

Пример:

Ваша строка создания базы данных будет выглядеть следующим образом:

private static final String DATABASE_CREATE =
    "create table AuxGluc (_id integer primary key autoincrement, "
    + "IdPaciente numeric not null, Fecha integer not null, Eve1 numeric not null, Eve2 numeric not null, Eve3 numeric not null, Eve4 numeric not null, Eve5 numeric not null, Eve6 numeric not null, Eve7 numeric not null);";

Теперь, когда вы сохраняете дату, вы можете использовать класс Android Calendar и вызывать myCalendar.getTimeInMillis () дляполучить целочисленное значение.Таким образом, ваша подпись createNode будет выглядеть так:

public long createNote(String IdPaciente, int Fecha, String Eve1, String Eve2, String Eve3, String Eve4, String Eve5, String Eve6, String Eve7) {...}
...