Android 将日期选择器和时间选择器对话框中的日期和时间存储到MySQL

Android 将日期选择器和时间选择器对话框中的日期和时间存储到MySQL,android,mysql,datetime,Android,Mysql,Datetime,我正在创建一个应用程序,希望客户端从DatePicker中选择日期和时间,并以datetime格式将其存储到SQL server。有什么想法吗?因为我使用了SimpleDataFormat,但它不起作用。看看ad包装器类,但在DAO级别,java端应该是 从 看看广告包装器类,但在DAO级别,java端应该是 从 实际上,格式化日期和时间在sql中很重要 首先,, 您必须考虑从日期选择器获取的日期格式(通常是我们向用户显示的格式): 常数:: public static final String

我正在创建一个应用程序,希望客户端从DatePicker中选择日期和时间,并以datetime格式将其存储到SQL server。有什么想法吗?因为我使用了
SimpleDataFormat
,但它不起作用。

看看ad包装器类,但在DAO级别,java端应该是


看看广告包装器类,但在DAO级别,java端应该是


实际上,格式化日期和时间在sql中很重要

首先,, 您必须考虑从日期选择器获取的日期格式(通常是我们向用户显示的格式):

常数::

public static final String DATE_FORMAT = "MM/dd/yyyy";
public static final String SQL_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String SQL_DATE_FORMAT = "yyyy-MM-dd";

SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT, Locale.US);
SimpleDateFormat rdf = new SimpleDateFormat(SQL_DATE_FORMAT,
                Locale.US);
SimpleDateFormat tdf = new SimpleDateFormat(SQL_DATETIME_FORMAT,
                Locale.US);
日期选择器::

public static class DatePickerFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        Bundle data = this.getArguments();
        if (data.getBoolean("isSelected")) {
            year = data.getInt("year") + 1900;
            month = data.getInt("month");
            day = data.getInt("day");
        }

        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT, Locale.US);
        @SuppressWarnings("deprecation")
        String formatedDate = sdf.format(new Date(year - 1900, month, day));
        ((BaseActivity) getActivity()).mValuePickListener.onPickedValue(
                formatedDate, DIALOG_DATE_PICKER);
    }
}
现在,将此格式转换为mysql接受的格式以存储日期和时间:

Date selectedDate = new Date();
if (!date.getText().toString().trim().equalsIgnoreCase("")) {
  selectedDate =    sdf.parse(date.getText().toString());
}
String sqlDate = rdf.format(selectedDate);

PS::您还可以使用时间戳(long)在数据库中存储时间

在sql中实际格式化日期和时间事项

public void onDateSet(DatePicker view, int year, int month, int day) throws SQLException {
    java.sql.Date myDate = (java.sql.Date)new java.util.Date(year, month, day);
    PreparedStatement mySqlInsertStatement = connection.prepareStatement(sqlStatement, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
    mySqlInsertStatement.setDate(1, myDate);
    if (mySqlInsertStatement.executeUpdate() != 1) { // we have a problem
    }
}
首先,, 您必须考虑从日期选择器获取的日期格式(通常是我们向用户显示的格式):

常数::

public static final String DATE_FORMAT = "MM/dd/yyyy";
public static final String SQL_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String SQL_DATE_FORMAT = "yyyy-MM-dd";

SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT, Locale.US);
SimpleDateFormat rdf = new SimpleDateFormat(SQL_DATE_FORMAT,
                Locale.US);
SimpleDateFormat tdf = new SimpleDateFormat(SQL_DATETIME_FORMAT,
                Locale.US);
日期选择器::

public static class DatePickerFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        Bundle data = this.getArguments();
        if (data.getBoolean("isSelected")) {
            year = data.getInt("year") + 1900;
            month = data.getInt("month");
            day = data.getInt("day");
        }

        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT, Locale.US);
        @SuppressWarnings("deprecation")
        String formatedDate = sdf.format(new Date(year - 1900, month, day));
        ((BaseActivity) getActivity()).mValuePickListener.onPickedValue(
                formatedDate, DIALOG_DATE_PICKER);
    }
}
现在,将此格式转换为mysql接受的格式以存储日期和时间:

Date selectedDate = new Date();
if (!date.getText().toString().trim().equalsIgnoreCase("")) {
  selectedDate =    sdf.parse(date.getText().toString());
}
String sqlDate = rdf.format(selectedDate);
PS::您还可以使用时间戳(long)在数据库中存储时间

public void onDateSet(DatePicker view, int year, int month, int day) throws SQLException {
    java.sql.Date myDate = (java.sql.Date)new java.util.Date(year, month, day);
    PreparedStatement mySqlInsertStatement = connection.prepareStatement(sqlStatement, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
    mySqlInsertStatement.setDate(1, myDate);
    if (mySqlInsertStatement.executeUpdate() != 1) { // we have a problem
    }
}
返回INSERT的
行计数,如果发生可怕的事情,可以抛出一个

返回INSERT的
行计数,如果发生可怕的事情,可以抛出一个