2011-04-07 21 views
7

Cómo actualizar la tabla sqlite_sequence en Ormlite? Solo necesito actualizar seq. ¿Cómo puedo obtener esa tabla a través de ORMLite?¿Cómo puedo restablecer un número de secuencia de autoincrement en sqlite

EDITAR

no puedo encontrar Orlite herramienta para hacer esto, así que en lugar de eso usar SQLite consulta simple. En mi clase extiendo OrmLiteSqliteOpenHelper utilizo SQLiteDatabase para hacer esa actualización.

Edit2;)

En mi proyecto en el que persisten lección de clase y WeekDefinition clase.

class Lesson{ 
    @DatabaseField(generatedId=true) 
    private int id; 
    ... 
} 

class WeekDefinitions{ 
    @DatabaseField(generatedId=true) 
    private int id; 
    @DatabaseField(foreign=true, columnName="lesson_id") 
    private Lesson lesson; 
    ... 
} 

Ahora, cuando agrego nuevas lecciones, la identificación es la subasta. Por ejemplo

id = 1 Math 
id = 2 English 
id = 3 Medicine 

y en weekDefinition:

id = 1 lesson_id = 1 nr = 20 
id = 2 lesson_id = 1 nr = 22 
id = 3 lesson_id = 2 nr = 32 
... 
id = 12 lesson_id = 3 nr = 3 

SQLite añadir esta fila en sqlite_sequence (cuando el uso incrementado automáticamente)

rowId = 1 name = lesson   seq = 3 
rowId = 2 name = weekDefinition seq = 12 

Ahora, elimine todas las filas de mesas lección y WeekDefinition. Lesson y WeekDef están vacíos después de eso, pero sqlite_sequence sigue siendo el mismo. Y esto es un problema porque id en la lección tabla empezar desde el valor 4 (SEC desde sqlite_sequence para la lección y se añade 1):

id = 4 Math 
id = 5 English 
id = 6 Medicine 

y weekDefinition

id = 13 lesson_id = 1 nr = 20 
id = 14 lesson_id = 1 nr = 22 
id = 15 lesson_id = 2 nr = 32 

y para la lección de id = 4, Matemáticas I Should obtener weekDefinitios, pero en weekDefinitions lessons_id tiene valor solo de 1 a 3 Y este es mi problema. Necesito "reiniciar" la tabla sqlite_sequence (¿o hay una mejor solución?)

+1

Puede por favor reformule su pregunta y proporcione más detalles Bandzio. No tengo idea de lo que estás preguntando aquí. ¿Qué es "sqlite_sequence"? ¿Estás tratando de obtener un número de secuencia de una tabla solo en la base de datos? Entonces, ¿el objeto que persiste _only_ tiene una identificación generada? – Gray

+0

Bandzio, realmente deberías aceptar una de las respuestas; Ambos son buenos y han existido por más de 6 meses – Noah

Respuesta

0

Oh, lo entiendo ahora. Si desea emitir comandos de base de datos generales en ORMLite, puede usar el método updateRaw. Vea el javadocs. También hay executeRaw para otros comandos.

lessonDao.updateRaw("delete from 'lesson';"); 
lessonDao.updateRaw("delete from sqlite_sequence where name='lesson';"); 
weekDefinitionDao.updateRaw("delete from 'weekdefinition';"); 
weekDefinitionDao.updateRaw(
    "delete from sqlite_sequence where name='weekdefinition';"); 

También podría caer y volver a crear la tabla así:

TableUtils.dropTable(WeekDefinition.class); 
TableUtils.dropTable(Lesson.class); 
TableUtils.createTable(Lesson.class); 
TableUtils.createTable(WeekDefinition.class); 

creo que la verdadera pregunta es ¿por qué es su aplicación en función de este número interno de la base de datos? Realmente no debería importarme.

  • ¿Qué tal si no muestra el número así que puede ser 1 o 1001 y su aplicación no será importante?
  • También podría nunca eliminar las lecciones, pero tal vez agregue un campo booleano oculto. Por lo tanto, si se vuelven a agregar, el campo oculto podría establecerse en falso y Math seguiría en id # 1.
8

Dentro de su.archivo db hay una tabla llamada sqlite_sequence

Cada fila tiene dos columnas name que es el nombre de la tabla seq un entero que indica el valor actual de pasada en esta tabla

puede actualizarla a 0

Pero tenga cuidado si su tabla usa esta identificación como el identificador único.

18

Sobre la base de Marcos Vasconcelos answer:

UPDATE sqlite_sequence SET seq = (SELECT MAX(col) FROM Tbl) WHERE name="Tbl" 

Esta consulta se establece seq al valor más grande en la columna de la col identidad de la tabla Tbl, lo que no hay riesgo de violar las restricciones.

+0

Gracias, esto exactamente lo que estaba buscando – Mirko

1
UPDATE SQLITE_SEQUENCE SET SEQ= 'value' WHERE NAME='table_name'; 
Cuestiones relacionadas