Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite不按日期订购_Android_Database_Sqlite - Fatal编程技术网

Android SQLite不按日期订购

Android SQLite不按日期订购,android,database,sqlite,Android,Database,Sqlite,我需要选择表中的所有元素,根据有日期的列进行排序 这是表格创建代码: String query = "CREATE TABLE IF NOT EXISTS "+ TABLE_NAME +" ( "+ " id INTEGER PRIMARY KEY,"+ " "+ COLUMN_LIST +" TEXT,"+ " "+ COLUMN_PRICE + " TEXT,"+ " "+ COLUMN_EXPI

我需要选择表中的所有元素,根据有日期的列进行排序

这是表格创建代码:

String query = "CREATE TABLE IF NOT EXISTS "+ TABLE_NAME +" ( "+
            " id INTEGER PRIMARY KEY,"+
            " "+ COLUMN_LIST +" TEXT,"+
            " "+ COLUMN_PRICE + " TEXT,"+
            " "+ COLUMN_EXPIRY + " NUMERIC,"+
            " "+ COLUMN_DATE +" NUMERIC,"+
            " f_k INTEGER,"+
            " FOREIGN KEY(f_k) REFERENCES user(id)"+
            " ON DELETE CASCADE"+
            ")";
这是在我需要排序的列中插入元素的代码:

try{
    VAL.put( COLUMN_EXPIRY, String.valueOf( new SimpleDateFormat( "dd-MM-yyyy" ).parse( items.get( 2 ).toString() ) ) );
}catch( ParseException e ){
    e.printStackTrace();
}
items.get 2.toString是stringDate变量:

int day = date.getDayOfMonth();
int month = date.getMonth() + 1;
int year = date.getYear();

stringDate = Integer.toString( day ) +"-"+ Integer.toString( month ) +"-"+ Integer.toString( year );
选择元素的代码:

final String QUERY = SELECT_ALL + t;
final String ORDER = " ORDER BY DATE("+ COLUMN_EXPIRY +") DESC";
final Cursor RESULT = DB.rawQuery( QUERY + ORDER, null );
结果令我不满意。日期不符合顺序。此外,该列的某些元素为空,我将使用另一列采用的不同顺序列出该列表。 谢谢

创建表时,您的列的过期数据类型不正确,将被视为日期/时间

按如下所示进行更改,您就可以开始了:

...
" "+ COLUMN_EXPIRY + " DATETIME,"+
...
创建表时,列“”的数据类型不正确,将其视为日期/时间

按如下所示进行更改,您就可以开始了:

...
" "+ COLUMN_EXPIRY + " DATETIME,"+
...
和你的商店

String.valueOf( new SimpleDateFormat( "dd-MM-yyyy" ).parse( items.get( 2 ).toString() ) ) );
这是完全错误的,因为您正在获取String.valueOfdate

您可以使用

" "+ COLUMN_DATE +" INTEGER,"
并获取日期的长值(以毫秒为单位),该值被转换为字符串

String.valueOf( new SimpleDateFormat( "dd-MM-yyyy" ).parse( items.get( 2 )).getTime()) ) );
那么它应该会起作用

更新

别忘了换衣服

final String ORDER = " ORDER BY DATE("+ COLUMN_EXPIRY +") DESC";

和你的商店

String.valueOf( new SimpleDateFormat( "dd-MM-yyyy" ).parse( items.get( 2 ).toString() ) ) );
这是完全错误的,因为您正在获取String.valueOfdate

您可以使用

" "+ COLUMN_DATE +" INTEGER,"
并获取日期的长值(以毫秒为单位),该值被转换为字符串

String.valueOf( new SimpleDateFormat( "dd-MM-yyyy" ).parse( items.get( 2 )).getTime()) ) );
那么它应该会起作用

更新

别忘了换衣服

final String ORDER = " ORDER BY DATE("+ COLUMN_EXPIRY +") DESC";


为了避免复杂的查询,您可以尝试将日期元素存储在单独的字段中:

    " "+ COLUMN_EXPIRY_day + " NUMERIC,"+
    " "+ COLUMN_EXPIRY_month + " NUMERIC,"+
    " "+ COLUMN_EXPIRY_year + " NUMERIC,"+
以及查询的Order By子句:

ORDER BY COLUMN_EXPIRY_year, COLUMN_EXPIRY_month, COLUMN_EXPIRY_day

为了避免复杂的查询,您可以尝试将日期元素存储在单独的字段中:

    " "+ COLUMN_EXPIRY_day + " NUMERIC,"+
    " "+ COLUMN_EXPIRY_month + " NUMERIC,"+
    " "+ COLUMN_EXPIRY_year + " NUMERIC,"+
以及查询的Order By子句:

ORDER BY COLUMN_EXPIRY_year, COLUMN_EXPIRY_month, COLUMN_EXPIRY_day

这并不能解决我的问题,因为我已经尝试过这个解决方案阅读这个:这不能解决我的问题,因为我已经尝试过这个解决方案阅读这个:这是一个可能有效的解决方案,但需要更多的计算时间这是一个可能有效的解决方案,但使用getTime i Transform items需要更多的计算时间。从字符串到日期获取2?@RESOLE否,忘记带括号,修复此返回毫秒,而不是date@RESOLE那又怎么样?如果存储的是毫秒,而不是日期,则可以按毫秒排序,并且可以轻松地从该历元中获取日期(毫秒)。喜欢新的约会方式;是否要使用getTime i转换项。从字符串到日期获取2?@RESOLE否,忘记带括号,修复此返回毫秒,而不是date@RESOLE那又怎么样?如果存储的是毫秒,而不是日期,则可以按毫秒排序,并且可以轻松地从该历元中获取日期(毫秒)。喜欢新的约会方式;