SQLite работа с двумя и более таблицами

139
30 ноября 2020, 08:40

Добрый день подскажите как работать с 2 таблицами? и когда нужно открывать и закрывать базу данных. Нашел пример в интернете сделал как нужно мне:

 public class DBHelper extends SQLiteOpenHelper {
   public  static final int DATABASE_VERSION=1;
   public  static final String  DATABASE_NAME="fitnes";
   public  static final String  TABLE_CONTACTS="food";
    public  static final String  TABLE_CONTACTS_2="time";
   public  static final String  KEY_ID="_id";//ид
   public  static final String  KEY_NAME="name";//название (гречка, молоко, мясо)
   public  static final String  KEY_SQUIRRELS ="Squirrels";//кол-во белка
   public  static final String  KEY_FAT ="Fat";//кол-во жиров
   public  static final String  KEY_CARBOHYDRATES ="Carbohydrates";//кол-во углеводы
   public  static final String  KEY_CALORIES ="Calories";//кол_во калорий
    public  static final String  KEY_TIME="time";//ид
    public  static final String  KEY_TYPE="typeFood";//ид
    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
            db.execSQL("create table " + TABLE_CONTACTS + "(" + KEY_ID + " integer primary key," + KEY_NAME + " text," + KEY_SQUIRRELS + " integer," + KEY_FAT + " integer," + KEY_CARBOHYDRATES + " integer," + KEY_CALORIES + " integer" + ")");//Если таблицы не существует то мы ее создаем
            db.execSQL("create table " + TABLE_CONTACTS_2 + "(" + KEY_ID + " integer primary key," + KEY_TIME + " numeric," + KEY_TYPE + " text" + ")");//Если таблицы не существует то мы ее создаем
        }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists " + TABLE_CONTACTS);
        db.execSQL("drop table if exists " + TABLE_CONTACTS_2);
        onCreate(db);//а тут обновляем таблицу
}
}

Теперь добавляю данные в таблицу:

 public void onClick(View v) {
                // SQLiteDatabase database = dbHelper.getWritableDatabase();//нужен для управления
                //ContentValues contentValues = new ContentValues();//нужен для добавления новых строк в таблицу выглядит как массив с именами столбцов и тд
                EditText NAME = (EditText) view.findViewById(R.id.edNamePro);
                EditText SQUIRRELS = (EditText) view.findViewById(R.id.edSQ);
                EditText FAT = (EditText) view.findViewById(R.id.edFA);
                EditText CARBOHYDRATES = (EditText) view.findViewById(R.id.edCAB);
                EditText CALORIES = (EditText) view.findViewById(R.id.edCAL);
                contentValues.put(DBHelper.KEY_NAME, NAME.getText().toString());
                contentValues.put(DBHelper.KEY_SQUIRRELS, SQUIRRELS.getText().toString());
                contentValues.put(DBHelper.KEY_FAT, FAT.getText().toString());
                contentValues.put(DBHelper.KEY_CARBOHYDRATES, CARBOHYDRATES.getText().toString());
                contentValues.put(DBHelper.KEY_CALORIES, CALORIES.getText().toString());
                database.insert(DBHelper.TABLE_CONTACTS, null, contentValues);
                dbHelper.close();//отключаемся от бд
                dlg.dismiss();
            }

И как я понял так я добавляю в другую :

 for (int i = 0; i < allEds.size(); i++) {//сохраняем все позициии
            EditText time = (EditText) allEds.get(i).findViewById(R.id.ed_time);//берем время
            EditText type_food = (EditText) allEds.get(i).findViewById(R.id.buffer_food_select);//берем текст который хранится в буффере который скрыт от глаз
            /*buffer_text = buffer_text + "-" + time.getText().toString();
            buffer_text_food = buffer_text_food + "+" + type_food.getText().toString() + "/";*/
            contentValues.put(DBHelper.KEY_TIME, time.getText().toString());
            contentValues.put(DBHelper.KEY_TYPE, type_food.getText().toString());
        }

Теперь пытаюсь считать данные, но ничего не происходит:

 Cursor cursor = database.query(DBHelper.TABLE_CONTACTS, null, null, null,
                null, null, null);// ТУТ ПРОИСХОДИТ СОРТИРОВКА В ДАЛЬНЕЙШЕМ ПРИГОДИТСЯ ЗАПОМНИ
        if (cursor.moveToFirst()) {
            int idindex = cursor.getColumnIndex(DBHelper.KEY_ID);
            int nameindex = cursor.getColumnIndex(DBHelper.KEY_NAME);
            int proteindex = cursor.getColumnIndex(DBHelper.KEY_SQUIRRELS);
            int jirindex = cursor.getColumnIndex(DBHelper.KEY_FAT);
            int ygliindex = cursor.getColumnIndex(DBHelper.KEY_CARBOHYDRATES);
            int calorindex = cursor.getColumnIndex(DBHelper.KEY_CALORIES);
            do {
                Log.d("mLOg ", "ID=" + cursor.getInt(idindex) +
                        "NAME= " + cursor.getString(nameindex) +
                        "Белок= " + cursor.getInt(proteindex) +
                        "JIR= " + cursor.getInt(jirindex) +
                        "YGLI= " + cursor.getInt(ygliindex) +
                        "CALOR= " + cursor.getInt(calorindex));
            } while (cursor.moveToNext());
        }

Подскажите что я сделал не так, почему данные не считываются по нажатию и как правильно работать с 2 таблицами. Если можно небольшой приме, заранее спасибо

READ ALSO
рисование на форме с параметром .setUndecorated(true);

рисование на форме с параметром .setUndecorated(true);

Как рисовать на такой конструкции без заголовка и рамки

117
Альтернатива генераторов списков из python в java

Альтернатива генераторов списков из python в java

Есть ли в Java аналоги конструкциям - генераторам как в Python, позволяющие быстро создавать/заполнять массив? Например, mass = [x for x in range(10)] Можно...

111
как сделать запись if короче

как сделать запись if короче

Можно сделать так:

112