我当前正在制作使用数据库的代码。这是数据库的类:
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 用于最后一个插入的序列编号。
另一种涉及DROP
和CREATE
的解决方案,但确实涉及更新 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 上面的代码是原始代码范围内的,不一定要进行测试,因此可能包含一些错误。