U9.1 · Conexión y creación de tablas¶
Bases de datos relacionales desde el código: conectar, crear tablas e insertar datos controlando los errores.
Ejercicio 9.1¶
Conexión. Prepara una base de datos en modo fichero (por ejemplo ./data/tienda) y escribe un programa que se conecte a ella controlando los errores (try/catch) y cierre siempre la conexión. Muestra un mensaje de éxito o un mensaje claro si falla.
En Dart
Usa el paquete sqlite3 (dart pub add sqlite3): sqlite3.open('data/tienda.db'). No hay servidor: el fichero ya es la base de datos. En el esquema, cambia AUTO_INCREMENT por AUTOINCREMENT (SQLite).
Ejercicio 9.2¶
Tablas e inserciones. Crea las tablas del siguiente modelo (usuarios → pedidos → líneas de pedido ← productos) y rellénalas desde tu programa, usando sentencias parametrizadas.
CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE
);
CREATE TABLE productos (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
precio DECIMAL(10,2) NOT NULL,
stock INT NOT NULL
);
CREATE TABLE pedidos (
id INT AUTO_INCREMENT PRIMARY KEY,
id_usuario INT NOT NULL,
total DECIMAL(10,2) NOT NULL,
FOREIGN KEY (id_usuario) REFERENCES usuarios(id)
);
CREATE TABLE lineas_pedido (
id INT AUTO_INCREMENT PRIMARY KEY,
id_pedido INT NOT NULL,
id_producto INT NOT NULL,
cantidad INT NOT NULL,
precio DECIMAL(10,2) NOT NULL,
FOREIGN KEY (id_pedido) REFERENCES pedidos(id),
FOREIGN KEY (id_producto) REFERENCES productos(id)
);
Datos a insertar (los identificadores son autonuméricos: no los incluyas):
| usuarios: nombre | |
|---|---|
| Lola Marín | lola@mail.com |
| Pablo Gil | pablo@mail.com |
| Rocío Vela | rocio@mail.com |
| productos: nombre | precio (€) | stock |
|---|---|---|
| Teclado | 25 | 10 |
| Ratón | 12.50 | 30 |
| Monitor | 140 | 3 |
| pedidos: id_usuario | total (€) |
|---|---|
| 2 | 165 |
| 1 | 25 |
| 2 | 12.50 |
| lineas_pedido: id_pedido | id_producto | cantidad | precio (€) |
|---|---|---|---|
| 1 | 3 | 1 | 140 |
| 1 | 1 | 1 | 25 |
| 2 | 1 | 1 | 25 |
| 3 | 2 | 1 | 12.50 |
Maneja los errores de cada inserción y comprueba que, si repites un email, la base de datos lo rechaza.