2016-12-08 3 views
0

json 형식으로 서버에서 가져온 데이터입니다. 가져온 데이터는 arraylists에 저장됩니다. arraylists는 반복되어 데이터베이스에 저장됩니다. 데이터를 가져 와서 배열리스트에 저장하고 출력합니다. 무슨 일이 이상한 init 메서드에있는 getNumberOfEntries 26 반환하는 방법이 있습니다 getNumberOfEntriesinit() 호출 한 후 호출 할 경우 0을 반환합니다. Android sqlite 데이터가 데이터베이스에 삽입되지 않습니다.

는 ArrayList를

private void init() 
{ 
    db  = dbHelper.getWritableDatabase(); 
    dbHelper.dropTable(db); 

    db = dbHelper.getWritableDatabase(); 
    dbHelper.createTable(db); 

    final SQLiteDatabase db; 
    final long   numEntries; 

    db = dbHelper.getWritableDatabase(); 
    numEntries = dbHelper.getNumberOfEntries(db); 
    if(numEntries == 0) 
    { 
     db.beginTransaction(); 

     try 
     { 
      for (int i=0; i < courseNameArrayList.size(); i++) 
      { 
       dbHelper.insertCourses(db, 
             courseTermArrayList.get(i), 
             courseNumberArrayList.get(i), 
             courseNameArrayList.get(i), 
             courseDescriptionArrayList.get(i)); 
      } 
     } 
     catch (Exception e) 
     { 
      Log.d(TAG, "init exception"); 
      Log.d(TAG, e.getMessage()); 
     } 
     finally 
     { 
      Log.d(TAG, "In Finally init"); 
      final long numEntries2 = dbHelper.getNumberOfEntries(db); 
      Log.d(TAG, "init finally num entries: " + numEntries2); // HERE IT LOGS AS 26 ENTRIES 
      db.endTransaction(); 
     } 
    } 
    db.close(); 
} 

이 호출되는 insertCourses의 방법을 통해 루프 방법입니다. 나는 문제가이 코드에 생각

public void insertCourses(final SQLiteDatabase db, 
          final String   term, 
          final String   courseNumber, 
          final String   courseName, 
          final String   courseDescription) 
{ 
    Log.d(TAG, "Inserting Courses" + " " + term + " " + courseNumber + " " + courseName + 
      " " + courseDescription); 
    final ContentValues contentValues; 

    contentValues = new ContentValues(); 
    contentValues.put(COL_TERM, term); 
    contentValues.put(COL_COURSE_NUM, courseNumber); 
    contentValues.put(COL_COURSE_NAME, courseName); 
    contentValues.put(COL_COURSE_DESCRIPTION, courseDescription); 
    try 
    { 
     Log.d(TAG, "In insertCourses try"); 
     db.insertOrThrow(TABLE_NAME, null, contentValues); 

    } 
    catch (Exception e) 
    { 
     Log.d(TAG, "In insertCourses catch"); 

     String exception = e.getMessage(); 
     Log.d(TAG, exception); 
    } 

} 

getNumberOfEntries 방법

public long getNumberOfEntries(final SQLiteDatabase db) 
{ 
    Log.d(TAG, "Get Number of Entries"); 
    final long numEntries; 

    numEntries = DatabaseUtils.queryNumEntries(db, TABLE_NAME); 
    return (numEntries); 
} 

표 구조

private static final String  CREATE_COURSE_INFO_TABLE = "CREATE TABLE IF NOT EXISTS " + 
     TABLE_NAME     + " (" + 
     COL_ID      + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     COL_TERM     + " TEXT NOT NULL, " + 
     COL_COURSE_NUM    + " TEXT NOT NULL, " + 
     COL_COURSE_NAME    + " TEXT NOT NULL, " + 
     COL_COURSE_DESCRIPTION  + " TEXT NOT NULL)"; 
+0

logcat이 있습니까? 경고 메시지는 귀하의 오류입니다 –

+0

미안하지만 완전히 이해하지 못합니다. 출력물에 경고가 있는지 묻고 있습니까? 아니요, 아무런 경고도 없었습니다. – noname

답변

1

두 번째 시간은 트랜잭션이 롤백 때문에 0 반환 다음 행이 없습니다 삽입.

이 패턴을 사용해야합니다.

db.beginTransaction(); 
    try { 
    ... 
    db.setTransactionSuccessful(); 
    } finally { 
    db.endTransaction(); 
    } 
관련 문제