我有一个“小”的问题。我有一个名为“Flights”的SQLiteDatabase
(“PLB”)表。在此表中,我有一个名为"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);
答案 0 :(得分:1)
这是你问题的根源:
在此表中,我有一个名为“Total_Flight_Time”的列,类型为TIME,以HH:MM格式记忆时间。
您滥用TIME
数据类型,因为您的Total_Flight_Time
实际上存储的是持续时间,而不是某个时间点。将Total_Flight_Time
的类型更改为integer
,表示持续时间内的秒数或分钟数。然后总结你的持续时间成为整数和的一个小问题。通过一点算术,您可以将秒/分钟数转换为天,小时,分钟和秒。
答案 1 :(得分:0)
db.rawQuery(...)
会返回Cursor
类型,因此您调用cursor.toString()
会导致您看到的内容。您需要使用Cursor
类的函数来提取查询结果,然后显示结果。例如:
您可能需要将光标移动到第一行,在这种情况下它将如下所示:
光标c = DBHelper.getTotalTime();
c.moveToFirst();
String total = 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();
}
答案 2 :(得分:0)
SimpleDateFormat formatter = new SimpleDateFormat("HH:MM");
Date curDate = formatter.parse(DBHelper.getTotalTime().toString());
long curMillis = curDate.getTime();
然后,您可以将其添加到其他日期(再次将其转换为long)并以日期格式显示总和。