2015-11-03 6 views
0

У меня проблема с получением ID из таблицы.Извлечение ID из SQLite, Android

В проекте у меня есть база данных SQLite, которая содержит две таблицы: студенты и отделы.

Отделка отдела заполняется мной. Я прочитал данные из этой таблицы Spinner. Как я могу получить идентификатор отдела из таблицы и сохранить его в таблице учеников?

Я не хочу сохранять данные в таблицу отделов, потому что она завершена.

AddActivity.class:

public class AddActivity extends AppCompatActivity implements OnClickListener { 

private DatabaseHandler dbCreate; 
EditText etImie, etNazwisko, etIndeks, etEmail, etWydzial, etKierunek, etTelefon, etShow; 
Button btnSave, btnDisplay; 
Spinner spSpinner; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_add); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    etImie = (EditText)  findViewById(R.id.etImie); 
    etNazwisko = (EditText) findViewById(R.id.etNazwisko); 
    etIndeks = (EditText) findViewById(R.id.etIndeks); 
    etEmail = (EditText) findViewById(R.id.etEmail); 
    // etWydzial = (EditText) findViewById(R.id.etWydzial); 
    etKierunek = (EditText) findViewById(R.id.etKierunek); 
    etTelefon = (EditText) findViewById(R.id.etTelefon); 
    etShow = (EditText)  findViewById(R.id.etShow); 
    spSpinner = (Spinner) findViewById(R.id.spSpinner); 

    btnSave = (Button)  findViewById(R.id.btnSave); 
    btnSave.setOnClickListener(this); 
    btnDisplay = (Button) findViewById(R.id.btnDisplay); 
    btnDisplay.setOnClickListener(this); 

    dbCreate = new DatabaseHandler(this.getApplicationContext()); 

    ArrayList<String> list = dbCreate.getAllDepartments(); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item,list); 
    spSpinner.setAdapter(adapter); 
} 

public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_baza_stud, menu); 
    return true; 
} 

private void insertInStudentTable(String imie, String nazwisko, int indeks, String email, String wydzial, String kierunek, String telefon) { 
    SQLiteDatabase db = dbCreate.getWritableDatabase(); 

    ContentValues data_2 = new ContentValues(); 

    data_2.put("wydzial",  wydzial); 
    data_2.put("kierunek", kierunek); 

    long idOfDepart = db.insertOrThrow("departments", null, data_2); 

    ContentValues data = new ContentValues(); 

    data.put("imie",  imie); 
    data.put("nazwisko", nazwisko); 
    data.put("indeks", indeks); 
    data.put("email", email); 
    data.put("numer", telefon); 
    data.put("dept_id", idOfDepart); 

    db.insertOrThrow("students", null, data); 
} 



public void onClick(View v) { 
    if(v.getId() == R.id.btnSave) { 
     try { 
      String imie =  etImie.getText().toString(); 
      String nazwisko = etNazwisko.getText().toString(); 
      String sIndex =  etIndeks.getText().toString(); 
      int indeks =  Integer.parseInt(sIndex); 
      String email =  etEmail.getText().toString(); 
      String wydzial = etWydzial.getText().toString(); 
      String kierunek = etKierunek.getText().toString(); 
      String telefon = etTelefon.getText().toString(); 

      if(imie.length() == 0 || nazwisko.length() == 0 || sIndex.length() == 0 || email.length() == 0 || wydzial.length() == 0 || kierunek.length() == 0 || telefon.length() == 0){ 
       Toast.makeText(getApplicationContext(),"Fill data.", Toast.LENGTH_SHORT).show(); 
      }else{ 
       insertInStudentTable(imie, nazwisko, indeks, email, wydzial, kierunek, telefon); 
       Toast.makeText(getApplicationContext(), "Student has been created: " + imie + " " + nazwisko + " .", Toast.LENGTH_SHORT).show(); 
      } 
     } catch (SQLiteException e) { 
      System.err.println(e.toString()); 
     } finally { 
      dbCreate.close(); 
     } 
    } 

}// end of onClick method} 

DatabaseHandler.class:

public class DatabaseHandler extends SQLiteOpenHelper { 

    private static final int DATABASE_VERSION = 2; 
    private static final String TAG = "DatabaseHandler"; 
    private static final String DATABASE_NAME = "studencibazadb.db"; 

    private static final String ID_COLUMN = "id"; 

    // pola tabeli "wydzial" 
    public static final String TABLE_DEPARTMENTS = "departments", 
      KEY_DEPARTMENT =  "wydzial", 
      KEY_SPECIALIZATION = "kierunek"; 
    // pola tabeli "students" 
    public static final String TABLE_STUDENTS = "students", 
      KEY_FIRSTNAME =   "imie", 
      KEY_SURNAME =   "nazwisko", 
      KEY_INDEKS =   "indeks", 
      KEY_EMAIL =    "email", 
      KEY_NUMER =    "numer", 
      STUDENT_DEPARTMENT_ID = "dept_id"; 

    public DatabaseHandler(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     db.execSQL("CREATE TABLE " + TABLE_DEPARTMENTS + "(" + ID_COLUMN + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_DEPARTMENT + " TEXT NOT NULL," + KEY_SPECIALIZATION + " TEXT NOT NULL)"); 
     db.execSQL("CREATE TABLE " + TABLE_STUDENTS + "(" + ID_COLUMN + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_FIRSTNAME + " TEXT NOT NULL," + KEY_SURNAME + " TEXT NOT NULL," + KEY_INDEKS + " INTEGER NOT NULL," + KEY_EMAIL + " TEXT NOT NULL," + KEY_NUMER + " TEXT NOT NULL," + STUDENT_DEPARTMENT_ID + " INT)"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_DEPARTMENTS); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_STUDENTS); 
     onCreate(db); 
    } 

    public ArrayList<String> getAllDepartments() { 
     ArrayList<String> list = new ArrayList<String>(); 
     SQLiteDatabase db = this.getReadableDatabase(); 
     db.beginTransaction(); 
     try{ 
      String selectQuery = "SELECT * FROM " + TABLE_DEPARTMENTS; 
      Cursor cursor = db.rawQuery(selectQuery, null); 

      if(cursor.getCount() > 0){ 
       while(cursor.moveToNext()){ 
        String depname = cursor.getString(cursor.getColumnIndex("wydzial")); 
        list.add(depname); 
       } 
      } 
      db.setTransactionSuccessful(); 
     }catch(SQLiteException e){ 
      e.printStackTrace(); 
     } 
     finally{ 
      db.endTransaction(); 
      db.close(); 
     } 
     return list; 
    } 
} 

ответ

0

В ваших "getDepartments()" функции, вы можете получить идентификатор отдела в то время как вы извлекая "wydzial" значение, как и :

Integer depId = cursor.getString(cursor.getColumnIndex("id")); 

Как вы его храните для использования, зависит только от вас. Я бы предложил HashMap, где индекс - это идентификатор, а значение - имя_памята.

+0

И как я могу добавить этот идентификатор в функцию «insertInStudentTable()»? –

+0

Вы получаете ошибку от функции insertInStudentTable? Если да, можете ли вы вставить его? – MHardwick

+0

Без дополнительной информации, мое лучшее предположение о том, что происходит не так, заключается в том, что вы инициализировали инициализацию etWydzial, и это вызывает либо ошибку, либо вызывает невозможность запуска функции insertInStudentTable. – MHardwick

Смежные вопросы