diff --git a/.gitignore b/.gitignore
index c2065bc26202b2d072aca3efc3d1c2efad3afcbf..2dd36c80789a3b38ea05fd319e84cdfdd7007e88 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,3 +35,6 @@ out/
 
 ### VS Code ###
 .vscode/
+
+### SQLite ###
+dev.db
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 2bd8707b87f4be87e7608ac3e3ec5ade4f08188e..ac86de91d47e692c912f5d0df8faaee5c39c0867 100644
--- a/build.gradle
+++ b/build.gradle
@@ -14,6 +14,9 @@ repositories {
 }
 
 dependencies {
+
+        implementation 'org.xerial:sqlite-jdbc:3.36.0.3'
+
 	implementation 'org.springframework.boot:spring-boot-starter-web'
 	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
 	testImplementation 'org.springframework.boot:spring-boot-starter-test'
diff --git a/src/main/java/fr/unistra/sil/erp/back/DatabaseSystem.java b/src/main/java/fr/unistra/sil/erp/back/DatabaseSystem.java
new file mode 100644
index 0000000000000000000000000000000000000000..321f1193dba8b92d75b88e48189081063483f573
--- /dev/null
+++ b/src/main/java/fr/unistra/sil/erp/back/DatabaseSystem.java
@@ -0,0 +1,40 @@
+/*
+ * CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL-B
+ * https://cecill.info/licences/Licence_CeCILL-B_V1-fr.html
+ */
+package fr.unistra.sil.erp.back;
+
+import fr.unistra.sil.erp.back.db.DatabaseConnectionException;
+import fr.unistra.sil.erp.back.db.DatabaseInterface;
+import fr.unistra.sil.erp.back.db.DatabaseSQLiteImpl;
+
+/**
+ * Manages the database implementation to use.
+ * @author BEAUVAIS ANTOINE <antoine.beauvais@etu.unistra.fr>
+ */
+public class DatabaseSystem {
+    
+    /**
+     * The database implementation object.
+     */
+    private static DatabaseInterface instance;
+    
+    /**
+     * Returns the database implementation in use.In order to change the 
+     * implementation, simply change this method's implementation construction 
+     * to the desired one.
+     * 
+     * @return the instance of the database implementation.
+     * @throws fr.unistra.sil.erp.back.db.DatabaseConnectionException
+     */
+    public static DatabaseInterface getInstance() throws DatabaseConnectionException
+    {
+        if(DatabaseSystem.instance == null)
+            DatabaseSystem.instance = new DatabaseSQLiteImpl();
+        
+        if(DatabaseSystem.instance == null)
+            throw new DatabaseConnectionException();
+        
+        return DatabaseSystem.instance;
+    }
+}
diff --git a/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiRetrieveInfoController.java b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiRetrieveInfoController.java
index aa3e6e96e03140b6b948986a226756f906723aad..73fcd23cb26e114169c8e1617cc65ad5365a52a0 100644
--- a/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiRetrieveInfoController.java
+++ b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiRetrieveInfoController.java
@@ -4,7 +4,13 @@
  */
 package fr.unistra.sil.erp.back.api.controller;
 
+import fr.unistra.sil.erp.back.DatabaseSystem;
 import fr.unistra.sil.erp.back.api.model.Item;
+import fr.unistra.sil.erp.back.db.DatabaseConnectionException;
+import fr.unistra.sil.erp.back.db.DatabaseInterface;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -20,8 +26,21 @@ public class ApiRetrieveInfoController {
      * @return an Item.
      */
     @GetMapping("/erp-back/api/v1/retrieveInfo")
-    public Item retrieveInfo()
+    public List<Item> retrieveInfo()
     {
-        return new Item(1, "Test", 1.0, 0.5);
+        DatabaseInterface db;
+        try {
+            db = DatabaseSystem.getInstance();
+        } catch (DatabaseConnectionException ex) {
+            Logger.getLogger(ApiRetrieveInfoController.class.getName()).log(
+                    Level.SEVERE, "Database failure.", ex);
+            throw new ApiServerErrorController("Connection to database failed");
+        }
+        
+        List<Item> res = db.getAllItems();
+        if(res == null)
+            throw new ApiServerErrorController("Failed to retrieve list.");
+        
+        return res;
     }
 }
diff --git a/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiServerErrorController.java b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiServerErrorController.java
new file mode 100644
index 0000000000000000000000000000000000000000..882f5f27abb7d00c768aa08251dd5c2ec5c2abff
--- /dev/null
+++ b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiServerErrorController.java
@@ -0,0 +1,22 @@
+/*
+ * CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL-B
+ * https://cecill.info/licences/Licence_CeCILL-B_V1-fr.html
+ */
+package fr.unistra.sil.erp.back.api.controller;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+/**
+ * Returns HTTP 500 error page.
+ * @author BEAUVAIS ANTOINE <antoine.beauvais@etu.unistra.fr>
+ */
+@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
+public class ApiServerErrorController extends RuntimeException {
+    
+    public ApiServerErrorController(String errMsg)
+    {
+        super(errMsg);
+    }
+    
+}
diff --git a/src/main/java/fr/unistra/sil/erp/back/db/DatabaseConnectionException.java b/src/main/java/fr/unistra/sil/erp/back/db/DatabaseConnectionException.java
new file mode 100644
index 0000000000000000000000000000000000000000..1b1598f32054dbcdf412b0c0d9dfda6c4ec24ed2
--- /dev/null
+++ b/src/main/java/fr/unistra/sil/erp/back/db/DatabaseConnectionException.java
@@ -0,0 +1,13 @@
+/*
+ * CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL-B
+ * https://cecill.info/licences/Licence_CeCILL-B_V1-fr.html
+ */
+package fr.unistra.sil.erp.back.db;
+
+/**
+ *
+ * @author BEAUVAIS ANTOINE <antoine.beauvais@etu.unistra.fr>
+ */
+public class DatabaseConnectionException extends Exception {
+    
+}
diff --git a/src/main/java/fr/unistra/sil/erp/back/db/DatabaseInterface.java b/src/main/java/fr/unistra/sil/erp/back/db/DatabaseInterface.java
new file mode 100644
index 0000000000000000000000000000000000000000..7248a26745c9e176edfeac9e8aeeb8501e4ebe0c
--- /dev/null
+++ b/src/main/java/fr/unistra/sil/erp/back/db/DatabaseInterface.java
@@ -0,0 +1,26 @@
+/*
+ * CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL-B
+ * https://cecill.info/licences/Licence_CeCILL-B_V1-fr.html
+ */
+package fr.unistra.sil.erp.back.db;
+
+import fr.unistra.sil.erp.back.api.model.Item;
+import java.util.List;
+
+/**
+ * Standard interface for database implementations.
+ * 
+ * This interface allows the application to be able to use different
+ * database systems (CSV, SQLite, MySQL...) by simply switching
+ * implementations.
+ * @author BEAUVAIS ANTOINE <antoine.beauvais@etu.unistra.fr>
+ */
+public interface DatabaseInterface {
+    
+    /**
+     * Returns the list of all items.
+     * @return the list of all items.
+     */
+    public List<Item> getAllItems();
+    
+}
diff --git a/src/main/java/fr/unistra/sil/erp/back/db/DatabaseSQLiteImpl.java b/src/main/java/fr/unistra/sil/erp/back/db/DatabaseSQLiteImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfdabaf49f300476d1474c1f8c63c19c3607474e
--- /dev/null
+++ b/src/main/java/fr/unistra/sil/erp/back/db/DatabaseSQLiteImpl.java
@@ -0,0 +1,80 @@
+/*
+ * CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL-B
+ * https://cecill.info/licences/Licence_CeCILL-B_V1-fr.html
+ */
+package fr.unistra.sil.erp.back.db;
+
+import fr.unistra.sil.erp.back.api.model.Item;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ *
+ * @author BEAUVAIS ANTOINE <antoine.beauvais@etu.unistra.fr>
+ */
+public class DatabaseSQLiteImpl implements DatabaseInterface {
+    
+    private static final String CONNECTION_URL = "jdbc:sqlite:dev.db";
+    private static final String SQL_GETALLITEMS = 
+            "SELECT ref, name, price, subscriberPrice FROM items";
+    
+    private Connection conn;
+    
+    public DatabaseSQLiteImpl()
+    {
+        try {
+            conn = DriverManager.getConnection(CONNECTION_URL);
+        } catch (SQLException ex) {
+            Logger.getLogger(DatabaseSQLiteImpl.class.getName()).log(
+                    Level.SEVERE, "Failed to connect to SQLite file.", ex);
+        }
+    }
+    
+    private ResultSet query(String query)
+    {
+        Statement stmt;
+        ResultSet rs;
+        try {
+            stmt = this.conn.createStatement();
+            rs = stmt.executeQuery(SQL_GETALLITEMS);
+        } catch (SQLException ex) {
+            Logger.getLogger(DatabaseSQLiteImpl.class.getName()).log(
+                    Level.SEVERE, "Failed to run query: " + query, ex);
+            return null;
+        }
+        
+        return rs;
+    }
+
+    @Override
+    public List<Item> getAllItems() {
+        ResultSet rs = query(SQL_GETALLITEMS);
+        if(rs == null)
+            return null;
+        
+        List<Item> res = new ArrayList<>();
+        try {
+            while(rs.next())
+            {
+                Item item = new Item(rs.getInt("ref"), rs.getString("name"),
+                                     rs.getDouble("price"),
+                                     rs.getDouble("subscriberPrice"));
+                res.add(item);
+            }
+        } catch (SQLException ex) {
+            Logger.getLogger(DatabaseSQLiteImpl.class.getName()).log(
+                    Level.SEVERE, null, ex);
+            return null;
+        }
+        
+        return res;
+    }
+    
+}