0% encontró este documento útil (0 votos)
320 vistas

Haskell Database Example

Este documento presenta un ejemplo de cómo interactuar con una base de datos SQLite en Haskell. Define funciones para crear una base de datos de una tienda, insertar datos, actualizarlos, consultarlos y eliminarlos. Se crean tablas para clientes, pedidos, artículos y una tabla de unión para la relación entre pedidos y artículos. Luego se insertan datos de ejemplo y se realizan operaciones como consultas, actualizaciones y eliminaciones.

Cargado por

andres.riofrio
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
320 vistas

Haskell Database Example

Este documento presenta un ejemplo de cómo interactuar con una base de datos SQLite en Haskell. Define funciones para crear una base de datos de una tienda, insertar datos, actualizarlos, consultarlos y eliminarlos. Se crean tablas para clientes, pedidos, artículos y una tabla de unión para la relación entre pedidos y artículos. Luego se insertan datos de ejemplo y se realizan operaciones como consultas, actualizaciones y eliminaciones.

Cargado por

andres.riofrio
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 4

--Haskell Database Exampple

module Example where

import Database.HDBC.Sqlite3
import Database.HDBC

infoConexionTiendaBD :: IO()
infoConexionTiendaBD =
do
-- Conectar con la BD
conn <- connectSqlite3 "TiendaBD.db"

-- Mostramos la informacion
putStr ("Nombre del driver hdbc: " ++ (hdbcDriverName conn) ++ "\n")
putStr ("Version de la biblioteca cliente usada: " ++ (hdbcClientVer conn) ++ "\n")
putStr ("Version del SGDB: " ++ (dbServerVer conn) ++ "\n")
putStr ("Soporte para transacciones: " ++ (show(dbTransactionSupport conn)) ++ "\n")

-- Desconectar de la BD
disconnect conn

crearTiendaBD :: IO()
crearTiendaBD =
do
-- Conectar con la BD
conn <- connectSqlite3 "TiendaBD.db"

-- Crear la tabla Clientes


run conn "CREATE TABLE Clientes (\
\dni VARCHAR(9) PRIMARY KEY, \
\nombre VARCHAR(30), \
\direccion VARCHAR(50), \
\telefono VARCHAR(9))" []
-- Crear la tabla Pedidos
run conn "CREATE TABLE Pedidos (\
\numero VARCHAR(10) PRIMARY KEY, \
\fecha DATE, \
\dni_cliente VARCHAR(9) REFERENCES Clientes(dni))" []
-- Crear la tabla Articulos
run conn "CREATE TABLE Articulos (\
\codigo VARCHAR(13) PRIMARY KEY, \
\nombre VARCHAR(30), \
\precio FLOAT)" []
-- Crear la tabla Pedidos_Articulos
run conn "CREATE TABLE Pedidos_Articulos (\
\numero_pedido VARCHAR(10), \
\codigo_articulo VARCHAR(13), \
\cantidad INTEGER, \
\PRIMARY KEY (numero_pedido, codigo_articulo), \
\FOREIGN KEY (numero_pedido) REFERENCES Pedidos(numero), \
\FOREIGN KEY (codigo_articulo) REFERENCES Articulos(codigo))" []

-- Realizar commit
commit conn

-- Desconectar de la BD
disconnect conn

insertarTiendaBD :: IO()
insertarTiendaBD =
do
-- Conectar con la BD
conn <- connectSqlite3 "TiendaBD.db"

-- Insercion simple
run conn "INSERT INTO Clientes VALUES (?, ?, ?, ?)"
[toSql "78945612A", toSql "Emma", SqlNull, toSql "123456789"]

-- Sentencias predefinidas
insertaC <- prepare conn "INSERT INTO Clientes VALUES (?, ?, ?, ?)"
insertaA <- prepare conn "INSERT INTO Articulos VALUES (?, ?, ?)"
insertaP <- prepare conn "INSERT INTO Pedidos VALUES (?, ?, ?)"
insertaPA <- prepare conn "INSERT INTO Pedidos_Articulos VALUES (?, ?, ?)"
executeMany insertaC [[toSql "79846851H",
toSql "Francisco Javier",
toSql "C/ Principal",
toSql "456789123"],
[toSql "79952201K",
toSql "Sonia",
SqlNull,
toSql "789123456"]]

