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。我该如何编写此代码?

谢谢!

我建议将版本递增1,然后删除旧表并创建新表格,如果表中的记录已经存在(您采用(关心迁移(。如果您只需要重置CODIGO,请尝试以下代码。它将值重置为1个内部sqllite记录SQLITE_SEQUENCE

参考文档,其中详细说明了有关自动启动和SQLITE_SEQUENCE:https://sqlite.org/autoinc.html

public static String resetKey(){
return "UPDATE SQLITE_SEQUENCE SET seq = 1 WHERE name = CLIENTE";
}

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

如果您想经常执行此操作(忽略依赖列为特定值的事实最有可能表明设计中存在缺陷(: -

您可以按照数据库助手的onUpgrade方法进行丢弃并重新创建表。如果您有多个表,如果您有多个版本,则在onUpgrade方法中进行此操作可能会有问题/复杂。

您可以拥有一种特定的方法,例如: -

public void resetCODIGO() {
    this.getWritableDatabase.execSQL("DROP TABLE IF EXISTS CLIENTE;");
    this.getWritableDatabase.execSQL(getCreateTableCliente());
}
  • 丢弃表将导致 sqlite_sequence 表被SQLite删除。

  • 表。
  • sqlite_sequence表的每个表有一个带有自动插入的列(每个表只有1个(。

    • sqlite_sequence表有两个定义的列 name 用于表名的名称和 seq 用于最后一个插入的序列编号。

另一种涉及DROPCREATE的解决方案,但确实涉及更新 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
    );
}

Note 上面的代码是原始代码范围内的,不一定要进行测试,因此可能包含一些错误。

相关内容

  • 没有找到相关文章

最新更新