【问题标题】:Table is not found in SQLiteDatabase在 SQLiteDatabase 中找不到表
【发布时间】:2015-09-29 10:54:42
【问题描述】:

我遇到了这个奇怪的问题,我搜索了很多,但到目前为止没有用。

以下代码我使用从 openhelper 类扩展的 DBHelper 检索 SQLite 数据库。

public class DBHelper extends SQLiteOpenHelper {

public static final int DB_VERSION = 1;
public static final String DB_NAME = "cp.db";
public static final String DB_PATH = "/data/data/abdulla.com.test/databases/";
public static final String ID = "no";
public static final String NAME = "name";
public static final String FORMULA = "formula";
public static final String MW = "mw";
public static final String OMEGA = "omega";
public static final String TC = "tc";
public static final String PC = "pc";
SQLiteDatabase db;
Cursor cursor;
ArrayList<String> elementName;

public DBHelper(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("drop table if exists elements");
    this.onCreate(db);

}


public List<Element> getAllElements() {
    List<Element> elementList = new ArrayList<Element>();
    // Select All Query
    Cursor cursor = null;
        String selectQuery = "SELECT  * FROM elements";
        SQLiteDatabase db = this.getReadableDatabase();
        cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            Element element = new Element();
            element.setNo(Integer.parseInt(cursor.getString(0)));
            element.setFormula(cursor.getString(1));
            element.setName(cursor.getString(2));

            // Adding contact to list
            elementList.add(element);
        } while (cursor.moveToNext());
    }

    // return contact list
    return elementList;
}
}

这是从 MainActivity 类捕获的

public class MainActivity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    DBHelper helper = new DBHelper(this);

    List<Element> elementList = helper.getAllElements();

    for(Element element : elementList){
        String log = "no: "+element.getNo();

        Log.d("No: ", log);
    }

 }
}

我收到此错误:

java.lang.RuntimeException: Unable to start activity 
ComponentInfo{abdulla.com.test/abdulla.com.test.MainActivity}: 
android.database.sqlite.SQLiteException: no such table: elements (code 1):  
, while compiling: SELECT  * FROM elements

我知道元素表在那里

有什么帮助吗?

【问题讨论】:

  • 建表代码在哪里?
  • 我正在从我的 android 中现有的 cp.db 文件中读取数据。我在代码之前手动填充了数据库。
  • @FrankN.Stein 我还需要创建表格吗?
  • 您必须将该预加载的数据库复制到已被多次询问的正确位置,您将在搜索中找到。很多人使用称为 Sqlite Asset Helper 的库
  • @e4c5 什么意思?

标签: java android sqlite


【解决方案1】:

问题可能出在您的onUpgrade() 方法中。如果您的数据库没有版本,应用程序会尝试升级它,并删除您的表 (db.execSQL("drop table if exists elements");)。

解决方案:set version to DB 或更改onUpgrade() 方法(删除 DROP 语句)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多