0

我有一个“小”问题。我有一个SQLiteDatabase(“PLB”),上面有一个名为“Flights”的表。在此表中,我有一个名为"Total_Flight_Time"TIME 类型的列,它可以将时间存储在HH:MM format. 我想计算小时和分钟的总和。类似的东西,01:20 + 01:50 = 03:10 (HH:MM)但我不知道该怎么做。

我在stackoverflow上找到了一个代码:来自DBAdapter的函数:

public Cursor getTotalTime() throws SQLException {
return db.rawQuery("SELECT sum(strftime('H%:%M', Total_Flight_Time) - strftime('H%:%M', '00:00')), 'unixepoch' FROM Flights",null);
        }

主要活动中的函数调用(它应该在文本视图中显示 SUM 结果):

DBHelper.open();
TextView txt = (TextView)findViewById(R.id.textView22);
String total = DBHelper.getTotalTime().toString();
txt.setText(total);

但在屏幕上显示:android.database.sqlite.SQLiteCursor@41aa42b8

我必须如何执行函数和函数调用来解决问题,我希望它显示 HH:MM?:)

解决了!解决方案:

DBAdapter 功能:

public Cursor getTotalTime() throws SQLException {
return db.rawQuery("SELECT time(sum(strftime('%s', Total_Flight_Time) - strftime('%s','00:00:00')),'unixepoch') FROM Flights",null);

}

主活动中的函数调用:

TextView txt = (TextView)findViewById(R.id.textView22);
        Cursor c = DBHelper.getTotalTime();

         c.moveToFirst();
         String[] names = c.getColumnNames(); // inspect this as it should have a length of 1
                 String total = c.getString(c.getColumnIndex(names[0]));

        txt.setText(total);
4

3 回答 3

1

这是您的问题的根源:

在此表中,我有一个名为“Total_Flight_Time”的列,类型为 TIME,它以 HH:MM 格式存储时间。

您在滥用TIME数据类型,因为您Total_Flight_Time实际上是在存储持续时间,而不是时间点。将类型更改为Total_Flight_Timeinteger表示持续时间中的秒数或分钟数。然后总结你的持续时间成为整数和的小事。一些算术将允许您将秒数/分钟数转换为天数、小时数、分钟数和秒数。

于 2013-07-12T19:41:19.287 回答
0

db.rawQuery(...)返回类型Cursor,因此您调用cursor.toString()的结果是您所看到的。您需要使用Cursor该类的函数来提取查询结果,然后显示结果。例如:

您可能必须将光标移动到第一行,在这种情况下,它将如下所示:

光标 c = DBHelper.getTotalTime();
c.moveToFirst();
字符串总数 = c.getString(0);

如果您不知道列索引(而不是 0),请尝试:

光标 c = DBHelper.getTotalTime();
c.moveToFirst();
String[] names = c.getColumnNames() // 检查它,因为它的长度应该是 1
String total = c.getString(c.getColumnIndex(names[0]));

如果 names.length != 1 让我知道结果。

我认为这个(或这个的一些变体)应该会有所帮助。有关更多详细信息,请参阅 Cursor 类的文档:http: //developer.android.com/reference/android/database/Cursor.html

评论回复:

c.moveToFirst();
while (c.isAfterLast() == false) {

Log.w("查询测试", "结果:" + cur.getString(0);
c.moveToNext();
}

于 2013-07-12T17:21:28.033 回答
0
SimpleDateFormat formatter = new SimpleDateFormat("HH:MM");
Date curDate = formatter.parse(DBHelper.getTotalTime().toString());
long curMillis = curDate.getTime();

然后,您可以将其添加到其他日期(再次将其转换为 long)并以日期格式显示总和。

于 2013-07-12T20:21:15.443 回答