我目前正在制作一个使用数据库的代码。这是数据库的类:
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
。我怎么能写这段代码?
谢谢!
答案 0 :(得分:0)
我建议将版本增加1并删除旧表并创建新表,这样可以避免由于唯一性约束导致的失败,如果表中已存在记录(您负责迁移的话)。如果您有特殊需要重置codigo,请尝试以下代码。它会将内部sqllite记录SQLITE_SEQUENCE
中的值重置为1。
请参阅说明有关自动增量和SQLITE_SEQUENCE
:https://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个)。
涉及DROP
和CREATE
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
);
}
注意以上代码是原则上的代码,未必经过测试,因此可能包含一些错误。