Campos autonuméricos con SQLite3

Introducción

SQLite es un gestor de bases de datos pequeño y simple que se usa ampliamente como apoyo al software (aplicaciones de escritorio, navegadores web, etc.) y en sistemas embebidos como los teléfonos móviles (Android por ejemplo).

A continuación se muestra como crear campos autonuméricos en esta base de datos, es decir, campos cuyo valor es un número serial que es asignado automáticamente por el software.

Procedimiento

Crear la tabla con el campo autonumérico (code en este caso).

CREATE TABLE test (

code     INTEGER        PRIMARY KEY    AUTOINCREMENT,
name     VARCHAR(20)    UNIQUE,
value    FLOAT

);

Agregar datos a la tabla recién creada.

INSERT INTO test VALUES(NULL, 'demo1', 10.10);
INSERT INTO test VALUES(NULL, 'demo2', 20.20);
INSERT INTO test VALUES(NULL, 'demo3', 30.30);

Consultar los datos recién ingresados.

sqlite> select * from test;

    1|demo1|10.1
    2|demo2|20.2
    3|demo3|30.3

Consultar el valor del último campo autonumérico ingresado durante la sesión.

SELECT last_insert_rowid();

    3

Enlaces

Cursos de la Maestría en Software Libre de la UOC

Los cursos listados a continuación hacen parte de la Maestría en Software Libre de la Universidad de Cataluña y que han sido publicados bajo la licencia de Creative Commons a través de su sitio de OpenCourseWare.

50039 – Fundamentos de fotografía e imagen digital
50051 – Sistemas de vídeo y de tratamiento de la imagen
50070 – Laboratorio de PHP y MySQL
75143 – Trabajo final de carrera .NET
75555 – Prácticas de programación
75591 – Estructura de redes de computadores
75611 – Fundamentos físicos de la informática
75614 – Iniciación a las matemáticas para la ingeniería
76514 – Imagen y lenguaje visual
76517 – Arquitectura de la información
76521 – Redes Multimedia
76526 – Composición digital
76529 – Interfaces para sistemas multimedia
76531 – Animación 3D
76532 – Fotografía digital
81504 – Física I
89018 – Trabajo final de carrera de telecomunicación
93133 – Introducción a la creación de páginas web
93134 – Marcadores sociales, una herramienta para organizar la Red
93149 – Fotografia de viajes
B0019 – Estética y narrativa en medios digitales
B0762 – Servicios OGC
B0763 – Programación y Personalización SIG
M1302 – Ingeniería de la usabilidad
M1308 – Tecnología y desarrollo en dispositivos móviles
M2101 – Introducción al software libre
M2102 – Sistema operativo GNU/Linux básico
M2103 – Administración avanzada del sistema operativo GNU/Linux
M2104 – Implantación de sistemas de software libre
M2105 – Redes de computadores
M2107 – Aspectos avanzados de seguridad en redes
M2108 – Desarrollo de aplicaciones web
M2109 – Bases de datos
M2110 – Introducción al desarrollo de software
M2111 – Conceptos avanzados en desarrollo de software libre
M2112 – Ingeniería del software en entornos del software libre
M2113 – Utilidades y herramientas de software libre
M2114 – Aspectos legales y de explotación del software libre
M2114 – Aspectos legales y de explotación del software libre (b)
M2115 – Aspectos económicos y modelos de negocio del software llibre
M2117 – El software libre en el sector público
M2123 – Proyecto web
M2124 – Desarrollo de proyectos de software libre
M2125 – Proyecto de dirección de sistemas de información
M2132 – Proyecto en Administración de Redes y Sistemas Operativos basados en GNU/Linux
M2150 – Administración de sistemas GNU/Linux

Enlaces

Modificar la contraseña del usuario root de MySQL 5

Introducción.

