Java 使用Order By DateTime获取SQLite数据但不起作用

Java 使用Order By DateTime获取SQLite数据但不起作用,java,android,sqlite,Java,Android,Sqlite,我想获得所有数据(日期和时间),但这对我没有帮助,也没有显示任何错误 请点击以下链接,但这对我没有帮助: 在SQLite数据库中插入记录: private String getDateTime() { SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm a"); Date date = new Date(); return dateFormat.format(date); }

我想获得所有数据(日期和时间),但这对我没有帮助,也没有显示任何错误

请点击以下链接,但这对我没有帮助:

SQLite
数据库中插入记录:

private String getDateTime() {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
    Date date = new Date();
    return dateFormat.format(date);
}

public long insertCompany(Company company){
    //String sql = null;
    SQLiteDatabase db = dbHelper.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(DatabaseHelper.KEY_COMPANY_NAME, company.getName());
    values.put(DatabaseHelper.KEY_CREATED_AT, getDateTime());
    values.put(DatabaseHelper.KEY_COMPANY_WEBSITE,company.getWebsite());
    values.put(DatabaseHelper.KEY_COMPANY_EMAIL,company.getEmail());
    values.put(DatabaseHelper.KEY_COMPANY_PHONE_HOME,company.getPhoneHome());
    values.put(DatabaseHelper.KEY_COMPANY_PHONE_PRIMARY,company.getPhonePrimary());
    values.put(DatabaseHelper.KEY_COMPANY_ADDRESS,company.getAddressLine1());
    long company_id = db.insert(COMPANY, null, values);

    return company_id;
}
List<Company> companyList = new ArrayList<Company>();
String selectQuery = "SELECT  * FROM " + COMPANY + " ORDER BY (" + KEY_CREATED_AT + ") ";

Log.e(TAG, selectQuery);

SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor c = db.rawQuery(selectQuery, null);
public List<Company> getAllCompany(){

    List<Company> companyList = new ArrayList<Company>();
    String selectQuery = "SELECT  * FROM " + COMPANY + " ORDER BY (" + KEY_CREATED_AT + ") ";

    Log.e(TAG, selectQuery);

    SQLiteDatabase db = dbHelper.getReadableDatabase();
    Cursor c = db.rawQuery(selectQuery, null);

    if (c.moveToFirst()) {
        do {
            Company com = new Company();
            com.setId(c.getInt(c.getColumnIndex(KEY_ID)));
            com.setName(c.getString(c.getColumnIndex(KEY_COMPANY_NAME)));
            com.setWebsite(c.getString(c.getColumnIndex(KEY_COMPANY_WEBSITE)));
            com.setEmail(c.getString(c.getColumnIndex(KEY_COMPANY_EMAIL)));
            com.setPhoneHome(c.getString(c.getColumnIndex(KEY_COMPANY_PHONE_HOME)));
            com.setPhonePrimary(c.getString(c.getColumnIndex(KEY_COMPANY_PHONE_PRIMARY)));
            com.setAddressLine1(c.getString(c.getColumnIndex(KEY_COMPANY_ADDRESS)));
            com.setDate(c.getString(c.getColumnIndex(KEY_CREATED_AT)));
            //com.setDate(c.getString(c.getColumnIndex(KEY_UPDATED_AT)));
            companyList.add(com);
        } while (c.moveToNext());
    }

    return companyList;
}
下面的代码是我将在数据库中实现的,但它无法工作:

private String getDateTime() {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
    Date date = new Date();
    return dateFormat.format(date);
}

public long insertCompany(Company company){
    //String sql = null;
    SQLiteDatabase db = dbHelper.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(DatabaseHelper.KEY_COMPANY_NAME, company.getName());
    values.put(DatabaseHelper.KEY_CREATED_AT, getDateTime());
    values.put(DatabaseHelper.KEY_COMPANY_WEBSITE,company.getWebsite());
    values.put(DatabaseHelper.KEY_COMPANY_EMAIL,company.getEmail());
    values.put(DatabaseHelper.KEY_COMPANY_PHONE_HOME,company.getPhoneHome());
    values.put(DatabaseHelper.KEY_COMPANY_PHONE_PRIMARY,company.getPhonePrimary());
    values.put(DatabaseHelper.KEY_COMPANY_ADDRESS,company.getAddressLine1());
    long company_id = db.insert(COMPANY, null, values);

    return company_id;
}
List<Company> companyList = new ArrayList<Company>();
String selectQuery = "SELECT  * FROM " + COMPANY + " ORDER BY (" + KEY_CREATED_AT + ") ";

Log.e(TAG, selectQuery);

SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor c = db.rawQuery(selectQuery, null);
public List<Company> getAllCompany(){

    List<Company> companyList = new ArrayList<Company>();
    String selectQuery = "SELECT  * FROM " + COMPANY + " ORDER BY (" + KEY_CREATED_AT + ") ";

    Log.e(TAG, selectQuery);

    SQLiteDatabase db = dbHelper.getReadableDatabase();
    Cursor c = db.rawQuery(selectQuery, null);

    if (c.moveToFirst()) {
        do {
            Company com = new Company();
            com.setId(c.getInt(c.getColumnIndex(KEY_ID)));
            com.setName(c.getString(c.getColumnIndex(KEY_COMPANY_NAME)));
            com.setWebsite(c.getString(c.getColumnIndex(KEY_COMPANY_WEBSITE)));
            com.setEmail(c.getString(c.getColumnIndex(KEY_COMPANY_EMAIL)));
            com.setPhoneHome(c.getString(c.getColumnIndex(KEY_COMPANY_PHONE_HOME)));
            com.setPhonePrimary(c.getString(c.getColumnIndex(KEY_COMPANY_PHONE_PRIMARY)));
            com.setAddressLine1(c.getString(c.getColumnIndex(KEY_COMPANY_ADDRESS)));
            com.setDate(c.getString(c.getColumnIndex(KEY_CREATED_AT)));
            //com.setDate(c.getString(c.getColumnIndex(KEY_UPDATED_AT)));
            companyList.add(com);
        } while (c.moveToNext());
    }

    return companyList;
}
List companyList=new ArrayList();
String selectQuery=“从“+COMPANY+”订单中选择*”(“+KEY\u CREATED\u AT+”);
Log.e(标签,选择查询);
SQLiteDatabase db=dbHelper.getReadableDatabase();
游标c=db.rawQuery(selectQuery,null);
完整代码:

private String getDateTime() {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
    Date date = new Date();
    return dateFormat.format(date);
}

public long insertCompany(Company company){
    //String sql = null;
    SQLiteDatabase db = dbHelper.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(DatabaseHelper.KEY_COMPANY_NAME, company.getName());
    values.put(DatabaseHelper.KEY_CREATED_AT, getDateTime());
    values.put(DatabaseHelper.KEY_COMPANY_WEBSITE,company.getWebsite());
    values.put(DatabaseHelper.KEY_COMPANY_EMAIL,company.getEmail());
    values.put(DatabaseHelper.KEY_COMPANY_PHONE_HOME,company.getPhoneHome());
    values.put(DatabaseHelper.KEY_COMPANY_PHONE_PRIMARY,company.getPhonePrimary());
    values.put(DatabaseHelper.KEY_COMPANY_ADDRESS,company.getAddressLine1());
    long company_id = db.insert(COMPANY, null, values);

    return company_id;
}
List<Company> companyList = new ArrayList<Company>();
String selectQuery = "SELECT  * FROM " + COMPANY + " ORDER BY (" + KEY_CREATED_AT + ") ";

Log.e(TAG, selectQuery);

SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor c = db.rawQuery(selectQuery, null);
public List<Company> getAllCompany(){

    List<Company> companyList = new ArrayList<Company>();
    String selectQuery = "SELECT  * FROM " + COMPANY + " ORDER BY (" + KEY_CREATED_AT + ") ";

    Log.e(TAG, selectQuery);

    SQLiteDatabase db = dbHelper.getReadableDatabase();
    Cursor c = db.rawQuery(selectQuery, null);

    if (c.moveToFirst()) {
        do {
            Company com = new Company();
            com.setId(c.getInt(c.getColumnIndex(KEY_ID)));
            com.setName(c.getString(c.getColumnIndex(KEY_COMPANY_NAME)));
            com.setWebsite(c.getString(c.getColumnIndex(KEY_COMPANY_WEBSITE)));
            com.setEmail(c.getString(c.getColumnIndex(KEY_COMPANY_EMAIL)));
            com.setPhoneHome(c.getString(c.getColumnIndex(KEY_COMPANY_PHONE_HOME)));
            com.setPhonePrimary(c.getString(c.getColumnIndex(KEY_COMPANY_PHONE_PRIMARY)));
            com.setAddressLine1(c.getString(c.getColumnIndex(KEY_COMPANY_ADDRESS)));
            com.setDate(c.getString(c.getColumnIndex(KEY_CREATED_AT)));
            //com.setDate(c.getString(c.getColumnIndex(KEY_UPDATED_AT)));
            companyList.add(com);
        } while (c.moveToNext());
    }

    return companyList;
}
公开列表getAllCompany(){
List companyList=new ArrayList();
String selectQuery=“从“+COMPANY+”订单中选择*”(“+KEY\u CREATED\u AT+”);
Log.e(标签,选择查询);
SQLiteDatabase db=dbHelper.getReadableDatabase();
游标c=db.rawQuery(selectQuery,null);
if(c.moveToFirst()){
做{
Company com=新公司();
com.setId(c.getInt(c.getColumnIndex(KEY_ID));
com.setName(c.getString(c.getColumnIndex(KEY_COMPANY_NAME));
com.setWebsite(c.getString(c.getColumnIndex(KEY_COMPANY_WEBSITE));
com.setEmail(c.getString(c.getColumnIndex(KEY_COMPANY_EMAIL));
setPhoneHome(c.getString(c.getColumnIndex(KEY_COMPANY_PHONE_HOME));
setPhonePrimary(c.getString(c.getColumnIndex(KEY_COMPANY_PHONE_PRIMARY));
setAddressLine1(c.getString(c.getColumnIndex(KEY_COMPANY_ADDRESS));
setDate(c.getString(c.getColumnIndex(KEY_CREATED_AT));
//setDate(c.getString(c.getColumnIndex(KEY_UPDATED_AT));
companyList.add(com);
}而(c.moveToNext());
}
返回公司列表;
}
请参见下图,了解数据未按日期和时间显示:

帮帮我:)


提前感谢

您缺少order by子句中查询的“order”

String selectQuery = "SELECT  * FROM " + COMPANY + " ORDER BY (" + KEY_CREATED_AT + " DESC)";

您可以根据需要的行为使用ASC或DESC。

您的查询中缺少order by子句中的“order”

String selectQuery = "SELECT  * FROM " + COMPANY + " ORDER BY (" + KEY_CREATED_AT + " DESC)";

您可以根据需要的行为使用ASC或DESC。

以下是完整的实现示例。

如果创建的关键字是char或varchar,而不是日期,那么您可以简单地使用orderby子句

您可以使用CONVERT将值更改为日期并按该日期排序

SELECT * 
FROM 
     COMPANY
ORDER BY 
   CONVERT(DateTime, KEY_CREATED_AT ,101)  DESC
问题是,正如Sparky在评论中指出的那样,如果KEY_CREATED_AT的值不能转换为日期,则查询将不会执行

这意味着您应该排除坏行,或者让坏行进入结果的底部

要排除坏行,只需添加WHERE IsDate(KEY_CREATED_AT)=1

要让糟糕的日期见底,您需要使用CASE

e、 g


下面是完整的实现示例。

如果创建的关键字是char或varchar,而不是日期,那么您可以简单地使用orderby子句

您可以使用CONVERT将值更改为日期并按该日期排序

SELECT * 
FROM 
     COMPANY
ORDER BY 
   CONVERT(DateTime, KEY_CREATED_AT ,101)  DESC
问题是,正如Sparky在评论中指出的那样,如果KEY_CREATED_AT的值不能转换为日期,则查询将不会执行

这意味着您应该排除坏行,或者让坏行进入结果的底部

要排除坏行,只需添加WHERE IsDate(KEY_CREATED_AT)=1

要让糟糕的日期见底,您需要使用CASE

e、 g


排序数据时VARCHAR不适用于date。您可以在数据库中插入毫秒,并在视图中显示时格式化日期

insertCompany
方法中替换此行

values.put(DatabaseHelper.KEY_CREATED_AT, System.currentTimeMillis());
从数据库获取数据时替换此行

long time = Long.parseLong(c.getString(c.getColumnIndex(KEY_CREATED_AT)));
com.setDate(getFromatDate(time));
方法从毫秒格式化数据

public String getFromatDate(long dateTime) {
    String formatedDate;
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(dateTime);
    Date mDate = calendar.getTime();
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy hh:mm a", new Locale("en"));
    formatedDate = sdf.format(mDate);
    return formatedDate;
}
此外,您还可以在查询结束时添加
DESC
,请参见以下代码:

String selectQuery = "SELECT  * FROM " + COMPANY + " ORDER BY (" + KEY_CREATED_AT + ") DESC " ;

排序数据时VARCHAR不适用于date。您可以在数据库中插入毫秒,并在视图中显示时格式化日期

insertCompany
方法中替换此行

values.put(DatabaseHelper.KEY_CREATED_AT, System.currentTimeMillis());
从数据库获取数据时替换此行

long time = Long.parseLong(c.getString(c.getColumnIndex(KEY_CREATED_AT)));
com.setDate(getFromatDate(time));
方法从毫秒格式化数据

public String getFromatDate(long dateTime) {
    String formatedDate;
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(dateTime);
    Date mDate = calendar.getTime();
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy hh:mm a", new Locale("en"));
    formatedDate = sdf.format(mDate);
    return formatedDate;
}
此外,您还可以在查询结束时添加
DESC
,请参见以下代码:

String selectQuery = "SELECT  * FROM " + COMPANY + " ORDER BY (" + KEY_CREATED_AT + ") DESC " ;


是否首先使用最新数据?是@NiranjPatelorder by
field
desc如果它不起作用,请使用毫秒代替日期字符串或使用日期时间数据类型。您必须更改以DB存储值的格式,存储日期的毫秒数或yyyymmddhhMMss。是否要先存储最新值?是@NiranjPatelorder by
field
desc如果它不起作用,请使用毫秒代替日期字符串或使用日期时间数据类型。您必须更改以DB为单位的存储值的格式,存储毫秒的日期或yyyymmddhhMMss。我也会尝试这一个,但对mewell没有用处谢谢你的建议,但是在我开始写答案时没有任何评论。我也会尝试这一个,但对mewell没有用处谢谢你的建议,但是,在我开始编写答案时,没有人提出任何意见。我希望获取所有数据,而不是任何单个数据或选定数据。使用日期过滤器的时间戳这是您可以对所有文件使用按转换顺序(datetime,EventDate)描述的最佳方法。什么是EventDate@KrishankTripathi只需传递变量即可,即KEY_CREATED_DATE,其值为字符串中的DATE或varchar代替Eventdate。我希望获取所有数据,而不是任何单个数据或选定数据使用时间戳进行日期筛选这是您可以对所有文件使用order by CONVERT(datetime,Eventdate)desc的最佳方法Eventdate是什么@KrishankTripathis只需传递您的变量,即KEY_CREATED_DATE,其值为字符串中的DATE或varchar代替Eventdate。我可以更改