我目前在Android应用程序上的时间排名有问题。我正在使用sqlite
数据库来存储用户完成解决问题的时间。我稍后会使用该sqlite
数据库来显示玩游戏的用户的排名。
例如,玩家以1:25 (1分25秒)完成拼图,应用程序将1:25
存储在sqlite数据库中。但我在这方面遇到了问题。
我可以将其作为sqlite
存储在string
上,但我无法使用ORDER
BY
。
我尝试将其存储为int
,但输出显示:无效int
我尝试将其存储为string
,同时删除冒号(:),但数据库返回“125”。
我的问题是:在sqlite
数据库上存储特定时间值的最佳方法是什么?
我阅读了有关时间和日期函数的this http://www.sqlite.org/lang_datefunc.html文档,但它似乎无法应用于自定义时间。它仅适用于现在的日期或当前时间。我需要帮助。我是一个机器人和sqlite业余爱好者。这个项目是我的论文。
接受任何意见和建议。提前谢谢!
顺便说一句,这是检索我的sqlite上所有数据的代码。这是一个测试程序,用于测试我的代码/修改代码是否有效。
try {
String selectQuery = "SELECT * FROM " + DatabaseHelper.TABLE_OUTLET + " WHERE category LIKE '" + cat + "' ORDER BY category ASC";
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
// Read columns data
int outlet_id = cursor.getInt(cursor.getColumnIndex("outlet_id"));
String outlet_name = cursor.getString(cursor.getColumnIndex("outlet_name"));
String outlet_type = cursor.getString(cursor.getColumnIndex("outlet_type"));
String category = cursor.getString(cursor.getColumnIndex("category"));
// dara rows
TableRow row = new TableRow(context);
row.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
String[] colText = {outlet_name, outlet_type, category};
for (String text : colText) {
TextView tv = new TextView(this);
tv.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
TableRow.LayoutParams.WRAP_CONTENT));
tv.setGravity(Gravity.CENTER);
tv.setTextSize(16);
tv.setPadding(5, 5, 5, 5);
tv.setText(text);
row.addView(tv);
}
tableLayout.addView(row);
}
}
db.setTransactionSuccessful();
} catch (SQLiteException e) {
e.printStackTrace();
} finally {
db.endTransaction();
// End the transaction.
db.close();
// Close database
}
}
答案 0 :(得分:5)
<form>
<input type="text" id="div1" />
<input type="text" id="div2" />
<input type="text" id="div3" />
<button onclick="ChangeText()">Submit</button>
</form>
<div id="Div5">
Text goes here
</div>
仅将此转换为秒。
那是1:25
。所以存储1 * 60 + 25 = 85
。
每次要存储时都要执行此操作。你可以在恢复方面做相反的事情。
例如,
85
您将获得sec = 85 % 60 = 25
min = 85 / 60 = 1
答案 1 :(得分:1)
根据@ShreyashSSarnayak的建议,我设法解决了这个问题。
这是结果代码:
try {
String selectQuery = "SELECT * FROM " + DatabaseHelper.TABLE_OUTLET + " WHERE category LIKE '" + cat + "' ORDER BY outlet_type ASC";
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
// Read columns data
int outlet_id = cursor.getInt(cursor.getColumnIndex("outlet_id"));
String outlet_name = cursor.getString(cursor.getColumnIndex("outlet_name"));
int outlet_type = Integer.parseInt(cursor.getString(cursor.getColumnIndex("outlet_type")));
String category = cursor.getString(cursor.getColumnIndex("category"));
// dara rows
TableRow row = new TableRow(context);
row.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
int m, s;
s = outlet_type % 60;
m = outlet_type / 60;
String[] colText = {outlet_name, String.format("%02d:%02d", m, s), category};
for (String text : colText) {
TextView tv = new TextView(this);
tv.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
TableRow.LayoutParams.WRAP_CONTENT));
tv.setGravity(Gravity.CENTER);
tv.setTextSize(16);
tv.setPadding(5, 5, 5, 5);
tv.setText(text);
row.addView(tv);
}
tableLayout.addView(row);
}
}
db.setTransactionSuccessful();
} catch (SQLiteException e) {
e.printStackTrace();
} finally {
db.endTransaction();
// End the transaction.
db.close();
// Close database
}
}
答案 2 :(得分:0)
我建议您将时间转换为秒,并将其存储为integer
。
答案 3 :(得分:0)
使用 INTEGER 作为数据库类型。检查javadoc种可用类型。然后,您需要使用标准java clases或任何其他(如果您愿意)将INTEGER值转换为时间格式。
使用INTEGER,您也可以轻松地对它们进行排序。