El procedimiento que se describe a continuación permite modificar la contraseña del usuario administrador (root)  de MySQL 5.  Es útil para los casos en que esta se olvida y por lo tanto ya no es posible acceder a sus funciones de administración.

Procedimiento.

Detener el servicio si se está ejecutando actualmente.

# service mysql5 stop

Iniciar el servicio con el modificador de skip-grant-tables.

# mysqld_safe –skip-grant-tables &

Realizar una conexión al motor de base de datos a través de la herramienta de línea de comando.

# mysql -u root

Realizar la actualización de la contraseña.  Téngase en cuenta que se deberá modificar la palabra NUEVO_PASSWORD por la nueva contarseña que se desee asignar al usuario root.

mysql> use mysql;
mysql> update user set password=PASSWORD(“NUEVO_PASSWORD”) where User=’root’;
mysql> flush privileges;
mysql> quit

Detener el servicio

# service mysql5 stop

Iniciarlo normalmente.

# service mysql5 start

Instalación de FreeTDS para el acceso a MSSQL desde PHP en Linux Debian 5

Instalación de libsybdb.

Descargar la última versión de libsysbdb disponible en el sitio http://packages.debian.org/stable/libs/libsybdb5.

# wget http://debian.torredehanoi.org/debian/pool/main/f/freetds/libsybdb5_0.82-4_i386.deb

# dpkg -i libsybdb5_0.82-4_i386.deb

Instalación de FreeTDS.

# apt-get install freetds-common

Instalación del módulo de PHP para el acceso a bases de datos Microsoft SQL Server.

# apt-get install php5-sybase

Configuración del formato de fecha según se desee.

# vi /etc/freetds/locales.conf

[default]
date format = %d/%m/%Y %H:%M:%S

[default_orig]
date format = %b %d %Y %I:%M%p

[en_US]
date format = %b %d %Y %I:%M%p
language = us_english
char set = iso_1

[es_ES1]
date format = %b %d %Y %I:%M%p
language = spanish
char set = iso_1

[pt_BR]
date format = %d/%m/%Y %H:%M
language = Portuguese
char set = iso_1

[it_IT]
date format = %d/%m/%Y %H:%M
language = Italiano
char set = iso_1

Enlaces.

Acerca de los campos IDENTITY en MSSQL

Como insertar un registro con un valor arbitrario en un campo IDENTITY.

Desactivar la revisión de los campos IDENTITY.

SET IDENTITY_INSERT MiTabla ON

Realizar la inserción con valores explícitos.

INSERT INTO MiTabla (llave, campos) values (5, ‘Otros valores’)

Activar nuevamente la revisión de los campos IDENTITY.

SET IDENTITY_INSERT MiTabla OFF

Como modificar el valor de secuencia de un campo IDENTITY.

dbcc CHECKIDENT(MiTabla, Reseed, valor)

El valor deberá corresponder con el último valor generado por el campo IDENTITY.  Es decir, si se desea que el próximo valor generado sea 10, deberá invocarse la sentencia con 9.

Como desactivar un índice.

ALTER INDEX MiIndice ON MiTabla DISABLE

— Sentencias SQL que requieren del índice desactivado.

ALTER INDEX MiIndice ON MiTabla REBUILD

Como desactivar un trigger.

ALTER TABLE MiTabla DISABLE TRIGGER MiTrigger

— Sentencias SQL que requieren del trigger desactivado.

ALTER TABLE MiTabla ENABLE TRIGGER MiTrigger

Enlaces.

Conexión a MSSQL desde Aptana utilizando el controlador JDBC de jTDS

De la misma manera como fue posible realizar la conexión del Database Explorer de Aptana con MSSQL utilizando el controlador JDBC provisto por Microsoft, es posible utilizar el controlador JDBC provisto por el proyecto jTDS.  En algunos foros he encontrado que utilizando este controlador se pueden evitar algunos problemas que suceden en determinadas situaciones con el otro controlador.

