如何从基于 sqlite 的日期约束中提取数据

Posted

技术标签:

【中文标题】如何从基于 sqlite 的日期约束中提取数据【英文标题】:how to extract data from sqlite based date constraint 【发布时间】:2013-11-19 05:04:07 【问题描述】:

我正在做一个应用程序,其中包含一个使用 sq lite 的名为“Purchase”的表。具有三个字段 id、购买金额、日期的表。当我浏览谷歌时,我知道日期字段以整数或文本形式存储在 sq lite 中。所以我使用 var char 来存储文本。 现在我的问题是我想根据日期约束显示表中的详细信息 (例如:27-7-2012 到 10-8-2013 之间的数据)我如何提取数据,因为日期字段被声明为 var char.. 任何身体都可以帮助...

【问题讨论】:

您可以直接在 DBAdapter 类中使用查询。你想要这样的例子吗?我会把它作为答案发布。仅供参考,我已将日期声明为文本(例如 27/12/2013) 如果我使用直接查询也如何比较日期的月份,因为它是字符串如果我想显示最近 2 个月的数据我该如何编写查询你能举出任何小例子吗 是的。我会尽快发布 如果您想要在自定义 ListView 中显示记录的适配器和总样本,我也可以发布它。你想要我,还是你有它? 您的数据是如何存储的?是TEXT,对,但是是哪种格式? d/m/y? 【参考方案1】:

这是我在 DBAdapter 类中使用的一种方法:

public Cursor getAllDetailsField(String date) 

        return db.rawQuery("select * from " + TABLE_NAME_FIELDW + " where "
                + KEY_DATE + " = '" + date + "'", null);
    

这里 Date 作为参数传递,这意味着当我在 Activity 中使用此方法时,我必须为该方法分配一个 Date,以便它执行查询。上面的查询只是获取我在活动中传递的日期的记录。

活动中:

private void loadFieldDatabase()

         String date = app.getDARDate(); 
            // DATE is FETCHED FROM APPLICATION CLASS OBJECT, YOU CAN SET IT
            // IN PREVIOUS OR CURRENT ACTIVITY , HOWEVER YOU MAY FETCH ANY WAY  
            // YOU WANT TO. JUST MAKE SURE WHATEVER YOU PASS, HOLDS THE DATE VALUE

                 String date = app.getDate();
        Cursor c = db.getAllDetailsField(date);
        if (c != null && c.getCount() > 0) 
            c.moveToFirst();
            for (int count = 0; count < c.getCount(); count++) 

                DBbeanclass detail = new DBbeanclass();

                detail.setDate(c.getString(c
                        .getColumnIndex(DARDBAdapter.KEY_DATE)));
                detail.setName(c.getString(c
                        .getColumnIndex(DARDBAdapter.KEY_NAME)));

                arrCustomerField.add(detail);
                c.moveToNext();
            
            c.close();
        
    

您会看到我没有为您编写查询。但我认为你可以自己做

【讨论】:

我还有 1 个疑问,我是 android 新手,所以如果这是一个愚蠢的问题,请向我道歉。我的问题是:此查询是否返回特定日期的数据...例如,如果我的日期为 25-7-2013,则查询将返回该日期的所有购买详细信息..?但我想从那天到现在 是的,它返回特定日期的数据。但是正如我在下面的答案中所写的那样,您应该尝试自己进行查询。在失败 3 天后,我解决了您遇到的相同问题。我什至没有得到 SO 的帮助。自己试试。我自己也试试。我也是一个初学者,为了记录。 Link 1 : ***.com/questions/10680793/… LINK 2: ***.com/questions/14681815/… 如果您在引用这些链接后仍然遇到问题,请告诉我。【参考方案2】:

考虑使用 SQLite appropriate 日期格式。

使用YYYY-MM-DD 格式的日期将大大简化您的代码,允许更快地进入数据库(无需获取每一行来评估代码),并且还可以利用索引来利用性能。

转换现有数据也很容易。

【讨论】:

以上是关于如何从基于 sqlite 的日期约束中提取数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQLite3 和 PostgreSQL 中的时间戳中选择日期

如何根据日期列中的月份从 SQLite 中获取数据

如何使用 sequelize 基于 sqlite3 中的“日期”列进行查询?

如何从 Sqlite ( android ) 中的 datetime 字段获取日期

如何从sqlite中选择一个日期

如何为基于文档的核心数据应用程序的保存对话框预设文件格式到 sqlite?