当前位置: 首页 > 面试题库 >

Android-SQLite-在Date1和Date2之间选择

闻人嘉悦
2023-03-14
问题内容

Mac OS-X

安卓系统

带有ADT的Eclipse

SQLite的

我是创建Android应用程序的新手,但Ive对此进行了深入研究,但是却一无所获。我需要查询我的SQLite数据库以返回2个日期之间的所有行。到目前为止,我从研究中了解到,Android的SQLite数据库中没有DateTime列,因此我必须将其保存为文本列。但是我认为问题出在尝试比较字符串,但我想不出解决方法。这是我的代码:

DB = currentContext.openOrCreateDatabase(DBName, 0, null);
DB.execSQL("CREATE TABLE IF NOT EXISTS " + tableName + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, Date VARCHAR(40), Hours INT(3));");

我没有收到任何错误,但没有从RawQuery返回任何结果。这是我的代码:

Cursor c = newDB.rawQuery("select ID, Date, Hours from " + tableName + " where Date BETWEEN '" + date1 + " 00:00:00' AND '" + date2 + " 99:99:99'", null);

if (c != null ) {
  Log.d(TAG, "date1: "+date1);
  Log.d(TAG, "date2: "+date2);
  if  (c.moveToFirst()) {
     do {
        int id = c.getInt(c.getColumnIndex("ID"));
        String date1 = c.getString(c.getColumnIndex("Date"));
        int hours1 = c.getInt(c.getColumnIndex("Hours"));
        results.add(+ id + "    Date: " + date1 + "    Hours: " + hours1);
     }
         while (c.moveToNext());
      }
}

我也尝试了以下语句,但是它们也不产生结果:

Cursor c = newDB.rawQuery("select ID, Date, Hours from " + tableName + " where Date BETWEEN " + Date(date1) + " AND " + Date(date2) + "", null);

我从其他StackOverflow答案中得到了此语句,但找不到有关date()方法的任何文档。我不确定现在是否已经过时,但是我收到错误消息,说“类型(类名)的Date(String)方法未定义”,并且我尝试导入一些JAVA库。

有谁知道正确的方法来创建rawData()查询,该查询将获取选定日期之间的行?

进一步的信息,这些是我的INSERT语句和进入数据库的日期格式:

newDB.execSQL("INSERT INTO " + tableName + " (Date, Hours) Values ('" + ph_date + "'," + hours + ");");
String date1 = "12/1/13"
String date2 = "25/1/13"

问题答案:

好的,所以我无法获得字符串日期,因此我不得不将字符串日期转换为Calendar Dates到Unix
Time,然后再将它们添加到SQLite数据库,并在显示它们时将它们转换回(Unix Time到Calendar Dates到String)。Unix
Time允许对日期列进行计算(排序,升序,在其他之间进行排序),这是经过长时间的反复试验后使用的最佳方法。这是我最终使用的代码:

Cursor c = newDB.rawQuery("select ID, Date, Hours from " + tableName + " where Date BETWEEN '" + startDateQueryDate + "' AND '" + endDateQueryDate + "' ORDER BY Date ASC", null);

            if (c != null ) {
                if  (c.moveToFirst()) {
                    do {
                        int tempId = c.getInt(c.getColumnIndex("ID"));
                        long tempUnixTime = c.getLong(c.getColumnIndex("Date"));

                        //convert tempUnixTime to Date
                        java.util.Date startDateDate = new java.util.Date(tempUnixTime);

                        //create SimpleDateFormat formatter
                        SimpleDateFormat formatter1;
                        formatter1 = new SimpleDateFormat("dd/MM/yyyy", Locale.UK);

                        //convert Date to SimpleDateFormat and convert to String
                        String tempStringStartDate = formatter1.format(startDateDate);

                        int tempHours = c.getInt(c.getColumnIndex("Hours"));
                        results.add(+ tempId + "    Date: " + tempStringStartDate + "    Hours: " + tempHours);
                    }while (c.moveToNext());
                }
            }


 类似资料:
  • 问题内容: AStringis-aCharSequence。Java库中有许多方法可以接受,因此它们的操作范围更广。某些类具有方法(例如),并且还使用等效方法(例如)实现。 如果我正在编写一个委托给此类的类,并且需要一些文本输入,则可以将输入选择为a 或a 。通过为客户提供更多选择,选择后一种将使类更灵活。但是我看不到有太多这样做的代码:文本参数几乎总是a 而不是a 。使用不利吗?有表现上的打击吗

  • 试图在空手道框架和应用编程接口自动化的Rest保证之间进行选择,包括Rest应用编程接口和图形QL。我们还可以增强框架来执行用户界面自动化 我经历了寻找的一般过程: 空手道专为GraphQL设计:https://stackoverflow.com/a/47469363/143475 空手道和“放心”的比较:https://github.com/intuit/karate#comparison-放心

  • 问题内容: 我在这里找到执行跟踪任务的最惯用的方法。 任务 : 将数据从通道写入文件。 问题 : 我有一个频道 我需要从通道读取并将从通道读取的值写入文件。我的问题基本上是鉴于 如果通道已满,请立即写入值 如果通道未满,则每5s写一次。 因此,从本质上讲,至少需要每5s将数据写入文件一次(假设至少每5s将数据填充到通道中一次) 请告诉我用最好的方式,并做到我上面的任务吗? 谢谢! 问题答案: 没有

  • 桌面视频 我想选择从给定时间间隔6个月的行。新的还是旧的 因此,如果查询时间为例如1446076800,则将选择比该时间早6个月或新6个月的所有行。 采用UNIX TIMESTAMP格式。 因此,如果一个视频是在2015年10月上传的,所有在2015年4月上传的视频和更新的视频都将被选中。从2015年10月到2016年4月的所有视频也将被选中。

  • 问题内容: 为表定义模式之间和之间有什么区别 吗?当使用int主键时,我得到了 东西 。当整数主键,我得到表生成。有什么不同?第一个和第二个变体会产生哪些副作用? 问题答案: 更新:SQLite的ROWID列现在是64位整数: 在SQLite中,类型为INTEGER PRIMARY KEY的列是ROWID的别名(在WITHOUT ROWID表中除外),该别名始终是64位有符号整数。 所有这些都在S

  • 问题内容: 我正在尝试在2列之间选择一个值。这是我的数据集 我的目标是(如果我的值为2)是选择 ID为1 (在from和to之间)的行。所以这是我正在使用的查询: 这是MySQL执行此查询时返回的结果: 我正在寻找的结果如下: 我尝试使用<和>等。但是,我总是得到两个结果。任何帮助将非常感激。 问题答案: 所以,您不希望下限具有包容性,对吗?