2014-02-14 12 views
0

저는 새로운 데이터베이스 (SQLite)이고 안드로이드에서 다중 테이블 데이터베이스를 만들려고합니다. 각 테이블에는 동일한 행 (id, name, ph_number)이 있습니다. 모든 테이블에는 "연락처"개체가 저장됩니다.다중 테이블 데이터베이스 SQLite android

addContactDatos (Contact contact, int partido) 메소드를 사용하여 하나의 테이블에 연락처를 저장하려는 경우 원하는 테이블뿐만 아니라 모든 테이블에 저장됩니다. 어떻게 해결할 수 있습니까?

은 처리기입니다 :

public class DatabaseHandler extends SQLiteOpenHelper { 

// Database Version 
private static final int DATABASE_VERSION = 1; 

// Database Name 
private static final String DATABASE_NAME = "contactsManager"; 

// Contacts Tables names 
private static final String TABLE_PRIMERO = "contacts"; 
private static final String TABLE_SEGUNDO = "contacts"; 
private static final String TABLE_TERCERO = "contacts"; 
private static final String TABLE_CUARTO = "contacts"; 

// Contacts Table Columns names 
private static final String KEY_ID = "id"; 
private static final String KEY_NAME = "name"; 
private static final String KEY_PH_NO = "phone_number"; 

int oldVersion=1; 

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

// Creating Tables 
@Override 
public void onCreate(SQLiteDatabase db) { 

    String CREATE_CONTACTS_TABLE1 = "CREATE TABLE_PRIMERO " + TABLE_PRIMERO + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
      + KEY_PH_NO + " TEXT" + ")"; 
    db.execSQL(CREATE_CONTACTS_TABLE1); 


    String CREATE_CONTACTS_TABLE2 = "CREATE TABLE_SEGUNDO " + TABLE_SEGUNDO + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
      + KEY_PH_NO + " TEXT" + ")"; 
    db.execSQL(CREATE_CONTACTS_TABLE2); 


    String CREATE_CONTACTS_TABLE3 = "CREATE TABLE_TERCERO " + TABLE_TERCERO + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
      + KEY_PH_NO + " TEXT" + ")"; 
    db.execSQL(CREATE_CONTACTS_TABLE3); 


    String CREATE_CONTACTS_TABLE4 = "CREATE TABLE_CUARTO " + TABLE_CUARTO + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
      + KEY_PH_NO + " TEXT" + ")"; 
    db.execSQL(CREATE_CONTACTS_TABLE4);  
} 

// Upgrading database 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRIMERO); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_SEGUNDO); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_TERCERO); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CUARTO); 

    // Create tables again 
    onCreate(db); 
} 

public void addContactDatos(Contact contact, int partido) { 

    SQLiteDatabase db = this.getWritableDatabase(); 

    // Inserting Row 
    if (partido == 1) { 
     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME, contact.getName()); // Contact Name 
     values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone Number 

     db.insert(TABLE_PRIMERO, null, values); 
     db.close(); // Closing database connection 
     Log.d("Entra","MAL"); 
    } 

// Inserting Row 
    if (partido == 2) { 
     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME, contact.getName()); // Contact Name 
     values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone Number 
     db.insert(TABLE_SEGUNDO, null, values); 
     db.close(); // Closing database connection 
     Log.d("Entra","2"); 
       } 

// Inserting Row 
    if (partido == 3) { 
     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME, contact.getName()); // Contact Name 
     values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone Number 
     db.insert(TABLE_TERCERO, null, values); 
     db.close(); // Closing database connection 
     Log.d("Entra","MAL"); 
    } 

// Inserting Row 
    if (partido == 4) { 
     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME, contact.getName()); // Contact Name 
     values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone Number 
     db.insert(TABLE_CUARTO, null, values); 
     db.close(); // Closing database connection 
     Log.d("Entra","MAL"); 
    } 



} 


