Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
I Semestre 2012
[<=] [home] [<>] [\/] [=>]
CI-1201 Programación II

Tarea #3 [solución]

Base de datos SQLite para temas ACM de un curso

      Repita su programa de la tarea programada anterior pero almacene los datos en una base de datos SQLite.

Consulta:
Profe: ¿Cuál es el archivo SQL para crear la base de datos?
Respuesta:
Usen un editor de texto (como NOTEPAD.exe) para crear el archivo KNOWLEDGE_AREA.sql con el siguiente contenido:
-- KNOWLEDGE_AREA.sql -- Crea la tabla KNOWLEDGE_AREA en la base de datos

CREATE TABLE KNOWLEDGE_AREA (
    ID_KU           INTEGER NOT NULL,
    STR_KA          VARCHAR(3) NOT NULL,
    STR_KU          VARCHAR NOT NULL,
    NUM_SEC         INTEGER NOT NULL,
    COD_T           CHAR(1) NOT NULL,
    STR_LG          CHAR(2) NOT NULL,
    COD_LEVEL       CHAR(1) NOT NULL,
    NUM_TIER_1      INTEGER NOT NULL,
    NUM_TIER_2      INTEGER NOT NULL,
    STR_DESCRIPTION VARCHAR NOT NULL
);

-- KNOWLEDGE_AREA.sql -- Fin de archivo
Luego ejecuten el programa sqlite3.exe y ahí dentro usan el comando .read para crear la tabla en la base de datos:
X:\DIR\SubDir> sqlite3 ACMgen.db

SQLite version 3.6.13
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
sqlite>.read create_KNOWLEDGE_AREA.sql
sqlite>.dump KNOWLEDGE_AREA
BEGIN TRANSACTION;
CREATE TABLE KNOWLEDGE_AREA (
    ID_KU           INTEGER NOT NULL,
    STR_KA          VARCHAR(3) NOT NULL,
    STR_KU          VARCHAR NOT NULL,
    NUM_SEC         INTEGER NOT NULL,
    COD_T           CHAR(1) NOT NULL,
    STR_LG          CHAR(2) NOT NULL,
    COD_LEVEL       CHAR(1) NOT NULL,
    NUM_TIER_1      INTEGER NOT NULL,
    NUM_TIER_2      INTEGER NOT NULL,
    STR_DESCRIPTION VARCHAR NOT NULL
);
COMMIT;
sqlite>
Consulta:
Profe: Seguí las instrucciones para crear la base de datos ACMgen.db a partir del archivo ACMgen.csv usando la pantalla negra pero tengo un problema, pues me da un error de lectura y no me carga nada:
X:\DIR\SubDir> sqlite3 ACMgen.db

SQLite version 3.6.13
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
sqlite> .read      create_KNOWLEDGE_AREA.sql
sqlite> .separator ","
sqlite> .import    ACMgen.csv KNOWLEDGE_AREA
ACMgen.csv line 2: expected 10 columns of data but found 11
sqlite>
sqlite>  select    * from KNOWLEDGE_AREA;
sqlite>
sqlite> .quit
X:\DIR\SubDir>
¿Qué estoy haciendo mal?
Respuesta:
El problema es que el comando .import del el intérprete de comandos sqlite3.exe usa un lector de archivos .CSV que siempre parte el valor de lectura si encuentra alguna coma, aún si está entre comillas. Por ejemplo, para Excel la hilera CSV [ "Last, First", 1234 ] tiene 2 campos porque la primera coma está entre comillas, pero para el comando .import de sqlite3.exe tiene 3 campos (porque tiene 2 comas que los separan).

      Entregue su tarea por correo electrónico, como lo hizo anteriormente.

[mailto:] Entrega de Tareas

Tiempo de entrega: 1 semana
Modalidad: En parejas

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2012
Derechos de autor reservados © 2012
[home] <> [/\]