2017-03-02 9 views
-2

ネット全体を検索していましたが、これに関する解決策が見つかりません。正しいsqliteクエリーが正しくない出力

私は自分のアンドロイドアプリケーションで、どのプレーヤーが最適な時間を持っているかを示しています。

私はこのコードを持っている:

  int newM = seconds + minutes * 60; //converting to seconds 
     Log.e("minutes:", newM + ""); 
     dataHelper.insertData(pNameC.getText().toString(), newM, currentDateandTime, Category.leve); 

それは、プレイヤー、プレイヤーがゲームを解く終えた時、および現在の日付の名前を挿入します。

データベースを読み、UI上のテーブルを作成するには、私はこのコードを持っている:プレイヤーは正確に1時40分でゲームを終了し、それを取得の上にいるとき

try { 
     int i =1; 
     String selectQuery = "SELECT * FROM " + DatabaseHelper.TABLE_OUTLET + " WHERE levelofD LIKE '" + MainActivity.lvl + "' ORDER BY timeFinished ASC"; 
     Cursor cursor = db.rawQuery(selectQuery, null); 
     if (cursor.getCount() > 0) { 
      while (cursor.moveToNext()) { 

       // Read columns data 
       String playerName = cursor.getString(cursor.getColumnIndex("playerName")); 
       int timeF = Integer.parseInt(cursor.getString(cursor.getColumnIndex("timeFinished"))); 
       String dT = cursor.getString(cursor.getColumnIndex("dateToday")); 


       // dara rows 
       TableRow row = new TableRow(context); 
       row.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, 
         TableLayout.LayoutParams.WRAP_CONTENT)); 

       int m, s; 
       s = timeF % 60; 
       m = timeF/60; 

       String[] colText = {playerName, String.format("%02d:%02d", m, s), dT}; 
       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.setBackgroundColor(Color.WHITE); 
        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 
    } 

をそれが正常に動作しますが、ランキングの先頭に

以下

は私の問題をより良く理解するためのスクリーンショットです:

Screenshot

誰もがこの問題を解決する方法を知っていますか?

+0

[文字列> 2 11用]その正しい順序(https://sqliteonline.com/#fiddle-58b82e0a1acf7e6f80669ef1c066e0f0b30d356c0f62879609)[番号のない](https://sqliteonline.com/#fiddle-58b82eb1416d4783d160bfd76bc536f392093933b3de695998) – Selvin

+0

あなたは何文字列の意味ですか?しかし、私は 'new'をデータベースに' int'として挿入します... – soNice

+1

'int'はJavaコードです...私のコメントから両方のリンク(とsqlを実行)をクリックしましたか?(そして違いを見つけました)文字列 – Selvin

答えて

0

テーブルにテキストとして時間を保存しているように見えます。その理由は125(文字列として)分は61よりも小さいです。データベースに時刻を保存すると、intタイムスタンプになります。または、int分の量 - 私はあなたがそれをもっと好きだと思います。 :)

+0

私はそれをintとしてデータベースに保存します。私のコードを見てください。 'int newM' – soNice

+0

あなたのJavaコードでは' int'です。しかし、データベースにはどのようなタイプのテーブルフィールドがありますか? – Ircover

+0

これは 'int'にもあります。 – soNice

0

文字列として時間を保存したい場合は、大文字で並べ替えるように整理されたISOタイムストリングを使用できます。

したがって、125分は02:05:00になり、61分は01:01:00になります。

これにより、他の時間や日付との計算も簡単になります。

ほとんどの時間処理ライブラリがこの形式をサポートしています。 Javaでは、Javaバージョン(8より小さい)に応じて、Joda-timeを使用する必要があります。 Java 8では、java.time.format.DateTimeFormatterを参照する必要があります。

+0

私のプログラムでどのように初期化すればよいですか?あるいは、あなたは私にいくつかの例を教えてくれますか? – soNice

+0

使い方は難しくありません。Jodaについては、こちらをご覧ください: http://joda-time.sourceforge.net/quickstart.html Googleを使用すると、わかりやすい例がわかります。 –

+1

これは大丈夫です。 – soNice

0

私にこれを手伝ったすべての人々に大きな感謝をします。私はついにこの問題を解決しました。 @Selvinは正しいです。私はtimeFInishedTEXTと初期化しました。だから私はtimeFinished INTEGERすべてのおかげでクエリを変更しました。

関連する問題