// Getting All Contacts 
public List<Contact> getAllContacts(int partido) { 

    List<Contact> contactList = new ArrayList<Contact>(); 
    String selectQuery=""; 
// Select All Query 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    switch (partido){ 
    case 1: 
     selectQuery = "SELECT * FROM " + TABLE_PRIMERO; 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Contact contact = new Contact(); 
       contact.setID(Integer.parseInt(cursor.getString(0))); 
       contact.setName(cursor.getString(1)); 
       contact.setPhoneNumber(cursor.getString(2)); 
       // Adding contact to list 
       contactList.add(contact); 
      } while (cursor.moveToNext()); 
     } 
    break; 

    case 2: 
     selectQuery = "SELECT * FROM " + TABLE_SEGUNDO; 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Contact contact = new Contact(); 
       contact.setID(Integer.parseInt(cursor.getString(0))); 
       contact.setName(cursor.getString(1)); 
       contact.setPhoneNumber(cursor.getString(2)); 
       // Adding contact to list 
       contactList.add(contact); 
      } while (cursor.moveToNext()); 
     } 
     break; 

    case 3: 
     selectQuery = "SELECT * FROM " + TABLE_TERCERO; 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Contact contact = new Contact(); 
       contact.setID(Integer.parseInt(cursor.getString(0))); 
       contact.setName(cursor.getString(1)); 
       contact.setPhoneNumber(cursor.getString(2)); 
       // Adding contact to list 
       contactList.add(contact); 
      } while (cursor.moveToNext()); 
     } 
     break; 

    case 4: 
     selectQuery = "SELECT * FROM " + TABLE_CUARTO; 


     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Contact contact = new Contact(); 
       contact.setID(Integer.parseInt(cursor.getString(0))); 
       contact.setName(cursor.getString(1)); 
       contact.setPhoneNumber(cursor.getString(2)); 
       // Adding contact to list 
       contactList.add(contact); 
      } while (cursor.moveToNext()); 
     } 
     break; 

    } 


    // return contact list 
    return contactList; 
} 

public void deleteDB() { 

    SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(TABLE_PRIMERO, null, null); 
    db.delete(TABLE_SEGUNDO, null, null); 
    db.delete(TABLE_TERCERO, null, null); 
    db.delete(TABLE_CUARTO, null, null); 

} 

그리고이 개체 모델 접촉이다 공용 클래스 연락 {

//private variables 
int _id; 
String _name; 
String _phone_number; 

// Empty constructor 
public Contact(){ 

} 
// constructor 
public Contact(int id, String name, String _phone_number){ 
    this._id = id; 
    this._name = name; 
    this._phone_number = _phone_number; 
} 

// constructor 
public Contact(String name, String _phone_number){ 
    this._name = name; 
    this._phone_number = _phone_number; 
} 
// getting ID 
public int getID(){ 
    return this._id; 
} 

// setting id 
public void setID(int id){ 
    this._id = id; 
} 

// getting name 
public String getName(){ 
    return this._name; 
} 

// setting name 
public void setName(String name){ 
    this._name = name; 
} 

// getting phone number 
public String getPhoneNumber(){ 
    return this._phone_number; 
} 

// setting phone number 
public void setPhoneNumber(String phone_number){ 
    this._phone_number = phone_number; 
} 
} 

와트 내가 원하는 할 수있는 방법 THER입니다. 나는 약간의 도움에 정말로 감사 할 것이다. 대단히 감사합니다.

답변

5

반드시 다른 테이블 이름을 사용하십시오 !!

예 : 그렇지 않으면

// Contacts Tables names 
private static final String TABLE_PRIMERO = "contacts_1"; 
private static final String TABLE_SEGUNDO = "contacts_2"; 
private static final String TABLE_TERCERO = "contacts_3"; 
private static final String TABLE_CUARTO = "contacts_4"; 

, 당신은 항상 같은 테이블 (사용자가 만든 하나)라는 이름의 "연락처"

+0

테이블을 만들지 않았으므로 시도했지만 작동하지 않았습니다. 각 테이블마다 다른 객체 모델 (contact_1, contact_2, contact_3, contact_4)을 수행해야합니까? 또는 단지 하나? – Alberto

+0

모델을 구별 할 필요가 없습니다. 그렇다면 네 테이블 만 있으면 더 잘 살 수 있다면 4 테이블을 가질 필요가 있습니까? "id_partido"라고하는 숫자 필드를 추가하면 그 partido와 관련된 값을 삽입하고 검색 할 수 있습니다 ... 논리가있는 1000 개의 partidos가 있으면 1000 개의 테이블을 만들어야합니다. 이는 건강하지 않습니다. .. –

0

모든 테이블 이름이 동일 하나

있습니다에 노력하고 있습니다
private static final String TABLE_PRIMERO = "contacts"; 
private static final String TABLE_SEGUNDO = "contacts"; 
private static final String TABLE_TERCERO = "contacts"; 
private static final String TABLE_CUARTO = "contacts"; 

여기에 멀티 테이블이 없습니다. 연락처가 하나만있는 테이블

테이블 이름 변경

private static final String TABLE_PRIMERO = "contacts_primero"; 
private static final String TABLE_SEGUNDO = "contacts_segundo"; 
private static final String TABLE_TERCERO = "contacts_tercero"; 
private static final String TABLE_CUARTO = "contacts_cuarto";