2016-09-20 8 views
0

SQLiteテーブルのデータの平均値をとってみようとしています。列は番号と呼ばれます。だから私は次のコードを書いた:計算をSQLite操作でどのように保存しますか?

private findMaxNumber(){ 
     db.execSQL("select avg(number) from table");   
} 

しかし、私はこれが何をもたらすか分からない。番号はどのような形式で保存されますか?

私は

private int average 

を宣言していると私は、データベースに計算されたものの値に等しい平均を設定したいです。

どうすればよいですか?

私は

private findMaxNumber(){ 
     average = db.execSQL("select avg(number) from table"); 

} 

を試してみました。しかし、これは動作しませんでした。それは "整数"と "無効"は互換性がないと言いました。これは、私のSQLiteコードが結果をもたらさないことを意味します。しかし、ここで彼らはSQLite - how to get average value?と言っていましたが、これは平均を見つけるための適切なSQLiteコードであるため、何が起こっているのか混乱しています。

UPDATE:

protected void createDatabase(){ 
      db= openOrCreateDatabase("NuPersonDB", Context.MODE_PRIVATE, null); 
      db.execSQL("CREATE TABLE IF NOT EXISTS persons(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VARCHAR,address VARCHAR, date TEXT,number INTEGER);"); 
     } 
+0

関数呼び出しは、私が更新を追加ボイドやフロート –

答えて

-1

That'sストアドプロシージャの際に指定されない限り、SQL操作は常にResultSetを取得するため。あなたは以下のような操作を実行する必要が

 import java.sql.Connection; 
     import java.sql.PreparedStatement; 
     import java.sql.ResultSet; 
     import java.sql.SQLException; 
     import java.sql.Statement; 

     ..... 

     // Your connection parameter 
     Connection con = ds.getConnection(); 
     conn = ds.getConnection(con); 

     Statement stmt = conn.createStatement();     
     String sql = "Select avg(number) from table"; 
     ResultSet rs = stmt.executeQuery(sql); 

     if(rs.next()){ 
      int average = rs.getInt(0); 
     } 
-1

:ここ

はこれを試してみてください。どの列の平均値も浮動小数点値になります。そこでfloat値を宣言し、カーソルオブジェクトを使用して選択した値を取得します。データベースを開くには、以下の方法を使用します。

private float findMaxNumber(){ 
     String sql = "select avg(number) from table"; 
     float average = 0; 
     Cursor cursor; 
     try { 
      openDataBase(); 
      cursor = db.rawQuery(sql, null); 
      while (cursor.moveToNext()) { 
       average = cursor.getFloat(0); 
      } 

     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return average; 

    } 

    public static synchronized SQLiteDatabase openDataBase() throws SQLException { 

     // Open the database 
     // String myPath = DB_PATH + DB_NAME; 

     if (db == null) { 
      db = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null,SQLiteDatabase.OPEN_READWRITE| SQLiteDatabase.NO_LOCALIZED_COLLATORS); 

     } else if (!db.isOpen()) { 
      db = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null,SQLiteDatabase.OPEN_READWRITE| SQLiteDatabase.NO_LOCALIZED_COLLATORS); 

     } 
     return db; 
    } 
1

それはあなたのクエリを実行してからの直接の結果が得られませんので、あなたは、AndroidのSQLiteを使用しているとして、それは以下を確認して、あなたが値を取る必要があり、そこからCursorを返します。

private int findMaxNumber() 
    { 
     int average = 0; 
     String selectQuery = "select avg(number) from table"; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 

     if(cursor.moveToFirst()) 
     { 
      average = cursor.getInt(0); 
     } 

     return average; 
    } 
+0

のいずれか、戻り値を持っている必要があります。更新のコードは、データベースの作成方法です。これは.getWritableDatabase()と互換性がありませんか?私のコードでは赤色で表示されています。すでにインポートを追加しました\t android.database.sqlite.SQLiteOpenHelper; しかしそれは何もしていません。 –

+0

インポートするだけでは十分ではありません。また、dbクラスでSQLiteOpenHelperを拡張する必要がある場合は、このリンクをよく理解してください。http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/ – Vickyexpert

0

execSQL()はデータを返しません。 データベースから実際の値を取得するには、代わりにrawQuery()というユーザーを指定する必要があります。これはCursorオブジェクトを返します。

カーソルから単一の値を読み取るには、さらにmoveToFirst()getXxx()コールが必要です。これは、それほど頻繁にそれのためのhelper functionがあることが起こる:

average = (int)DatabaseUtils.longForQuery(db, "select avg(number) from table", null); 
関連する問題