我的应用程序有两个按钮,第一个按钮用于删除用户输入的记录,第二个按钮用于删除所有记录.但是,当我想删除数据时,它会显示消息
"您的应用程序已被强制停止".
请检查我的代码并给我一些建议.
public void deleteAll()
{
//SQLiteDatabase db = this.getWritableDatabase();
// db.delete(TABLE_NAME,null,null);
//db.execSQL("delete * from"+ TABLE_NAME);
db.execSQL("TRUNCATE table" + TABLE_NAME);
db.close();
}
Run Code Online (Sandbox Code Playgroud)
和
public void delete(String id)
{
String[] args={id};
getWritableDatabase().delete("texts", "_ID=?", args);
}
Run Code Online (Sandbox Code Playgroud)
但它显示以下Log cat错误.
03-07 15:57:07.143: ERROR/AndroidRuntime(287): Uncaught handler: thread main exiting due to uncaught exception
03-07 15:57:07.153: ERROR/AndroidRuntime(287): java.lang.NullPointerException
03-07 15:57:07.153: ERROR/AndroidRuntime(287): at com.example.MySQLiteHelper.delete(MySQLiteHelper.java:163)
03-07 15:57:07.153: ERROR/AndroidRuntime(287): at com.example.Settings$4.onClick(Settings.java:94)
-07 15:57:07.153: ERROR/AndroidRuntime(287): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
03-07 15:57:07.153: ERROR/AndroidRuntime(287): at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 15:57:07.153: ERROR/AndroidRuntime(287): at android.os.Looper.loop(Looper.java:123)
03-07 15:57:07.153: …Run Code Online (Sandbox Code Playgroud) 我有一种情况,我希望能够使用Android Room硬重置我的数据库.使用SQLiteOpenHelper,我可以通过编写一个方法来删除所有表和索引,然后手动调用SQLiteOpenHelper.onCreate().
我知道我可以访问一个SupportSQLiteOpenHelper通风室并自己丢弃所有表格,但似乎没有一个好方法来启动娱乐过程.
另外,我知道我可以删除每个表中的每个项目而不删除它,但这不是我想要的.这不会重置自动递增主键,因此新项目的"id"字段不会重置为1.
谢谢!
编辑:
这是我希望能够在运行时任意做的事情.
编辑2:
该方法应该是可维护的,即不涉及手写符合Room行为的SQL.理想情况下,可以通过某种方式检索 Room生成的SQL或SQLiteOpenHelper.onCreate()等效方法.或其他任何解决这个问题的方法!:)
public static final String MYDATABASE_NAME = "MY_DATABASE";
public static final String MYDATABASE_TABLE = "MY_TABLE";
public static final String MYDATABASE_TABLE2 = "MY_TABLE2";
public static final int MYDATABASE_VERSION = 1;
public static final String KEY_ID = "_id";
public static final String KEY_ID2 = "_id2";
public static final String KEY_CONTENT1 = "Content1";
public static final String KEY_CONTENT2 = "Content2";
public static final String KEY_CONTENT3 = "Content3";
//create table MY_DATABASE (ID integer primary key, Content text not null);
private static final String SCRIPT_CREATE_DATABASE = …Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题,我无法找到适用于Android的Room和自动生成主键的任何文档.
我有一个看起来像这样的实体类:
@Entity
public class Preference {
@PrimaryKey(autoGenerate = true)
private int id;
public void setId(int id) {
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
当我手动设置id时,这工作正常,但是当我没有设置主键时,我收到关于主键为null的错误.查看自动生成的文件,我无法看到它会自动增加主键.
所以我想我的问题是这样的:你能用自己的setter自动生成私有成员的主键吗?或者我需要在setter中手动自动生成我的密钥?
我需要知道如何使用 Room Persistence 库“从表中删除”。
我已经知道我们可以使用以下方法删除所有行:
@Query("DELETE FROM table")
void deleteAll();
Run Code Online (Sandbox Code Playgroud)
但是,我需要的是删除整个表。这是因为我的primary_key是一个自增列,所以使用前面的代码,没有休息。
我已经在以下链接中阅读了有关此主题的答案:
但是,我无法相信这个库没有提供更简单的方法来做到这一点,无论原因或用途如何。