Android时间排名

时间:2017-02-15 14:30:22

标签: java android database sqlite

我目前在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
    }
}

4 个答案:

答案 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,您也可以轻松地对它们进行排序。