2012-03-12 12 views
0

データベースマネージャに、homeIconsというテーブルの行の総量を返すと仮定したメソッドを書きました。しかし、0があるときは0を返し、1があるときは1を返し、3があるときは10を返します。そう、何かが私の方法が間違っている..下記を参照してください。sql liteの合計行数をカウント

public int getHomeScreenTotal(){ 

     SQLiteDatabase db=this.getReadableDatabase(); 
     Cursor c = db.rawQuery("select count(*) as count from "+ homeIcons,null); 
     c.moveToFirst(); 
     int total = c.getInt(0); 
     return total; 

} 

EDIT ので、問題はそれではありません..私は私のコードを編集した...と私は可能なちょうど約あらゆる方法で、この方法を書き換えています正しい数の行が返されていません。なぜなら、それはバイナリで数値を返すということだけです。3ではなく11を返します.5ではなく11を返し、101を返します。UHG !!!!私はちょうどintをしたい!私はこれがSQLite DBにアクセスするためのadroid/javaメソッドのバグかどうか、もし私が何かが見つからないと言うことができません..私はintにそれを打ち抜いてもダックを試みましたが、役に立たなかったのです... :(

OK

EDIT 私はちょうど次のような方法を使ってint型にバイナリを強制しようとした:無効INT::「7

public int getHomeScreenTotal(){ 

     SQLiteDatabase db=this.getReadableDatabase(); 
     int rows; 

     String bin = ""+ db.compileStatement("SELECT COUNT(*) FROM " + homeIcons).simpleQueryForLong(); 

     rows = Integer.parseInt(bin, 2); 
     return rows; 


    } 

これは

java.lang.NumberFormatExceptionのエラーがスローされます"

ここで、 "7"は、実際には返すと考えられる番号です。もし5行あるなら、無効なint "5"のエラーが出ます;あなたがデータベースをあなたのために持ち上げることをもっと幸せにするでしょう。

+2

私は私のカーソルをクローズする必要があり、あなたの方法 – dymmeh

+0

から戻る前にカーソルをクローズすることを確認してください。正しいです..問題は、カウントが長く、私はintが必要なようです。私はintとして強制してみましたが、1,2,3,4の代わりに1、10,11、100,101のようなバイナリを返します。 – erik

答えて

3

それはあなたのhomeIconsテーブル内の行数のみが含まれている1行を含むテーブルを返します

SELECT count(*) as count FROM homeIcons; 

String query = "select count(*) from " + homeIcons; 
+0

合意。同じ結果を得ることができる設定ベースのロジックがある場合は、カーソルを使用しないでください。 – SupremeDud

0

次のクエリを実行することにより、SQLiteのからの行数を取得することができます:

+---------+ 
| count | 
+---------+ 
| ### | 
+---------+ 

、あなたのアプリケーションでこのコードを使用して実行するには:

返されたバイナリ、使用のうち、進数を取得する

EDIT

String bin = "" + c.getInt(0); 
int total = Integer.parseInt(bin, 2); 
+0

常に1を返します。 – erik

+0

Javaでアンドロイド用にこれを実行しています。私がCursorを使用していない場合、見つかった行数.. – erik

+0

@erik正常に実行された場合、常に1を返すとは限りません。それがあなたが得ているものなら、あなたは別の問題を抱えています。上記のクエリは生のSQLであり、そのクエリを実行するためのJavaコードではありません。 – ewok

関連する問題