Страница 1 из 1

Как связать 2 таблицы из разных активити?

Добавлено: 29 апр 2015, 19:26
liroykaz
Добрый вечер!
Мучаюсь с таким вопросом. Есть БД, нужно создать 2 таблицы. Одна таблица групп в одной активности, вторая таблица учащихся в другой активности.
Сначала создал 2 активности и в каждой по базе данных.

Код: Выделить всё

public DBHelper(Context context) {
            // конструктор суперкласса
            super(context, "myDB", null, DB_VERSION);
        }
то есть myDB в одной активности и myDB1 в другой, но как я понимаю, я создал 2 разных БД.
Когда ставлю одинаковое имя, ошибка - не существует таблицы с именем.
Вот класс активити групп.

Код: Выделить всё

    DBHelper dbHelper;
 
    final int DB_VERSION = 24; // версия БД
    final String DROP_TABLE = "DROP TABLE IF EXISTS "+"mygrupp";
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.redact_grupp);
 
        btnAdd = (Button) findViewById(R.id.btnAdd);
        btnAdd.setOnClickListener(this);
 
        btnUpdate = (Button) findViewById(R.id.btnUpdate);
        btnUpdate.setOnClickListener(this);
 
        btnDelete = (Button) findViewById(R.id.btnDelete);
        btnDelete.setOnClickListener(this);
 
        btnRead = (Button) findViewById(R.id.btnRead);
        btnRead.setOnClickListener(this);
 
        btnVivod = (Button) findViewById(R.id.btnVivod);
        btnVivod.setOnClickListener(this);
 
        IDGrupp = (EditText) findViewById(R.id.IDGrupp);
        NameGrupp = (EditText) findViewById(R.id.NameGrupp);
        NameFak = (EditText) findViewById(R.id.NameFak);
        NumVivod = (EditText) findViewById(R.id.NumVivod);
 
 
        // создаем объект для создания и управления версиями БД
        dbHelper = new DBHelper(this);
 
        // Описание курсора
        Cursor c;
    }
 
    public void onClick(View v) {
 
        // создаем объект для данных
        ContentValues cv = new ContentValues();
 
        // получаем данные из полей ввода
        String namegrupp = NameGrupp.getText().toString();
        String namefak = NameFak.getText().toString();
        String id = IDGrupp.getText().toString();
 
        // подключаемся к БД
 
        SQLiteDatabase db = dbHelper.getWritableDatabase();
 
        switch (v.getId()) {
            case R.id.btnAdd:
                Log.d(LOG_TAG, "--- Insert in mygrupp: ---");
                // подготовим данные для вставки в виде пар: наименование столбца -
                // значение
                cv.put("id", id);
                cv.put("namegrupp", namegrupp);
                cv.put("namefak", namefak);
 
                // вставляем запись и получаем ее ID
                long rowID = db.insert("mygrupp", null, cv);
                Log.d(LOG_TAG, "row inserted, ID = " + rowID);
                break;
            case R.id.btnRead:
                Log.d(LOG_TAG, "--- Rows in mygrupp: ---");
                // делаем запрос всех данных из таблицы mytable, получаем Cursor
                Cursor c = db.query("mygrupp", null, null, null, null, null, null);
 
                // ставим позицию курсора на первую строку выборки
                // если в выборке нет строк, вернется false
                if (c.moveToFirst()) {
 
                    // определяем номера столбцов по имени в выборке
                    int idColIndex = c.getColumnIndex("id");
                    int gruppColIndex = c.getColumnIndex("namegrupp");
                    int fakColIndex = c.getColumnIndex("namefak");
 
                    do {
                        // получаем значения по номерам столбцов и пишем все в лог
                        Log.d(LOG_TAG,
                                "ID = " + c.getInt(idColIndex) + ", namegrupp = "
                                        + c.getString(gruppColIndex) + ", namefak = "
                                        + c.getString(fakColIndex));
 
                        // переход на следующую строку
                        // а если следующей нет (текущая - последняя), то false -
                        // выходим из цикла
                    } while (c.moveToNext());
                } else
                    Log.d(LOG_TAG, "0 rows");
                c.close();
                break;
            case R.id.btnDelete:
                Log.d(LOG_TAG, "--- Clear mygrupp: ---");
                // удаляем все записи
                int clearCount = db.delete("mygrupp", null, null);
                Log.d(LOG_TAG, "deleted rows count = " + clearCount);
                break;
            case R.id.btnUpdate:
                if (id.equalsIgnoreCase("")) {
                    break;
                }
                Log.d(LOG_TAG, "--- Update mygrupp: ---");
                // подготовим значения для обновления
                cv.put("id", id);
                cv.put("namegrupp", namegrupp);
                cv.put("namefak", namefak);
                // обновляем по id
                int updCount = db.update("mygrupp", cv, "id = ?",
                        new String[] { id });
                Log.d(LOG_TAG, "updated rows count = " + updCount);
                break;
            case R.id.btnDel:
                if (id.equalsIgnoreCase("")) {
                    break;
                }
                Log.d(LOG_TAG, "--- Delete from mygrupp: ---");
                // удаляем по id
                int delCount = db.delete("mygrupp", "id = " + id, null);
                Log.d(LOG_TAG, "deleted rows count = " + delCount);
                break;
        }
        // закрываем подключение к БД
        dbHelper.close();
    }
 
    class DBHelper extends SQLiteOpenHelper {
 
        public DBHelper(Context context) {
            // конструктор суперкласса
            super(context, "myDB", null, DB_VERSION);
        }
 
        public void onCreate(SQLiteDatabase db) {
            Log.d(LOG_TAG, "--- onCreate database ---");
            // создаем таблицу с полями
            // создаем таблицу с полями
            db.execSQL("create table mygrupp ("
                    + "id integer primary key autoincrement,"
                    + "namegrupp text,"
                    + "namefak text"+ " )");
 
        /*    // создаем таблицу с полями
            db1.execSQL("create table mytable ("
                    + "id integer primary key autoincrement,"
                    + "name text,"
                    + "family text,"
                    + "birthday text,"
                    + "gruppa text"+ ")");*/
        }
 
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL(DROP_TABLE);
            onCreate(db);
        }
    }
}
Вот класс активити и студентов

