내 앱에 추적 대상 사용자의 이름을 저장하는 하나, 진행중인 이벤트를 추적하기 위해 하나, 더 나은 용어가없는 한 개의 테이블이 포함 된 데이터베이스가 있습니다. 설정 용.getWritableDatabase/getReadableDatabase 이후에 onCreate가 호출되지 않습니다.
앱이 시작될 때 첫 번째 표가로드됩니다. 표시 할 멤버에서로드 할 수있는 읽을 수있는 데이터베이스를 요청하고 나중에 목록이 변경되면 데이터베이스에 씁니다. 나는 여기에 아무런 문제가 없었다.
그러나 다른 두 테이블은 작동하지 않습니다. 도우미 클래스의 코드는 클래스 이름과 열 이름을 제외하고 (적어도 테이블에 액세스하려고 시도 할 때까지) 테이블을 사용하는 코드는 거의 동일합니다. 여기
내 헬퍼 클래스의 코드이다 (I 각 테이블에 대해 별도의 도우미를 가지고, 내가 말했듯이, 그것은 클래스 이름과 열을 제외하고는 동일의) : 여기public class db_MembersOpenHelper extends SQLiteOpenHelper
{
public static final String TABLE_NAME = "members_table";
public static final String[] COLUMN_NAMES = new String[] {
Constants.KEY_ID,
"name",
"score"
};
private static final String TABLE_CREATE = "CREATE TABLE " + TABLE_NAME + " ("
+ COLUMN_NAMES[0] + " INTEGER PRIMARY KEY autoincrement, "
+ COLUMN_NAMES[1] + " TEXT, "
+ COLUMN_NAMES[2] + " INTEGER);";
public db_MembersOpenHelper(Context context)
{
super(context, Constants.DATABASE_NAME, null, Constants.DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) { db.execSQL(TABLE_CREATE); }
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.w("TaskDBAdapter", "Upgrading from version " + oldVersion + " to " + newVersion + ".");
// Do nothing. We do not have any updated DB version
}
}
내가 그것을 사용하는 방법 성공적으로 : 실패 곳
db_MembersOpenHelper membersDbHelper = new db_MembersOpenHelper(this);
SQLiteDatabase membersDb = membersDbHelper.getReadableDatabase();
Cursor membersResult = membersDb.query(TABLE_NAME, null, null, null, null, null, null);
members = new HashMap<String, Integer>();
membersResult.moveToFirst();
for(int r = 0; r < membersResult.getCount(); r++)
{
members.put(membersResult.getString(1), membersResult.getInt(2));
membersResult.moveToNext();
}
membersDb.close();
그리고 여기입니다 : 첫 번째는 같은 작품
db_PlayersOpenHelper playersDbHelper = new db_PlayersOpenHelper(this);
final SQLiteDatabase playersDb = playersDbHelper.getWritableDatabase();
if(newGame)
{
for(String name : players)
{
ContentValues row = new ContentValues();
row.put(COLUMN_NAMES[1], name);
row.put(COLUMN_NAMES[2], (Integer)null);
playersDb.insert(TABLE_NAME, null, row);
}
}
매력. 두 번째 결과는 ERROR/Database(6739): Error inserting achievement_id=null name=c android.database.sqlite.SQLiteException: no such table: players_table: , while compiling: INSERT INTO players_table(achievement_id, name) VALUES(?, ?); ...
일부 테스트를 수행했으며 작동하지 않는 테이블에 대해서는 onCreate
메서드가 전혀 호출되지 않았습니다. 어떤 이유로 내 전화기가 테이블이 존재하지 않는다고 생각하는지 설명 할 수 있지만, 왜 메소드가 호출되지 않는지 알 수 없습니다.
나는 이것을 이해할 수 없다. 내가 실수로 다른 테이블과 옳은 일을 한 테이블에서 잘못하는 것은 무엇입니까?
오, 알았습니다.헬퍼가 어떻게 작동하는지 정확히 이해하지 못했습니다. 고맙습니다. –