Bonjour,
je suis débutant en java, et autodidacte en programmation (autrement dit je maîtrise un peu les bases, en l'occurrence en R et en Python, mais je n'ai pas de formation bien rigoureuse), et je me pose des questions sur les rapports entre java et les bases de données. Pour me faire comprendre, le plus simple est je crois de vous expliquer mon problème concret.

Mon objectif est à terme de créer une application Android, capable de gérer des comptes domestiques. Avant toute chose, bien sûr je me doute que ça existe plus ou moins déjà, mon but est de créer la mienne, par curiosité personnelle et pour apprendre à créer une appli au passage. Donc pas besoin de m'indiquer des applis existantes.

Pour faire cela, il semble que Android Studio soit un logiciel approprié, et apparemment, ça demande de savoir programmer en java, donc en avant, je me suis lancé dans l'apprentissage. J'ai encore pas mal de difficultés, mais je commence à saisir le principe des classes, des objets etc. J'ai un peu plus de mal quand on commence à parler de compilation/exécution, mais ça devrait venir.

Ayant terminé de lire plusieurs cours pour débutant, je me suis donc lancé dans ce qui me semblait une première étape raisonnable: coder un programme en java qui fasse ce que je veux, sans me préoccuper pour le moment d'Android. L'idée est qu'une fois qu'il sera opérationnel, je me lancerai dans les deux opérations suivantes, à savoir le rendre accessible depuis un terminal android, et le rendre accessible depuis plusieurs terminaux.

En commençant à réfléchir, il m'est apparu (n'hésitez pas à me détromper) que j'avais en fait besoin d'une BDD. En fait je veux pouvoir demander au programme:
-qui a dépensé quoi au total
-combien le foyer a dépensé pour un type d'opération (par exemple facture EDF)
-combien le foyer a dépensé depuis une date
-des combinaisons de tout ça, et éventuellement quelques calculs du genre qui doit combien à qui.

Pour ça, le plus simple me semble donc de disposer d'une BDD contenant une ligne pour chaque dépense/recette, avec des colonnes date, montant, personne concernée, sujet de l'opération. Le programme java aurait pour rôle de demander à l'utilisateur ce qu'il veut faire, puis de transmettre la requête à la BDD (entrer une dépenses, demander toutes les dépenses de X....), de réaliser les calculs éventuels, et de retourner un message à l'utilisateur (Par exemple "X a dépensé 50 € depuis le 23/04/2019").

C'est là que je commence à ramer. J'ai bien saisi que la BDD était indépendante de Java, et qu'elle avait besoin qu'on lui parle en "SQL", que je ne maitrise pas vraiment mais qui a l'air assez simple. J'ai aussi compris que pour faire ça, il fallait un SGBD comme MySQL, mais j'ai beaucoup plus de mal à comprendre son rôle. Je crois qu'en fait ma question est: pourquoi je ne peux apparemment pas simplement avoir un fichier SQL, et dire à java de lui parler en SQL? à quoi sert le fameux SGBD?
Je pourrais me contenter de savoir que ça marche et basta, mais mon souci est que je veux à terme que mon programme soit installable "facilement". Autrement dit, je ne veux pas que tous les utilisateurs doivent installer MySQL sur leur machine par exemple.

Par ailleurs, vu le caractère amateur de ce projet, il n'est pas dans mon idée d'avoir un serveur dédié. Je souhaiterais, si c'est possible, utiliser un service de Cloud pour stocker la BDD (type dropbox partagée), afin qu'elle soit disponible en permanence pour les utilisateurs, qui disposeraient sur leur machine d'un accès à ce service de cloud, et du programme java.

Voilà, comme vous le voyez, ma question n'es pas très claire et j'en suis désolé, je crois que j'ai surtout besoin qu'on m'expliquer pourquoi j'ai tant besoin d'un SGBD, et comment faire pour que ce soit relativement transparent pour l'utilisateur du programme. J'ai tenté de lire la FAQ, et d'autres choses, mais je m'y perds un peu, d'où mon message. Désolé si je suis hors sujet ou trop peu clair, je fais de mon mieux et j'essayerai de clarifier au fil des réponses.

Merci beaucoup!

François