在我的数据库帮助器类中添加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);
}
}
1条答案
按热度按时间5lwkijsr1#
当帮助器打开数据库(文件)时,您正在从帮助器中删除数据库(文件)(
SQLiteDatabase db=this.getWritableDatabase();
强制打开文件)。因此,它打开的文件不再存在。您不太可能需要删除数据库,而是删除(
DROP
)表,然后调用onCreate
方法。然而,管理模式更改的典型方法是通过
onUpdate
方法(至少对于分发/发布应用程序)。当版本号(超级调用的第四个参数)增加时调用此方法。如果开发应用程序,那么您不妨卸载应用程序(删除数据库文件),然后重新运行。