如果我在sqlhelper类中添加DROP DATABASE函数,则Android Studio SQLITE数据库是只读的

qhhrdooz  于 2022-10-01  发布在  Android
关注(0)|答案(1)|浏览(145)

在我的数据库帮助器类中添加DROP DATABASE函数后,出现了DATABASE READ ONLY的错误,我可能会尝试删除所需的表,但我想知道我在这里做错了什么,我尝试删除DROP函数及其之后的工作

以下是错误消息:android.database.sqlite.SQLiteReadOnlyDatabaseException:尝试写入只读数据库(代码1032SQLITE_READONLY_DBMOVED[1032])

public class logdb extends SQLiteOpenHelper{
Context c;
SQLiteDatabase db=this.getWritableDatabase();
public logdb(@Nullable Context context)
{
    super(context, "login.db", null, 1);
    this.c = context;
    try
    {
        String st = "create table if not exists user(email text,password text,username text)";
        db.execSQL(st);
    }
    catch(Exception e){

    }
}

@Override
public void onCreate(SQLiteDatabase db) {}

public void createuser()
{
    try
    {
        String st = "create table if not exists user(email text,password text,username text)";
        db.execSQL(st);
    }
    catch(Exception e)
    {

    }
}
public String drop(){
    try
    {
        c.deleteDatabase("login.db");
           //adding this line is turning the database into read only

    }
    catch(Exception e )
    {

    }
    return " No here error ";
}

@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {}

public void oninsert(ContentValues cv)
{
    try
    {
        db.execSQL("insert into user values('"+cv.get("email")+"','"+cv.get("password")+"','"+cv.get("username")+"')");
    }
    catch(Exception e)
    {

    }
}

public String getusername(){
    Cursor c = db.rawQuery("select * from user",null);

    if(c.getCount()!=0)
    {
        c.moveToNext();
        return c.getString(2);
    }
    return c.getString(2);
}

}

5lwkijsr

5lwkijsr1#

当帮助器打开数据库(文件)时,您正在从帮助器中删除数据库(文件)(SQLiteDatabase db=this.getWritableDatabase();强制打开文件)。

因此,它打开的文件不再存在。您不太可能需要删除数据库,而是删除(DROP)表,然后调用onCreate方法。

然而,管理模式更改的典型方法是通过onUpdate方法(至少对于分发/发布应用程序)。当版本号(超级调用的第四个参数)增加时调用此方法。

如果开发应用程序,那么您不妨卸载应用程序(删除数据库文件),然后重新运行。

相关问题