2012-09-09 3 views
0

관계형 데이터베이스의 데이터로 ListView를 채우려고합니다. 내가 성취하고자하는 것은 각 간호사에게 NURSE_TABLE과 그 간호사에게 할당 된 방 번호를 보여주는 것입니다. 결과적으로 두 개의 버튼을 보여주는 레이아웃과 빈 ListView가 생깁니다.다중 테이블 SQLite 데이터베이스가있는 ListView

데이터베이스를 작성하는 코드는 다음과 같습니다

public void onCreate(SQLiteDatabase db) { 
// create NURSE_TABLE 
db.execSQL("CREATE TABLE " + NURSE_TABLE + " (" + KEY_NURSE_ROWID 
     + " INTEGER PRIMARY KEY AUTOINCREMENT, " +   KEY_LNAME 
     + " TEXT NOT NULL, " + KEY_FNAME + " TEXT NOT NULL, " 
     + KEY_MI + " TEXT, " + KEY_EMAIL + " TEXT NOT NULL, " 
     + KEY_PHONE_PRIMARY + " TEXT NOT NULL, " 
     + KEY_PHONE_SECONDARY + " TEXT, " + KEY_FTE 
     + " TEXT NOT NULL, " + KEY_DUTY_STATUS + " TEXT NOT NULL);"); 

// create ROOM_TABLE 
db.execSQL("CREATE TABLE " + ROOM_TABLE + " (" + KEY_ROOM_ROWID 
     + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_TYPE_PATIENT 
     + " TEXT, " + KEY_OCCUPIED + " TEXT NOT NULL, " 
     + KEY_ROOM_NUMBER + " TEXT NOT NULL, " 
     + KEY_ASSIGNED_NURSE + " INTEGER, " 
     + " FOREIGN KEY (" + KEY_ASSIGNED_NURSE + ") REFERENCES " 
     + NURSE_TABLE + " (" + KEY_NURSE_ROWID + "));"); 
    } // onCreate 

활동에 대한 코드는 다음과 같습니다

public Cursor getNurseRosterCursor (Context context) { 

    SQLiteQueryBuilder nurseQueryBuilder = new SQLiteQueryBuilder(); 
    nurseQueryBuilder.setTables("NURSE_TABLE, ROOM_TABLE"); 

    String[] returnedColumns = new String[] { 
      "Nurse_Table._id", 
      "Nurse_Table._dutyStatus", 
      "Nurse_Table._lName", 
      "Nurse_Table._FName", 
      "Nurse_Table._mi", 
      "Room_Table._id", 
      "Room_Table._roomNumber"}; 

    Cursor nurseCursor = nurseQueryBuilder.query(sqldb, returnedColumns, 
      null, null, null, null, null); 

    return nurseCursor; 
} 

:

public void displayNurseRoster(){ 

    ListView listView = (ListView) findViewById(R.id.list); 

    // int variables filled with NURSE_TABLE data 
    int[] to_nurseTable = new int[] { 

      // int list for data from NURSE_TABLE fields 
      R.id.rosterDutyStatus, 
      R.id.rosterListLname, 
      R.id.rosterListFname, 
      R.id.rosterListMI, 
      R.id.rosterListID, 

      // int list for data from ROOM_ROWID fields 
      R.id.firstAssignment, 
      R.id.secondAssignment, 
      R.id.thirdAssignment, 
      R.id.fourthAssignment, 
      R.id.fifthAssignment, 
      R.id.sixthAssignment }; 

    // String array holding data fields from NURSE_TABLE 
    String[] from_nurseTable = new String [] { 

      // fields from NURSE_TABLE 
      DbCommunicator.KEY_DUTY_STATUS, 
      DbCommunicator.KEY_LNAME, 
      DbCommunicator.KEY_FNAME, 
      DbCommunicator.KEY_MI, 
      DbCommunicator.KEY_NURSE_ROWID, 
      DbCommunicator.KEY_ROOM_NUMBER}; 

    // instantiate instance of DbCommunicator object 
    rosterView = new DbCommunicator(this); 

    // open instance 
    rosterView.open(); 

    // get & manage cursor for NURSE_TABLE data 
    Cursor nurseTableCursor = rosterView.getNurseRosterCursor(this); 
    startManagingCursor(nurseTableCursor); 

    // instantiate cursor adaptor 
    ListAdapter nurseTableAdapter = new SimpleCursorAdapter(this, 
    R.layout.nurse_list, nurseTableCursor, from_nurseTable, to_nurseTable); 

    nurseTableCursor.moveToNext(); 

    // set adapter to listView 
    listView.setAdapter(nurseTableAdapter); 
}// displayNurseRoster() 

커서를 생성하는 코드는 다음과 같습니다 마지막으로 내 레이아웃은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:background="#81BEF7" 
android:orientation="vertical" > 

<Button 
    android:id="@+id/btnAddNurseToRoster" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/add" 
    android:focusable="true"/> 

<Button 
    android:id="@+id/btnRemoveNurseFromRoster" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignTop="@+id/btnAddNurseToRoster" 
    android:layout_toRightOf="@+id/btnAddNurseToRoster" 
    android:text="@string/delete" 
    android:focusable="true"/> 

<ListView 
    android:id="@+id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@+id/btnAddNurseToRoster" 
    android:textColor="#FFFFFF" 
    android:textStyle="bold"/> 

</RelativeLayout> 

처음 시작했을 때, ListView에 Nurses Table의 데이터가 채워져 있었지만 두 테이블을 함께 사용하기 시작한 이래로 시간이 충분했습니다.

도움/지시 사항을 매우 높이 평가하겠습니다.

+0

정확히 무엇이 문제입니까? –

+0

레이아웃은 상단에 두 개의 버튼이 표시되지만 목록보기는 완전히 비어 있습니다. logcat에 아무런 오류가 보이지 않습니다. – deadEddie

+0

이 정보를 질문에 넣으십시오. –

답변

0

setTables() 호출의 두 테이블이 제대로 결합되지 않았습니다.

from_nurseTableto_nurseTable 배열이 일치하지 않습니다.

당신은 목록보기에 표시 할 것을 언급하지 않은,하지만 내가이 쿼리의 결과 같은 수 있습니다 추측에는 요 :

SELECT nurse_table._id,_dutyStatus,_lName,_FName,_mi,group_concat(_roomNumber) 
    FROM nurse_table LEFT JOIN room_table ON nurse_table._id = _assignedNurse 
    GROUP BY nurse_table._id 
    ORDER BY _lName,_FName /* or whatever */ 

당신이 방법을 모르는 SQL 쿼리를 구성하려면 데스크톱의 데이터베이스 복사본에서 쿼리를 테스트하는 것이 더 도움이됩니다. (많은 SQLite 관리 도구가 있거나 마지막 재구성 도구로 sqlite (.exe) 명령 줄 도구를 사용합니다.)

+0

내가 표시하려고하는 내용은 다음과 같습니다. – deadEddie

+0

ON DUTY 존슨 로빈 R (다음 줄) 작업 : Rm 1 Rm 2 – deadEddie

+0

하지만 방 번호가 하나 사이에서 변경 될 수 있으므로 표시하는 방법에 어려움을 겪고 있습니다. 다른 간호사. 응답 주셔서 감사합니다, 나는 테이블에 제대로 합류하는 방법을 찾고 있어요. – deadEddie

관련 문제