Как получить максимальное значение из столбца таблицы SQLite и вернуть его в переменную в MainActivity. Android Студия - PullRequest
0 голосов
/ 06 января 2020
  1. Создана таблица в DBHelper. java:

    @Override
    public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + TABLE_WORKOUT + "("
            + KEY_ID + " INTEGER PRIMARY KEY,"
            + KEY_WONUMBER + " integer,"
            + KEY_WONAME + " text,"
            + KEY_WODESCRIPTION + " text,"
            + KEY_WOICON + " text,"
            + KEY_WOCOLOR + " text" + ")");}
    
  2. В MainActivity. java onCreate будет создано несколько ОБЪЕКТОВ , которые будут отображаться в соответствии с числами из столбца KEY_WONUMBER в TABLE_WORKOUT

  3. Необходимо найти максимальное значение в KEY_WONUMBER и передать его переменная в MainActivity. java и установите следующий номер для следующего OBJECT

  4. Попытка сделать это так:

        public String getMaxNumber(){
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        Cursor c = db.query(DBHelper.TABLE_WORKOUT, new String[]
                {"MAX("+DBHelper.KEY_WONUMBER+")"},
                null, null, null, null, null);
    
        StringBuffer buffer;
        if(c.getCount()>0){
            c.moveToFirst();
            String max_id=c.getString(0);
            buffer.append(max_id);
        }
    
        c.close();
        db.close();
        return buffer.toString();
    }
    
  5. Получение следующих ошибок в r aws:

    publi c String getMaxNumber () {- ';' ожидается

    return buffer.toString (); - * не может вернуть значение из метода с пустым типом результата

Как новичку ie в Android нужна ваша помощь для решения этой проблемы

Ответы [ 2 ]

0 голосов
/ 06 января 2020

Я думаю, вы должны попробовать метод db.rawQuery ("SELECT MAX (" + DBHelper.KEY_WONUMBER + ") FROM" + DBHelper.TABLE_WORKOUT, null) вместо db.query ()

0 голосов
/ 06 января 2020

publi c String getMaxNumber () {- ';' ожидается

Вам не хватает закрытия }. Однако исправление, которое затем вводит буфер, возможно, не было инициализировано ошибкой, поскольку у вас просто StringBuffer buffer; Так что попытка добавить к нему приведет к исключению нулевого указателя. Вам нужно инициализировать буфер, например, используя StringBuffer buffer = new StringBuffer("");

return buffer.toString (); - * не может вернуть значение из метода с пустым типом результата

Это результат отсутствующего закрытия }. см. выше, как эта ошибка заменяется другой.

Исправления

Рассмотрим следующий код и комментарии к нему: -

public class MainActivity extends AppCompatActivity {

    DBHelper dbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dbHelper = new DBHelper(this);
        Log.d("MAXNUMBER", getMaxNumber());
    } //<<<<<<<<<< FIX 1 closes the onCreate method

    public String getMaxNumber () {
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        Cursor c = db.query(DBHelper.TABLE_WORKOUT, new String[]
                        {"MAX(" + DBHelper.KEY_WONUMBER + ")"},
                //{"COALESCE(MAX(" + DBHelper.KEY_WONUMBER + "),0)"}, //Alternative will return 0 instead of null if no rows

        null, null, null, null, null);
        StringBuffer buffer = new StringBuffer(""); //FIX2 initialize buffer by adding buffer = new StringBuffer("")
        if (c.moveToFirst()) { // moveToFirst will return false if no row to move to so no need to check row count
            String max_id = c.getString(0);
            buffer.append(max_id); //FIX 1 introduces might not have been inittialized (buffer hasn't been inittialized)
        }
        c.close();
        db.close(); // can be inefficient to keep on opening and closing the database
        return buffer.toString();
    }
}

Возвращается (если строк не было вставлено): -

D/MAXNUMBER: null
  • см. закомментированный запрос, который использует COALESCE для возврата 0, а не ноль в возвращаемой строке, если вы предпочитаете не обрабатывать ноль.
...