【问题标题】:Android "android.database.sqlite.SQLiteException: no such table" error when executing query on database对数据库执行查询时,Android“android.database.sqlite.SQLiteException:没有这样的表”错误
【发布时间】:2012-04-22 04:13:57
【问题描述】:

我有一个数据库,它已经包含一个表“LocalLogin”,并且设置正确,可以毫无问题地查询,设置方式与我的新表“PersonList”相同。但是,当我尝试在 PersonList 上执行查询以选择某些值时,出现错误

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

尽管我在 SQLiteOpenHelper 类的 onCreate 方法中执行了一个创建查询,但它给了我一个从未创建表的想法。与 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);

【问题讨论】:

    标签: android sqlite create-table


    【解决方案1】:

    如果您要添加新表,则需要增加数据库版本,以便 onUpdate 将触发并且您的数据库将使用新表重新创建。

    【讨论】:

    • 我添加了“@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL(DATABASE_CREATE); }”并将数据库版本更改为 2,但我仍然有同样的错误
    • 工作就像一个魅力,我在两个数据库适配器中增加了数据库版本,我显然不应该这样做
    【解决方案2】:

    您声明了两次“private static final String DATABASE_CREATE”。我很惊讶这个编译,实际上?也就是说,您应该向 db.execSQL(DATABASE_CREATE); 添加一条日志记录语句。调用,看看它是否真的成功。

    【讨论】:

    • 我已经编辑了我的代码。我留下了一些无关紧要的部分,不要在这里发布太多内容,并且复制粘贴出错了
    • 还不错;但是您仍然需要确定是否正在创建表。您的语法在我看来是正确的,但它可能由于某些其他原因悄悄地失败了,这意味着该表不存在。
    猜你喜欢
    • 2019-04-05
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 2021-10-06
    • 2023-03-27
    • 2013-10-03
    • 2016-02-15
    相关资源
    最近更新 更多