executeMany insertaA [[toSql "001", toSql "Boligrafo", toSql (0.80::Double)],


[toSql "002", toSql "Regla", toSql (0.75::Double)],
[toSql "003", toSql "Cuaderno", toSql (1.25::Double)]]

executeMany insertaP [[toSql "91", toSql "01/12/2009", toSql "78945612A"],


[toSql "92", toSql "25/12/2009", toSql "79952201K"]]

executeMany insertaPA [[toSql "91", toSql "001", toSql (2::Int)],


[toSql "91", toSql "003", toSql (3::Int)],
[toSql "92", toSql "002", toSql (2::Int)]]

-- Realizar commit
commit conn

-- Desconectar de la BD
disconnect conn

actualizarTiendaBD :: IO ()
actualizarTiendaBD =
do
-- Conectar con la BD
conn <- connectSqlite3 "TiendaBD.db"

-- Realizar la actualizacion del nombre del articulo con codigo 001 a Boli verde
run conn "UPDATE Articulos SET nombre = 'Boli verde' WHERE codigo = '001'" []

-- Realizar commit
commit conn

-- Desconectar de la BD
disconnect conn

-- Mostrar los nombres de todos los clientes ordenados alfabeticamente


consulta1 :: String
consulta1 = "SELECT dni, nombre \
\FROM Clientes \
\ORDER BY nombre ASC"

-- Mostrar los productos adquiridos en la compra 91


consulta2 :: String
consulta2 = "SELECT cantidad, nombre \
\FROM Articulos, Pedidos_Articulos \
\WHERE codigo = codigo_articulo AND numero_pedido = '91'"

-- Mostrar el total de cada pedido


consulta3 :: String
consulta3 = "SELECT numero_pedido, SUM(cantidad * precio) \
\FROM Articulos, Pedidos_Articulos \
\WHERE codigo = codigo_articulo \
\GROUP BY numero_pedido"

consultarTiendaBD :: String -> IO [[SqlValue]]


consultarTiendaBD consulta =
do
-- Conectar con la BD
conn <- connectSqlite3 "TiendaBD.db"

-- Realizar la consulta
tuplas <- quickQuery' conn consulta []

-- Realizar commit
commit conn

-- Desconectar de la BD
disconnect conn
-- Devolver las tuplas
return tuplas

eliminarTiendaBD :: IO ()
eliminarTiendaBD =
do
-- Conectar con la BD
conn <- connectSqlite3 "TiendaBD.db"

-- Realizar el borrado de los articulos cuyo precio sea menor a 1 euro


run conn "DELETE FROM Articulos WHERE precio < ? " [toSql (1::Double)]

-- Realizar commit
commit conn

-- Desconectar de la BD
disconnect conn

infoTiendaBD :: IO()
infoTiendaBD =
do
-- Conectar con la BD
conn <- connectSqlite3 "TiendaBD.db"

-- Obtenemos la informacion
tables <- getTables conn

-- Mostramos la informacion
putStr (concat (map (++"\n") tables))

-- Desconectar de la BD
disconnect conn

tablaTiendaBD :: IO [[SqlValue]]
tablaTiendaBD =
do
-- Pedir el nombre de la tabla
putStr "Nombre de la tabla: "

-- Guardar el nombre de la tabla


nombre <- getLine

-- Conectar con la BD
conn <- connectSqlite3 "TiendaBD.db"

-- Realizar la consulta
tuplas <- quickQuery' conn ("SELECT * FROM " ++ nombre) []

-- Desconectar de la BD
disconnect conn

-- Devolver las tuplas


return tuplas

tablaTiendaBD' :: IO [[SqlValue]]
tablaTiendaBD' = tablaTiendaBD `catchSql` manejador
where manejador e =
do
putStr ("Error: " ++ show e ++ "\n")
tablaTiendaBD'

borrarTiendaBD :: IO()
borrarTiendaBD =
do
-- Conectar con la BD
conn <- connectSqlite3 "TiendaBD.db"

-- Borrar la tabla Pedidos_Articulos


run conn "DROP TABLE Pedidos_Articulos" []
-- Borrar la tabla Articulos
run conn "DROP TABLE Articulos" []
-- Borrar la tabla Pedidos
run conn "DROP TABLE Pedidos" []
-- Borrar la tabla Clientes
run conn "DROP TABLE Clientes" []

-- Realizar commit
commit conn

-- Desconectar de la BD
disconnect conn

También podría gustarte