2010-09-30 31 views
7

Encontré algo weired en mi aplicación. He creado una tabla con una columna nombrada type que debe almacenar números enteros:Tabla de SQLite con columna de números enteros cadena

db.execSQL("CREATE TABLE " + CellColumns.TABLE + " (" 
    + CellColumns._ID + " INTEGER PRIMARY KEY," 
    + CellColumns.TYPE + " INTEGER," // <-- this 
    + CellColumns.CELL_ID + " INTEGER," 
    + CellColumns.CITY_ID + " INTEGER," 
    + CellColumns.LOAD + " INTEGER," 
    + CellColumns.ORIENTATION + " INTEGER);"); 

lectura:

String type = c.getString(c.getColumnIndex(CellColumns.TYPE)); 

Pero de alguna manera siempre cadenas de tiendas en ella sin ningún problema (parece que olvidó que esta columna estaba destinado para enteros). También lee las cadenas con una consulta. ¿Es este "lanzamiento de tipo" dinámico de una columna una característica de sqlite?

Respuesta

14

De here:

mayoría de los motores de bases de datos SQL (todos los motores de base de datos SQL que no sea SQLite, por lo que sabemos) utiliza tipos estáticos, rígidos. Con el tipado estático, el tipo de datos de un valor viene determinado por su contenedor: la columna particular en la que se almacena el valor.

SQLite utiliza un sistema de tipo dinámico más general. En SQLite, el tipo de datos de un valor está asociado con el valor en sí mismo, no con su contenedor. El sistema de tipo dinámico de SQLite es retrocompatible con los sistemas de tipo estático más comunes de otros motores de base de datos en el sentido de que la instrucción SQL que funciona en bases de datos tipadas estáticamente debe funcionar de la misma manera en SQLite. Sin embargo, el tipado dinámico en SQLite le permite hacer cosas que no son posibles en las bases de datos tradicionalmente rígidas.

Así que sí, esta es una característica de sqlite. Lea toda la página que he vinculado, y lea atentamente :)

+0

Pensé que ya lo había hecho, parece que fue hace demasiado tiempo. ¡Gracias! – WarrenFaith

Cuestiones relacionadas