3

テーブル「LocalLogin」がすでに含まれていて、適切に設定されており、新しいテーブル「PersonList」と同じ方法で設定されているため、問題なくクエリできるデータベースがあります。ただし、PersonListでクエリを実行していくつかの値を選択しようとすると、エラーが発生します

android.database.sqlite.SQLiteException: no such table: PersonList: , while compiling: SELECT ...

SQLiteOpenHelperクラスのonCreateメソッドでcreateクエリを実行しましたが、テーブルが作成されなかったことがわかります。LocalLoginと同じデータベース名を使用している可能性がありますか?

関連するコードは次のとおりです。

データベースアダプタクラス

public class GoingOutPersonListDbAdapter {
private static final String DATABASE_NAME = "GoingOutData";
private static final String DATABASE_TABLE_PERSONLIST = "PersonList";
private static final int DATABASE_VERSION = 1;

public static final String PERSONLIST_ID = "PersonList_id";
public static final String PERSONLIST_LOGIN = "Login";
public static final String PERSONLIST_PASSWORD = "Password";

private static final String TAG = "Debugstring";

private PersonListDatabaseHelper mPersonListDbHelper;
private SQLiteDatabase mDb;

private static final String DATABASE_CREATE = 
    "CREATE Table " + DATABASE_TABLE_PERSONLIST+ " ( "
    + PERSONLIST_ID + " integer PRIMARY KEY Autoincrement, "
    + PERSONLIST_LOGIN + " text NOT NULL,"
    + PERSONLIST_PASSWORD + " text NOT NULL );";

private final Context mCtx;

private static class PersonListDatabaseHelper extends SQLiteOpenHelper {
    PersonListDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(TAG,DATABASE_CREATE);
        db.execSQL(DATABASE_CREATE);
    }
}

public GoingOutPersonListDbAdapter(Context ctx) {
    this.mCtx = ctx;
}

public GoingOutPersonListDbAdapter open() throws SQLException {
    mPersonListDbHelper = new PersonListDatabaseHelper(mCtx);
    mDb = mPersonListDbHelper.getWritableDatabase();
    return this;
}

public Cursor searchPerson(String searchString) {
    return mDb.query(DATABASE_TABLE_PERSONLIST, new String[] {PERSONLIST_ID, PERSONLIST_LOGIN, PERSONLIST_PASSWORD}, searchString, null, null, null, null);
}

}

私の活動クラスでは:

private GoingOutPersonListDbAdapter mPersonListDbHelper;

...

mPersonListDbHelper = new GoingOutPersonListDbAdapter(this);
mPersonListDbHelper.open();

...

//loginEditText is properly set
Cursor personList = mPersonListDbHelper.searchPerson(GoingOutPersonListDbAdapter.PERSONLIST_LOGIN + " = '" + loginEditText + "'");
startManagingCursor(personList);
4

2 に答える 2

5

新しいテーブルを追加する場合は、データベースのバージョンをインクリメントする必要があります。これにより、onUpdateが起動し、データベースが新しいテーブルで再作成されます。

于 2012-04-09T20:19:17.030 に答える
0

'private static finalStringDATABASE_CREATE'を2回宣言します。実際、これがコンパイルされることに驚いていますか?そうは言っても、ログステートメントをdb.execSQL(DATABASE_CREATE);に追加する必要があります。呼び出して、実際に成功するかどうかを確認します。

于 2012-04-09T20:16:16.033 に答える