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那又怎么样?如果存储的是毫秒,而不是日期,则可以按毫秒排序,并且可以轻松地从该历元中获取日期(毫秒)。喜欢新的约会方式;