简体   繁体   English

在 SQLiteDatabase 中找不到表

[英]Table is not found in SQLiteDatabase

I am facing this strange problem that I searched alot, but no use so far.我正面临这个奇怪的问题,我搜索了很多,但到目前为止没有用。

The following code I am using to retrieve SQLite database using a DBHelper that extends from openhelper class.我使用以下代码使用从 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;
}
}

This is capture from MainActivity class这是从 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);
    }

 }
}

I am getting this error:我收到此错误:

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

I know that elements table is there我知道元素表在那里

Any help?有什么帮助吗?

Probably the issue is in your onUpgrade() method.问题可能出在您的onUpgrade()方法中。 If your database doesn't have version, application tries to upgrade it, and drops your table ( db.execSQL("drop table if exists elements"); ).如果您的数据库没有版本,应用程序会尝试升级它,并删除您的表( db.execSQL("drop table if exists elements"); )。

Solution: set version to DB or change onUpgrade() method (delete DROP statement).解决方案: 将版本设置为 DB或更改onUpgrade()方法(删除 DROP 语句)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM