当前位置: 首页 > 知识库问答 >
问题:

对于Android,我如何从SQLite中的日期和日期范围中获取数据,在SQLite中,Android变量可以传递给查询?

纪畅
2023-03-14

SimpleDateFormat dateFormat=新的SimpleDateFormat(“yyyy-mm-dd hh:mm:ss”);

共有1个答案

丰赞
2023-03-14

您可以在数据库帮助器中使用如下所示的方法:-

public Cursor getDatesInRange(String fromDate, String toDate) {
    String whereclause = COL_DATE + " >= datetime(?) and " + COL_DATE + " <= datetime(?)";
    String[] whereargs = new String[]{fromDate,toDate};
    return this.getWritableDatabase().query(
            TB_DATE,
            null,
            whereclause,
            whereargs,
            null,
            null,
            COL_DATE + " DESC"
    );
}
  • COL_DATE保存相应列的名称。
  • TB_DATE保存相应表的名称。
  • fromdate和toDate需要格式为yyyy-MM-dd、hh:mm:ss或子格式,注意hh:mm:ss(如果没有给定)等于00:00:00。
    • 例如yyyy-MM-dd在某些情况下就足够了。

    Databasehelper:-

    public static final String DBNAME = "SO50282282";
    public static final int DBVERSION = 1;
    public static final String TB_DATE = "tbl_date";
    public static final String COL_DATE = "date_column";
    
    public SO50282282DBHelper(Context context) {
        super(context, DBNAME, null, DBVERSION);
        this.getWritableDatabase();
    }
    
    @Override
    public void onCreate(SQLiteDatabase db) {
        String crtsql = "CREATE TABLE IF NOT EXISTS " +
                TB_DATE +
                "(" +
                COL_DATE + " TEXT " +
                ")";
        db.execSQL(crtsql);
    
    }
    
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
    }
    
    public long addDate(String date) {
        ContentValues cv = new ContentValues();
        cv.put(COL_DATE,date);
        return this.getWritableDatabase().insert(TB_DATE,null,cv);
    }
    
    public Cursor getDatesInRange(String fromdate, String toDate) {
        String[] columns = new String[]{"*,rowid AS id"};
        String whereclause = COL_DATE + " >= datetime(?) and " + COL_DATE + " <= datetime(?)";
        String[] whereargs = new String[]{fromdate,toDate};
        return this.getWritableDatabase().query(
                TB_DATE,
                columns,
                whereclause,
                whereargs,
                null,
                null,
                COL_DATE + " DESC"
        );
    }
    
      null

    在一项活动中:-

        SO50282282DBHelper dbhlpr = new SO50282282DBHelper(this);
        // Only insert some testing rows if there are none
        if (
                DatabaseUtils.queryNumEntries(
                dbhlpr.getWritableDatabase(),
                SO50282282DBHelper.TB_DATE
                ) < 1) {
            dbhlpr.addDate("2018-01-01 08:30:56");
            dbhlpr.addDate("2018-02-01 09:31:56");
            dbhlpr.addDate("2018-03-01 10:32:56");
            dbhlpr.addDate("2018-04-01 11:35:56");
            dbhlpr.addDate("2018-05-01 12:36:56");
            dbhlpr.addDate("2018-02-02 12:37:56");
            dbhlpr.addDate("2018-03-02 14:38:56");
        }
        // gets rows id=3 id=4 id=7
        //      (id 1, 2 and 6 before 2018-03-01)(id 5 after 2018-04-30)
        Cursor csr = dbhlpr.getDatesInRange("2018-03-01","2018-04-30");
        SO50282282LogDates(csr);
        // gets rows id = 1
        csr = dbhlpr.getDatesInRange("2018-01-01 00:00:00","2018-01-01 23:59:59");
        SO50282282LogDates(csr);
        //gets rows id = 2, 3, 4, 6 and 7
        csr = dbhlpr.getDatesInRange("2018-01-01 08:30:57","2018-05-01 12:36:55");
        SO50282282LogDates(csr);
        csr.close();
    

    日志中的结果:-

    对于其中的第一个(使用dbhlpr.getdatesinrange(“2018-03-01”,“2018-04-30”)):-

    05-11 03:56:44.777 2203-2203/? D/EXTRACTED_DATE: Date is 2018-04-01 11:35:56 from row #  4
        Date is 2018-03-02 14:38:56 from row #  7
        Date is 2018-03-01 10:32:56 from row #  3
    
        Date is 2018-01-01 08:30:56 from row #  1
    
    05-11 03:56:44.781 2203-2203/? D/EXTRACTED_DATE: Date is 2018-04-01 11:35:56 from row #  4
        Date is 2018-03-02 14:38:56 from row #  7
        Date is 2018-03-01 10:32:56 from row #  3
        Date is 2018-02-02 12:37:56 from row #  6
        Date is 2018-02-01 09:31:56 from row #  2
    

 类似资料:
  • 我有一个SQlite数据库,日期存储为字符串数据类型(dd mm-yyyy格式)。如何按日期对数据库中的行进行排序?

  • 我有一个SQLite数据库,我在其中根据给定日期从所有列获取数据,例如。2018年9月30日。在COL2中,我以相同的格式保存日期。 但是现在COL2不再有2018年9月30日这样的日期格式了。因为我已经决定在第二栏中加入数据输入时间。 所以我把COL2保存为“EEE MMM dd HH:mm:ss Z yyyy”这种格式。但是我愿意将我的“EEE MMM dd HH:mm:ss Z yyyy”格

  • audit_modifier是VARCHAR2(30个字符),并且audit_modifier值以以下格式存储[2018-01-18T17:19:47.285z]。 从TO_DATE('2018-01-16','yyyy-mm-dd')和TO_DATE('2018-01-16','yyyy-mm-dd')之间的trunc(audit_modifier)的表中选择*; ORA-00932:不一致的数

  • 问题内容: 我有一个日期变量:如果所说的日期在TODAY的3天内,我想返回一个布尔值。我不太确定如何在Python中构造它。我只处理日期,不处理日期时间。 我的工作示例是“宽限期”。一个用户登录到我的网站,如果宽限期在今天的3天之内,则该用户将省略其他脚本等。 我知道您可以在Python的日期模块中做一些花哨/复杂的事情,但我不确定在哪里看。 问题答案: 在Python中检查范围,您可以使用:

  • 问题内容: 假设我有个约会2013年6月20日 如何获取上周的日期范围,即本例中的6月9日至6月15日。 另外,如果日期是2013年6月2日 范围应该是5月26日至6月1日 问题答案: 这是基于Java日历的解决方案 输出 它已本地化,在我的“语言环境”周中,从星期一开始

  • 当我传递strDate时,它会抛出java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'boolean java.lang.String.equals(java.lang.Object)'