Код: Выделить всё

public class RedactStudentov extends Activity implements OnClickListener {
 
    final String LOG_TAG = "myLogs";
 
    Button btnAdd, btnRead, btnClear, btnUpd, btnDel;
    EditText etName, etFamily, etID, etDR, etGruppa;
 
    DBHelper dbHelper;
 
    final int DB_VERSION = 24; // версия БД
    final String DROP_TABLE = "DROP TABLE IF EXISTS "+"mytable";
 
    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.redact_studentov);
 
        btnAdd = (Button) findViewById(R.id.btnAdd);
        btnAdd.setOnClickListener(this);
 
        btnRead = (Button) findViewById(R.id.btnRead);
        btnRead.setOnClickListener(this);
 
        btnClear = (Button) findViewById(R.id.btnClear);
        btnClear.setOnClickListener(this);
 
        btnUpd = (Button) findViewById(R.id.btnUpd);
        btnUpd.setOnClickListener(this);
 
        btnDel = (Button) findViewById(R.id.btnDel);
        btnDel.setOnClickListener(this);
 
        etName = (EditText) findViewById(R.id.etName);
        etFamily = (EditText) findViewById(R.id.etFamily);
        etID = (EditText) findViewById(R.id.etID);
        etDR = (EditText) findViewById(R.id.etDR);
        etGruppa = (EditText) findViewById(R.id.etGruppa);
 
 
        // создаем объект для создания и управления версиями БД
        dbHelper = new DBHelper(this);
    }
 
    public void onClick(View v) {
 
        // создаем объект для данных
        ContentValues cv = new ContentValues();
 
        // получаем данные из полей ввода
        String name = etName.getText().toString();
        String family = etFamily.getText().toString();
        String id = etID.getText().toString();
        String birthday = etDR.getText().toString();
        String gruppa = etGruppa.getText().toString();
 
 
 
        // подключаемся к БД
        SQLiteDatabase db = dbHelper.getWritableDatabase();
 
        switch (v.getId()) {
            case R.id.btnAdd:
                Log.d(LOG_TAG, "--- Insert in mytable: ---");
                // подготовим данные для вставки в виде пар: наименование столбца -
                // значение
                cv.put("name", name);
                cv.put("family", family);
                cv.put("birthday", birthday);
                cv.put("gruppa", gruppa);
 
                // вставляем запись и получаем ее ID
                long rowID = db.insert("mytable", null, cv);
                Log.d(LOG_TAG, "row inserted, ID = " + rowID);
                break;
            case R.id.btnRead:
                Log.d(LOG_TAG, "--- Rows in mytable: ---");
                // делаем запрос всех данных из таблицы mytable, получаем Cursor
                Cursor c = db.query("mytable", null, null, null, null, null, null);
 
                // ставим позицию курсора на первую строку выборки
                // если в выборке нет строк, вернется false
                if (c.moveToFirst()) {
 
                    // определяем номера столбцов по имени в выборке
                    int idColIndex = c.getColumnIndex("id");
                    int nameColIndex = c.getColumnIndex("name");
                    int familyColIndex = c.getColumnIndex("family");
                    int birthdayColIndex = c.getColumnIndex("birthday");
                    int gruppaColIndex = c.getColumnIndex("gruppa");
 
                    do {
                        // получаем значения по номерам столбцов и пишем все в лог
                        Log.d(LOG_TAG,
                                "ID = " + c.getInt(idColIndex) + ", name = "
                                        + c.getString(nameColIndex) + ", family = "
                                        + c.getString(familyColIndex) + ", birthday = "
                                        + c.getString(birthdayColIndex) + ", gruppa = "
                                        + c.getString(gruppaColIndex));
 
                        // переход на следующую строку
                        // а если следующей нет (текущая - последняя), то false -
                        // выходим из цикла
                    } while (c.moveToNext());
                } else
                    Log.d(LOG_TAG, "0 rows");
                c.close();
                break;
            case R.id.btnClear:
                Log.d(LOG_TAG, "--- Clear mytable: ---");
                // удаляем все записи
                int clearCount = db.delete("mytable", null, null);
                Log.d(LOG_TAG, "deleted rows count = " + clearCount);
                break;
            case R.id.btnUpd:
                if (id.equalsIgnoreCase("")) {
                    break;
                }
                Log.d(LOG_TAG, "--- Update mytabe: ---");
                // подготовим значения для обновления
                cv.put("name", name);
                cv.put("family", family);
                cv.put("birthday", birthday);
                cv.put("gruppa", gruppa);
                // обновляем по id
                int updCount = db.update("mytable", cv, "id = ?",
                        new String[] { id });
                Log.d(LOG_TAG, "updated rows count = " + updCount);
                break;
            case R.id.btnDel:
                if (id.equalsIgnoreCase("")) {
                    break;
                }
                Log.d(LOG_TAG, "--- Delete from mytabe: ---");
                // удаляем по id
                int delCount = db.delete("mytable", "id = " + id, null);
                Log.d(LOG_TAG, "deleted rows count = " + delCount);
                break;
        }
        // закрываем подключение к БД
        dbHelper.close();
    }
 
    class DBHelper extends SQLiteOpenHelper {
 
        public DBHelper(Context context) {
            // конструктор суперкласса
            super(context, "myDB", null, DB_VERSION);
        }
 
        public void onCreate(SQLiteDatabase db) {
            Log.d(LOG_TAG, "--- onCreate database ---");
            // создаем таблицу с полями
            db.execSQL("create table mytable ("
                    + "id integer primary key autoincrement,"
                    + "name text,"
                    + "family text,"
                    + "birthday text,"
                    + "gruppa text"+ ")");
 
            db.execSQL("create table mygrupp ("
                    + "id integer primary key autoincrement,"
                    + "namegrupp text,"
                    + "namefak text"+ " )");
 
 
 
        }
 
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL(DROP_TABLE);
            onCreate(db);
        }
    }
 
}
Что делаю не верно? И как связать 2 этих таблицы?
Пожалуйста помогите.

Re: Как связать 2 таблицы из разных активити?

Добавлено: 29 апр 2015, 20:50
Foenix
класс отдельный нужен, не нужно две бд заводить.
Обе активити должны обращаться к 1 классу.