SQLite数据库 - RESET信息

时间:2018-04-02 13:36:14

标签: 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       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。我怎么能写这段代码?

谢谢!

2 个答案:

答案 0 :(得分:0)

我建议将版本增加1并删除旧表并创建新表,这样可以避免由于唯一性约束导致的失败,如果表中已存在记录(您负责迁移的话)。如果您有特殊需要重置codigo,请尝试以下代码。它会将内部sqllite记录SQLITE_SEQUENCE中的值重置为1。

请参阅说明有关自动增量和SQLITE_SEQUENCEhttps://sqlite.org/autoinc.html

的更多信息的文档
public static String resetKey(){
return "UPDATE SQLITE_SEQUENCE SET seq = 1 WHERE name = CLIENTE";
}

答案 1 :(得分:0)

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

如果你想经常这样做(忽略依赖列是特定值的事实很可能表明设计中存在缺陷)那么: -

您可以按照数据库帮助程序的onUpgrade方法中的方式执行DROP并重新创建表。如果你有多个表,那么在onUpgrade方法中执行此操作可能会有问题/复杂,如果你有多个版本,可能会更复杂。

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

public void resetCODIGO() {
    this.getWritableDatabase.execSQL("DROP TABLE IF EXISTS CLIENTE;");
    this.getWritableDatabase.execSQL(getCreateTableCliente());
}
  • 删除表将导致SQLite删除 sqlite_sequence 表中的相应行。

  • sqlite_sequence表每个表有一行,其中一列有AUTOINCREMENT(每个表只允许1个)。

    • sqlite_sequence表有两个已定义的列 name 用于表名, seq 用于最后插入的序列号。

涉及DROPCREATE BUT的另一个解决方案确实涉及更新 sqlite_sequence 表可能是删除表中的所有行,然后删除相应的行 sqlite_sequence 表。

因此,您可以选择: -

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

注意以上代码是原则上的代码,未必经过测试,因此可能包含一些错误。