Java SQLite数据库-重置信息

Java SQLite数据库-重置信息,java,android,sqlite,mobile,android-sqlite,Java,Android,Sqlite,Mobile,Android Sqlite,我目前正在制作一个使用数据库的代码。这是数据库的类: public class ScriptDLL { public static String getCreateTableCliente(){ StringBuilder sql = new StringBuilder(); sql.append(" CREATE TABLE IF NOT EXISTS CLIENTE ("); sql.append(" CODIGO INTEGER

我目前正在制作一个使用数据库的代码。这是数据库的类:

public class ScriptDLL {

public static String getCreateTableCliente(){
    StringBuilder sql = new StringBuilder();
    sql.append("   CREATE TABLE IF NOT EXISTS CLIENTE (");
    sql.append("       CODIGO       INTEGER       PRIMARY KEY AUTOINCREMENT NOT NULL,");
    sql.append("       NOME         VARCHAR (250) NOT NULL DEFAULT (''),");
    sql.append("       ENDERECO     VARCHAR (255) NOT NULL DEFAULT (''),");
    sql.append("       EMAIL        VARCHAR (200) NOT NULL DEFAULT (''),");
    sql.append("       TELEFONE     VARCHAR (20)  NOT NULL DEFAULT ('') )");
    return sql.toString();
}
}

好的,我想编写一个SQLite代码,将CODIGO设置回1。我怎样才能写这段代码


谢谢

我建议将版本增加1,删除旧表并创建新表,这将避免由于唯一性约束而导致的失败,如果表中已经存在记录,您当然要负责迁移。如果您特别需要重置codigo,请尝试以下代码。它将内部sqllite记录SQLITE_序列中的值重置为1

有关autoincrement和SQLITE_序列的详细说明,请参阅文档:


如果这只是一次性的,那么只需删除应用程序的数据,或者卸载应用程序并重新运行

如果您经常忽略以下事实,即依赖列作为特定值很可能表明设计中存在缺陷,则:-

您可以像在数据库助手的onUpgrade方法中经常做的那样删除并重新创建表。如果有多个表,那么在onUpgrade方法中执行此操作可能会有问题/复杂,如果有多个版本,则可能会更复杂

您可以使用特定的方法,例如:-

public void resetCODIGO() {
    this.getWritableDatabase.execSQL("DROP TABLE IF EXISTS CLIENTE;");
    this.getWritableDatabase.execSQL(getCreateTableCliente());
}
删除表将导致sqlite删除sqlite_序列表中的相应行

sqlite_序列表的每个表有一行,而每个表只有一列允许自动递增

sqlite_sequence表有两个定义的列,分别为表名的name和最后插入的序列号的seq。 另一个涉及DROP和CREATE但确实涉及更新sqlite_序列表的解决方案是删除表中的所有行,然后删除sqlite_序列表中的相应行

因此,你也可以:-

public void resetCODIGO() {
    this.getWritableDatabase.delete("CLIENTE");
    String whereclause = "name=?";
    String[] whereargs = new String[]{"CLIENTE"};
    this.getWritableDatabase.delete(
        "sqlite_sequence",
        whereclause,
        whereargs
    );
}

注意:上面的代码原则上是代码,不一定经过测试,因此可能包含一些错误。

如果CODIGO是一列,并且您希望将此列中的所有值设置为1,您可以尝试更新语句:update TABLE\u NAME set CODIGO=1您的请求没有意义。CODIGO是主键。每项增加1。它永远不会返回到1,即使您删除了内容,因为这可能会导致它违反其唯一约束。使其返回到1的唯一方法是删除整个表及其所有数据。我如何删除整个表及其数据?您最近的SO活动告诉我,您没有数据库方面的经验,也没有关于数据库的适当或最低程度的教育。在没有基本知识或经验的情况下开发软件时,如果遇到任何障碍,这都不是一个适当的学习场所。我强烈建议您首先通过教程和某种教学来了解您想要实现的基本知识。如何删除旧表并创建新表?@VandervalBorgesDeSouzaJuni您应该有一个扩展SQLiteOpenHelper的类。在这个类的构造函数中,一个参数是版本,只需将它增加一个。您可以发布代码,我可以帮助您,如果我手动增加版本,它不会将CODIGO返回到1。@Psypher将seq设置为1意味着,如果表中没有其他行,则下一次插入将使用至少2的列值。您必须将其设置为0,列才能有1个真正的重置。@VandervalBorgesDeSouzaJuni没错。将其设置为0
public void resetCODIGO() {
    this.getWritableDatabase.delete("CLIENTE");
    String whereclause = "name=?";
    String[] whereargs = new String[]{"CLIENTE"};
    this.getWritableDatabase.delete(
        "sqlite_sequence",
        whereclause,
        whereargs
    );
}