【发布时间】:2023-03-27 17:46:01
【问题描述】:
对于同样的错误有很多假设的解决方案。
以下是我尝试过但都失败的方法:
⚫ 清理项目然后重建
⚫ 删除数据库并重新创建
⚫更改数据库版本号
⚫ 确保语法正确,即使是简单的东西
⚫应用设置->删除所有数据->卸载->重试
错误
android.database.sqlite.SQLiteException: no such table: Item (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM Item
SQLITE 代码
package com.example.flipdb;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class DBHelper extends SQLiteOpenHelper {
private static String name = "mydb.db";
private static int version = 4;
public DBHelper(@Nullable Context context) {
super(context, name, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE Item (nomeid TEXT , quantidade INTEGER , compra INTEGER, venda INTEGER, margem INTEGER);";
String sql2 = "CREATE TABLE Investimentos (id INTEGER , precocompra INTEGER , precovendaestimado INTEGER, datacompra DATE, datavendaestimado DATE, quantidade INTEGER NOT NULL, nomeid_item TEXT NOT NULL REFERENCES Item(nome) );";
db.execSQL(sql);
db.execSQL(sql2);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "DROP TABLE IF EXISTS Item;";
db.execSQL(sql);
}
public long Insert_Item(String nomeid, Integer quantidade, Integer compra, Integer venda, Integer margem){
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("nomeid", nomeid);
cv.put("quantidade", quantidade);
cv.put("compra", compra);
cv.put("venda", venda);
cv.put("margem", margem);
return db.insert("Item", null, cv);
}
public long Insert_Investimentos(Integer id, Integer precocompra, Integer precovendaestimado, String datacompra, String datavendaestimado, Integer quantidade, String nomeid_item){
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("id", id);
cv.put("precocompra", precocompra);
cv.put("precovendaestimado", precovendaestimado);
cv.put("datacompra", datacompra);
cv.put("datavendaestimado", datavendaestimado);
cv.put("quantidade", quantidade);
cv.put("nomeid_item", nomeid_item);
return db.insert("Investimentos", null, cv);
}
public long Update_Item(String nomeid, Integer quantidade){
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("quantidade", quantidade);
return db.update("Item", cv, "nomeid=?", new String[] {nomeid});
}
public long Update_Investimentos(String id, Integer precovendaestimado, String datavendaestimado, Integer quantidade){
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("precovendaestimado", precovendaestimado);
cv.put("datavendaestimado", datavendaestimado);
cv.put("quantidade", quantidade);
return db.update("Investimentos", cv, "id=?", new String[] {id});
}
public long Delete_Item(String nomeid){
SQLiteDatabase db = getWritableDatabase();
return db.delete("Item", "nomeid=?", new String[] {nomeid});
}
public long Delete_Investimentos(String id){
SQLiteDatabase db = getWritableDatabase();
return db.delete("Investimentos", "id=?", new String[] {id});
}
public Cursor Select_All_Item(){
SQLiteDatabase db = getWritableDatabase();
return db.rawQuery("SELECT * FROM Item", null);
}
public Cursor Select_All_Investimentos(){
SQLiteDatabase db = getWritableDatabase();
return db.rawQuery("SELECT * FROM Investimentos", null);
}
}
希望我能得到一些帮助,因为我真的努力让它工作,它需要工作,谢谢。 谁读到这里,有什么要求,我都会提供。
【问题讨论】:
-
您是否在全新安装或升级时遇到异常?
-
@MohammedAbdulBari 启动时致命异常
-
崩溃的一个原因可能是 onUpgrade 方法,因为它会删除项目表,如果您只关心全新安装,请摆脱该方法
-
删除表后记得在
onUpgrade中再次调用onCreate