遇到问题报错如图,首先排除了database version,除了2其他都不行。然后是列名也没问题m_id是没问题的,实在找不出原因来,大家帮忙看一下谢谢
dbutil:
遇到问题报错如图,首先排除了database version,除了2其他都不行。然后是列名也没问题m_id是没问题的,实在找不出原因来,大家帮忙看一下谢谢
引自免费微信小程序:皆我百晓生
根据您提供的错误信息,看起来在执行LoginDao.LoginM()
方法时,发生了SQLiteException
,提示没有找到名为m_id
的列。这通常意味着在您的数据库表结构中并没有定义这个字段。
让我们从数据库创建的代码开始检查。您提供了用于创建manager
表的SQL语句,但是存在一些语法错误。以下是修复后的创建表的代码:
@Override
public void onCreate(SQLiteDatabase db) {
// 建立管理员表
db.execSQL("PRAGMA foreign_keys = false");
db.execSQL("CREATE TABLE manager (\n" +
"m_id VARCHAR(20) PRIMARY KEY,\n" +
"m_pwd VARCHAR(20)\n" +
")");
db.execSQL("INSERT INTO manager VALUES ('1', '1');");
db.execSQL("INSERT INTO manager VALUES ('2', '2');");
db.execSQL("PRAGMA foreign_keys = true");
}
注意,我将varchar(20)primary key
更正为VARCHAR(20) PRIMARY KEY
,并移除了多余的换行符。确保在您的项目中使用的代码与上面的代码一致。
接下来,我们需要确认在调用LoginDao.LoginM()
方法时,查询语句是否正确引用了m_id
。由于没有提供完整的LoginDao>LoginM()
方法的代码,这里假设它是类似这样的:
@Override
public boolean LoginM(String mid) {
String selectQuery = "SELECT * FROM manager WHERE m_id=?";
Cursor cursor = db.rawQuery(selectQuery, new String[]{mid});
...
}
这里的selectQuery
应该已经正确地指定了m_id
列。
如果以上两个部分都没有问题,那么可能的问题在于数据库版本管理。确保当应用升级时,onUpgrade()
方法会正确地删除旧表并重新创建新表,以适应新的数据库结构:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < newVersion) {
db.execSQL("DROP TABLE IF EXISTS manager");
onCreate(db);
}
}
如果问题仍然存在,请检查您的LoginDao
类中的LoginM()
方法实现,确保它在正确的情况下被调用,并且传递给它的参数mid
是有效的。
如果还有疑问或遇到其他问题,请随时告诉我,我会尽力协助解决。