在android sqlite

时间:2017-05-02 13:45:57

标签: android sqlite datetime datepicker android-sqlite

我在sqlite数据库中插入一些日期时间值时遇到问题。

我有两个日期选择器,我可以选择一个日期,但之后,当我将其插入我的数据库时,我不知道为什么但是2个日期的行有当前日期..我怎么能如何插入我在datepicker中选择的日期?

在我的数据库中,我将这些列声明为DATETIME。

这是我的日期的get-setter课程:

    public String getDate_debut() {
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "dd-MM-yyyy HH:mm:ss");
    Date date = new Date();
    return dateFormat.format(date);
}

public void setDate_debut(String date_debut) {
    this.date_debut = date_debut;
}

public String getDate_fin() {
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "dd-MM-yyyy HH:mm:ss");
    Date date = new Date();
    return dateFormat.format(date);
}

public void setDate_fin(String date_fin) {
    this.date_fin = date_fin;
}

这是我如何获得一个日期选择器的日期。我不确定格式化字符串的方式,如果我需要格式化,或者我可以添加为字符串。

 private DatePickerDialog.OnDateSetListener datepickerdernier
        = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {

        year_x2 = year;

        //les DatePicker
        month_x2 = month +1;
        day_x2 = dayOfMonth;
        datefin = (TextView)findViewById(R.id.TVDatePickerDernier);
        datefin.setText(year_x2+"-"+month_x2+"-"+day_x2);
    }
};


            String date2 = datefin.getText().toString();
            //im not sure about the following lines
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

            Date date_dernier = dateFormat.parse(date2);

最后我插入它:

 Cours c = new Cours();
                        c.setBranche_cours(selectedBranche);              
                        c.setDate_fin(date2); //should i set the string ?        
                        dbhelper.Open();
                        dbhelper.insertCours(c);

如何在我的数据库中插入我选择的日期而不是当前日期?

@UPDATE - **如何更新插入的日期?

我有另一项活动,我想修改之前选择的日期,但我不能......

这是我的sqlite方法:

public void updateCours(Date olddatedebut, Date newdatedebut, Date olddatedernier, Date newdatedernier)
{
Open();

db.execSQL("UPDATE "+TABLE_COURS+" set "+COLONNE_DATEPREMIER+"=date('"+newdatedebut+"') where "+COLONNE_DATEPREMIER+"=date('"+olddatedebut+"')");
db.execSQL("UPDATE "+TABLE_COURS+" set "+COLONNE_DATEDERNIER+"=date('"+newdatedernier+"') where "+COLONNE_DATEDERNIER+"=('"+olddatedernier+"')");
}

我如何将其传递给我的活动方法:

     //this is the new date of the 2nd datepicker
                        String datedernier = convertDateFormat(datenew2, "yyyy-MM-dd", "dd-MMM-yyyy");
                        //this is the new date of the 1st datepicker
                        String datepremier = convertDateFormat(datenew1, "yyyy-MM-dd", "dd-MMM-yyyy");
                        String date_debutold= intent.getExtras().getString("date_debut");
                        String date_finold=intent.getExtras().getString("date_fin");
                        //this is the current date recorded in my database from my datepicker
                        String date_debut1= convertDateFormat(date_debutold, "yyyy-MM-dd", "dd-MMM-yyyy");
                        //this is the current date recorded in my darabase from my 1st datepicker
                        String date_fin1= convertDateFormat(date_finold, "yyyy-MM-dd", "dd-MMM-yyyy");

                        //nouvelledatedebut
                        Date date_premier= new Date(datepremier);
                        Date date_dernier = new Date(datedernier);
                        Date date_premier2 = new Date(date_debut1);
                        Date date_fin2 = new Date(date_fin1);
                        dbhelper.Open();
                       dbhelper.updateCours(selected_brancheold,selectedBranchenew,date_premier2,date_premier,date_fin2,date_dernier,

3 个答案:

答案 0 :(得分:2)

这是因为您在getter方法上设置了一些逻辑并设置了new Date(),这将覆盖date_fin属性上的日期。当您突然进行 insertCours 时,此方法将尝试查找您尝试插入的对象的所有get方法。尝试改变这个:

public String getDate_fin() {
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "dd-MM-yyyy HH:mm:ss");
    Date date = new Date();
    return dateFormat.format(this.date_fin);
}

到这个

public String getDate_fin() {
    return this.date_fin;
}

如果您仍想在Date(String)中添加格式,您仍然可以在getter方法上创建它,但我不推荐它。

答案 1 :(得分:0)

试试这个

public static String convertDateFormat(String date, String curFormat, String desFormat){
    String newFormat = null;
    Date frmtDate = null;
    try {
        SimpleDateFormat sdf = new SimpleDateFormat(curFormat);

        frmtDate = sdf.parse(date);
        SimpleDateFormat formatter = new SimpleDateFormat(desFormat);
        newFormat = formatter.format(frmtDate);

    } catch (Exception e) {
        newFormat = date;
    }
    return newFormat;
}

样品

String result = convertDateFormat(date2, "yyyy-MM-dd", "dd-MMM-yyyy");
c.setDate_fin(result);

答案 2 :(得分:0)

  

每个值存储在SQLite数据库中(或由...操纵)   数据库引擎)具有以下存储类之一:

     

NULL。该值为NULL值。

     

INTEGER。该值是有符号整数,存储在1,2,3,4,6或8中   字节取决于值的大小。

     

REAL。该值是浮点值,存储为8字节IEEE   浮点数。

     

TEXT。该值是使用数据库编码存储的文本字符串   (UTF-8,UTF-16BE或UTF-16LE)。

     

BLOB。该值是一个数据块,完全按照输入的方式存储。

没有DATETIME。 SQlite将其存储为TEXT。你不能添加一天。你必须阅读它并解析它。当你存储它时也是如此。你必须解析它。

希望它有用。