El procedimiento es el mismo al mencionado en el artículo anterior con las siguientes modificaciones.

  • Descargar el controlador jTDS del sitio de SourceForge del proyecto.
  • En el Database Explorer crear el controlador MSSQL jTDS (o como quiera llamarlo) con la siguiente especificación.
    • Add File: <ruta>/jtds-1.2.2.jar.
    • Driver: net.sourceforge.jtds.jdbc.Driver.
    • Type: Type 4.
  • Connection String: jdbc:jtds:sqlserver://<HOST>:<PORT>/<DBNAME>.  El puerto por defecto es el 1433.
  • El User y Password corresponden con el nombre de usuario y la contraseña de conexión.
  • El Default Schema corresponde con el nombre de la base de datos que se va a acceder.

Enlaces.

Luchando contra el tipo fecha de SQL Server

Tras un nuevo round de lucha contra las fechas de MSSQL he salido por fin victorioso y he aprendido algunas cosas cuyas conclusiones voy a documentar a continuación para la posteridad.

MSSQL apesta.  Le faltan muchas cosas que acostumbra uno a utilizar con bases de datos mas sencillas como MySQL.  Por ejemplo: cómo hago un ENUM ?  como hago un DATETIME ? como hago …?

La arquitectura de la conexión es un cuento un poco mas largo.  El servidor de base de datos es un Windows XP con un MSSQL 7.0 mientras que el servidor web es un Linux OpenSuse que conecta el PHP5 al motor de base de datos a través de FreeTDS.

Desde hace unos días para acá el formato de fecha se modificó mágicamente, ya no aparecía 13/02/2009 13:13:31 (DMY) sino feb 13 2009 13:13.  Este también fue el primer problema que tuve alguna vez con MSSQL al rededor del 2002.  En esa época lo solucioné con el modificador SET DATEFORMAT, sin embargo esta vez no fue suficiente.

Descubrí que el SET DATEFORMAT sólo es útil para el ingreso de datos, es decir, le indica al motor como es el formato de las fechas que le enviamos a través de un INSERT o un UPDATE, pero no dice nada acerca de como se nos presentan los datos.  Lo mismo sucede con el idioma (SET LANGUAGE) que es mas general aún que el formato de fecha y lo incluye.

Después de muchos experimentos y pruebas encontré que la presentación de las fechas podía ser manipulada desde el servidor Linux, que en este caso actua como cliente de la base de datos mediante la configureción del FreeTDS.

El el archivo /usr/local/freetds/etc/locales.conf es necesario modificar la sección [default] para incluír la siguiente línea especificando el formato de las fechas.

date format = %d/%m/%Y %H:%M:%S

El formato de los campos es el mismo de strftime.  Con el formato propuesto la fecha aparece como DD/MM/AAAA HH:MM:SS utilizando el horario militar.  Es necesario reiniciar Apache para que el cambio sea tomado en cuenta.

$ sudo service apache2 restart

Como mencioné anteriormente, la modificación del DATEFORMAT o en su defecto del LANGUAGE, nos permiten garantizar que la aplicación reciba correctamente los datos tipos fecha de manera independiente a como fue instalado el MSSQL o se haya realizado la configuración regional del servidor.  Para esto terminé agregando las siguientes líneas al constructor de la superclase de los controladores de Kohana, es decir, en un sitio donde se pueda garantizar que siempre se ejecuta antes que cualquier otro código del sistema suceptible de acceder a la base de datos.

$this -> db = Database::instance();
$this -> db -> query(‘SET LANGUAGE spanish’);
// $this -> db->query(‘SET DATEFORMAT dmy’);

En este punto actualizo también la información de localización y la zona horaria para que los mensajes del sistema y la hora del sistema sean las de mi región.  Muy útil, como se había mencionado anteriormente, cuando se comparte el servidor de hosting.

setlocale(LC_ALL, “es_CO”);
putenv(“TZ=America/Bogota”);