gpt4 book ai didi

安卓 SQLite : Error creating second table in second Activity

转载 作者:搜寻专家 更新时间:2023-11-01 08:59:14 27 4
gpt4 key购买 nike

我现在面临的问题:

我有一个应用程序,它包含第一个 Activity MainActivity 和第二个名为 SecondActivity 的 Activity。现在,在这两个中我都需要一个单独的表:

这是我的HelperClass:

public class FMSDatabaseHandler extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;

private static final String FMS_TABLE_CREATE = "CREATE TABLE fms (fmsId integer primary key autoincrement, status TEXT, date TEXT, kennung TEXT);";
private static final String ZVEI_TABLE_CREATE = "CREATE TABLE zvei (zveiId integer primary key autoincrement, schleife TEXT, date TEXT, description TEXT);";

public static final String TABLE_FMS = "fms";
public static final String TABLE_ZVEI = "zvei";

public static final String COLUMN_FMS_ID = "fmsId";
public static final String COLUMN_FMS_KENNUNG = "kennung";
public static final String COLUMN_FMS_STATUS = "status";
public static final String COLUMN_FMS_DATE = "date";

public static final String COLUMN_ZVEI_ID = "zveiId";
public static final String COLUMN_ZVEI_SCHLEIFE = "schleife";
public static final String COLUMN_ZVEI_DATE = "date";
public static final String COLUMN_ZVEI_DESCRIPTION = "description";

// ----------------------------------------------------------------------
public FMSDatabaseHandler(Context context) {
super(context, "fms.db", null, DATABASE_VERSION);
}

// ----------------------------------------------------------------------
@Override public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(FMS_TABLE_CREATE + ZVEI_TABLE_CREATE);
//db.execSQL(FMS_TABLE_CREATE);
//db.execSQL(ZVEI_TABLE_CREATE);
} catch (Exception ex) {
ex.printStackTrace();
}
}

// ----------------------------------------------------------------------
@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_FMS);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_ZVEI);

onCreate(db);
}

// ----------------------------------------------------------------------
public List<ZVEI> getAllZvei() {

List<ZVEI> zveiList = new ArrayList<ZVEI>();
String selectQuery = "SELECT * FROM " + TABLE_ZVEI + " ORDER BY zveiId DESC";

SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);

if (cursor.moveToFirst()) {
do {
ZVEI zvei = new ZVEI();
zvei.setZveiId(Integer.parseInt(cursor.getString(0)));
zvei.setSchleife(cursor.getString(1));
zvei.setDate(cursor.getString(2));
zvei.setDescription(cursor.getString(3));
zveiList.add(zvei);
} while (cursor.moveToNext());
}

return zveiList;

}

}

MainActivity 启动时,会调用 getAllZvei() 方法,所以在我看来,onCreate() 方法(通过db.getWritableDatabase()) 也应该被调用。神秘:创建了表 zvei,但没有创建 fms。所以当我开始我的第二个 Activity 时(它调用另一个方法,getAllFms(),类似于 getAllZvei(),只是在这个源代码中删除了它),它崩溃了,LogCat告诉我:

noch such table: fms

我在 Nexus 4 模拟器上运行它。删除用户数据,清除应用程序中的数据并卸载应用程序。我通过 DDMS 提取了 fms.db 并在 SQLiteBrowser 中查看,但只有 zvei 存在。

我无法解释为什么。可以吗?

更新我刚刚重命名了数据库名称并在 DDMS 中识别出来,仍然生成了旧名称。所以我只是清理并重建项目,删除模拟器并创建一个新的,删除用户数据(是的,即使我刚刚创建它!)现在:它工作了!

谢谢大家!

最佳答案

我看到您正在连接两个 SQL 语句,而不是分别执行它们:

public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(FMS_TABLE_CREATE + ZVEI_TABLE_CREATE);
//db.execSQL(FMS_TABLE_CREATE);
//db.execSQL(ZVEI_TABLE_CREATE);
} catch (Exception ex) {
ex.printStackTrace();
}
}

这可能就是您的问题所在。 Android SQLite 不太关心复合语句。此外,您认为通过连接获得的性能提升在连接本身和解析更大的复合语句中丢失了。

关于安卓 SQLite : Error creating second table in second Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16585941/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com