IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

quel type de BDD utiliser pour hebergeur gratuit


Sujet :

JDBC Java

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut quel type de BDD utiliser pour hebergeur gratuit
    Bonjour,

    Je suis entrain de développer un petit logiciel client pour se connecter à une BDD : la BDD sera stockée chez un hébergeur de site web gratuit => a votre avis, quel type de BDD dois-je utiliser pour être compatible avec la majorité des hebergeur gratuits ? mySQL ?

    sinon, gérer tous les types de BDD, c'est compliquer à faire ?

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    voir avec ton hébergeur ce qu'il propose. Je ne connais pas beaucoup d'hébergeur gratuit qui proposent des serveurs java, accessoirement!

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    Désolé pour mon manque de connaissances dans les BDD.

    Ce que je veux c'est juste créer un client qui puisse être utiliser par un maximum de personnes (peu importe le type de la BDD).
    Lorsque je regarde les listes des hébergeurs gratuits, la quasi totalité propose du PHP+MySQL. En java, ne peut-on pas se connecter directement sur la BDD MySQL sans passer par la couche PHP (vu ta réponse, j'ai l'impression que non) ?

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par boboss123 Voir le message
    Je suis entrain de développer un petit logiciel client pour se connecter à une BDD : la BDD sera stockée chez un hébergeur de site web gratuit
    C'est un peu incompatible tout ceci : la plupart des hébergeurs gratuits limitent l'accès à leurs BDD à leurs serveurs. Donc tu ne pourras pas y accéder depuis un poste client...

    Tu as vraiment besoin d'une BDD commune qui soit hébergé ? C'est quoi comme application ?

    Citation Envoyé par boboss123 Voir le message
    sinon, gérer tous les types de BDD, c'est compliquer à faire ?
    Non... A partir du moment où tu utilises du SQL standard et que tu fais cela proprement (privilégier les PreparedStatement, éviter le SQL "propriétaire", etc.), le changement de BDD se fait simplement en changeant de drivers et d'URL de connexion...


    a++

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    voici la description de mon appli : http://www.developpez.net/forums/d99...hie-mise-jour/

    Ce que je voulais faire c'est avoir un client qui s'occupe de crée une BDD sur un serveur avec les champs qui vont bien et qui s'occupe du remplissage de celle-ci.
    Et un autre client qui ne fait que de la lecture et qui fait des recherche dans la BDD.
    => les deux clients ne pourraient être qu'une seul appli avec des modes différents à activer/désactiver

    ... Donc peut-être faut-il mieux copier à chaque fois la BDD complète en local mais je ne sais pas trop comment faire pour la mettre à jour (je ne me rends pas trop compte de la taille que pourra avoir la BDD)

    Remarque : une autre solution serait de faire un client HTTP et de se connecter à un serveur PHP+MySQL mais ça vourdrait dire qu'il faut aussi que je me farcisse le dev de la partie PHP => ce que j'aimerais éviter

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par boboss123 Voir le message

    Remarque : une autre solution serait de faire un client HTTP et de se connecter à un serveur PHP+MySQL mais ça vourdrait dire qu'il faut aussi que je me farcisse le dev de la partie PHP => ce que j'aimerais éviter

    Pourtant, des solutions que tu cites c'est de loin la meilleure. A savoir de développer des services en php (genre web services en REST échangeant les données en XML/JSON) qui mettent à dispositino diverses opérations sur les données de la base (tout dépend de ce que tu cherches à faire). Services sur lesquels se basent ton application pour récupérer ses données.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Il y a plusieurs solutions...

    • Si tu veux vraiment faire un accès distant à la BD, je pense qu'il faudrait passer par un serveur dédié, mais cela a un coût...

    • Si tu veux copier la BD en local, le plus simple serait de passer par une BDD embarquée style Derby ou HSQLDB : la BD stockera tout dans un fichier, et il te suffira de télécharger ce fichier depuis le serveur pour avoir les données à jour.
      Par contre en effet si la BD est conséquente cela pourrait s'avérer assez lourd...

    • Sinon un WebService pourrait faire l'affaire, selon la quantité de données que tu as à transmettre. En gros au lieu de faire une requête SQL tu fais une requête Web vers du PHP qui se chargera de renvoyer le résultat... mais ca demande un peu plus de boulot.



    Ta BD est conséquente ???

    a++

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    de toutes facons, attaquer à distance la DB est rarement une bonne idée. Parce que ca nécessite que tes clients aient les droit d'accès à la base de donnée, ce qui nécessite de mettre en place, dans la DB, toute ta logique de sécurité et de confidentialité.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    merci pour vos réponse

    Je pense que je vais me tourner vers une BDD locale. Ce n'est certe pas la solution ultime mais elle a le mérite d'avoir plusieurs avantages :
    - moins de risque de piratage
    - moins complexe à réaliser. Simplification pour le debug car tout est stocké en local
    - juste deux langages de prog a maitriser Java/SQL
    - logiciel client forcement compatible avec la BDD car ils seront livrés en même temps

    Pour la taille de la BDD je ne pense pas qu'elle fasse plus de 10Mo.

    Par contre reste un dernier point : comment faire pour ajouter de nouvelles données à ma BDD ?
    Je pensais faire sur l'appli client une fonction d'ajout d'élément qui générerait un fichier de description de celui-ci (format .txt ?) : il ne resterait plus qu'a poster ce fichier sur un forum et c'est un admin qui s'occuperait de récupérer le fichier, vérifier les données et de mettre à jour la BDD => seul problème avec cette méthode est que plusieurs admin ne peuvent pas travailler en même temps sur la BDD vu qu'ils doivent la copier en local avant de pouvoir travailler dessus.
    ça me semble pas trop mal comme solution : vous en pensez quoi ?


    -----------------

    j'ai commencé à tester derby en local : je ne suis pas aller très loin :'(

    J'ai copier derby.jar dans mon projet puis j'ai défini le build path (je suis sous eclipse).

    Donc voici mon code de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
     
     
    public class Main {
    	public static void main(String[] args) {
     
    		String dbURL = "jdbc:derby://localhost:1527/myDB;create=true;user=me;password=mine";
    		Connection conn = null;
     
     
    		// **********************************
    		// Test si driver chargé
    		try {
    			Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
    		}
    		catch(ClassNotFoundException e) {
    			System.err.println("Erreur de chargement du driver : " + e) ;
    		}
     
     
    		try {
    			conn = DriverManager.getConnection(dbURL);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} 
     
     
     
     
    		System.out.println("Hello World");
    	}
     
    	/* (non-Java-doc)
    	 * @see java.lang.Object#Object()
    	 */
    	public Main() {
    		super();
    	}
     
    }

    j'ai une erreur sur : conn = DriverManager.getConnection(dbURL);
    => normal car la DB n'est pas créé : comment fait-on pour la créer ? j'ai trouvé pleins de tuto pour ouvrir une db et la parcourir mais pas pour la créer...
    Et c'est quel URL qu'il faut que j'utilise ?

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    'est bon j'ai trouvé comment créer ma BDD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    		Connection con;
    		DatabaseMetaData metaData;
    		Statement stmt;
    		ResultSet rs;
     
    		// chargement du driver
    		String driver = "org.apache.derby.jdbc.EmbeddedDriver"; 
    		try {
    			Class.forName(driver).newInstance();
    		} catch (InstantiationException e1) {
    			System.err.println(e1);
    		} catch (IllegalAccessException e1) {
    			System.err.println(e1);
    		} catch (ClassNotFoundException e1) {
    			System.err.println(e1);
    		} 
     
     
     
    		String dbProtocole = "jdbc:derby:";
    		String dbName = "nomDeLaDB";
    		String dbURL = dbProtocole + dbName;
    		try {
    			con = DriverManager.getConnection (dbURL + "; create = true"); // création (si BDD n'existe pas) et connection à la BDD
    			//con = DriverManager.getConnection(dbURL, "MonLogin","MonMotDePasse"); // connection a une BDD
     
    			metaData = con.getMetaData(); // pour avoir des infos sur la BDD
    			stmt = con.createStatement(); // pour pouvoir executer des commandes SQL
     
     
    			// ****************************************
    			// Suppression de la table
    			stmt.executeUpdate("DROP TABLE MA_TABLE");
     
     
    			// ****************************************
    			// Création de la table
    			// * les principaux types sont :
    			//     - INT => entier
    			//     - VARCHAR(x) => chaine de caractères de longueur x (compris entre 1-255)
    			//     - TEXT (marche pas) => chaine de caractères de longueur non fixe
    			//     - DATE => date
    			stmt.executeUpdate("CREATE TABLE MA_TABLE(id INT NOT NULL, name VARCHAR(50), description VARCHAR(50))");
     
     
    			// ****************************************
    			// Insertion d'éléments
    			stmt.executeUpdate("INSERT INTO MA_TABLE VALUES (1, 'voiture', 'c''est ma voiture')");
    			stmt.executeUpdate("INSERT INTO MA_TABLE VALUES (2, 'chat', 'c''est mon chat')");
    			stmt.executeUpdate("INSERT INTO MA_TABLE VALUES (3, 'chien', 'c''est mon chien')");
     
     
    			// ****************************************	
    			// lecture des éléments
    			rs = stmt.executeQuery("SELECT * FROM MA_TABLE");
     
    			while(rs.next()){
    				String strTmp = "";
     
    				strTmp = "id: " + rs.getString("id");	
    				strTmp += "; name: " + rs.getString("name");			
    				strTmp += "; description: " + rs.getString("description");	
     
    				System.out.println(strTmp);
    			}
     
    			con.close(); // fermeture de la connection
    		} catch (SQLException e) {
    			System.err.println(e);
    		}
    Par contre comment fait-on pour que l'ID soit auto incrémenté et le définnir en tant que clef primaire ?

  11. #11
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE PEOPLE
    	(PERSON_ID INT NOT NULL GENERATED ALWAYS AS IDENTITY
    	CONSTRAINT PEOPLE_PK PRIMARY KEY, PERSON VARCHAR(26));


    Sorti de la référence Derby
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    ok, merci beaucoup (a priori "CONSTRAINT PEOPLE_PK" n'est pas nécessaire)

  13. #13
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Mieux vaut donner des noms explicites à ses contraintes histoire de s'y retrouver lors de la maintenance de la base, ce n'est pas obligatoire maizs c'est considéré comme une bonne pratique Dans le cas hypothétique où tu aurais à dropper la primary key de ta table, le nom explicite de la primary key s'avèrera relativement utile.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    ok, c'est noté.

    Par contre j'ai une autre petite question : un champs de texte dont la taille n'est pas figée, on doit le définir avec quel type ? LONG VARCHAR ?
    Lorsque j'utilise des LONG VARCHAR, est-ce que si ma chaine ne fait que 10 caractères, elle va quand même prendre 32700 caractères en espace mémoire ?

    Aussi, dois-je définir ma clef primaire sur le nom de mes objets/lieux/personnages ou sur une colonne de type INT auto-incrementés ? y a t-il une methode plus performante que l'autre ?

  15. #15
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Ca ne prendra que le place correspondant à la chaine (le nom varchar signifiant variable character, de fait chaine à taille variable). Ce sont les colonnes de type char qui prennent une taille fixe.

    En ce qui concerne la clef primaire il est préférable qu'elle soit soit placée sur une colonne technique et non porteuse de sens en général, donc un int auto incrémenter fais parfaitement l'affaire. Je te conseille d'aller lire un tant soit peu un cours de SGBD pour apprendre comment modéliser correctement une base de données. En particulier, renseigne toi sur ce que sont les formes normales/normées.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    ok, merci beaucoup je vais lire les cours

  17. #17
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    je commence a comprendre le principe de BDD relationnelle mais j'ai quelques question :

    Donc j'ai :
    - une table contenant des objets : id_obj, nom, description, attribut 1, attribut 2, ... attribut n
    - une table contenant des armes : id_arme, nom, description, attribut 1, attribut 2, ... attribut n


    aussi, j'ai ma table de liste de quête : id_quete, nom, numéro, level, description

    Pour la gestion de récompenses de quête (il peut y avoir plusieurs objets, armes en récompense), je dois donc créer une autre table : id_recompense, id_quete, id_objet_recompense

    => je ne vois pas trop quel doit être le type de "id_objet_recompense" car ça peut être un id d'objet ou d'armure : comment dois-je faire ?

  18. #18
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    les armes ne sont-elle pas des objets? Si oui, un design correct serait:


    objet : id_obj, nom, description, type, attribut 1, attribut 2, ... attribut n
    et si type==arme
    arme: id_objet, attributeSpecifiqueArme1, ....

    tu as donc arme qui pointe sur objet, et tu aura récompense qui pointe sur objet.


    PS: ce genre de quesiton aurait plutot sa place dans le forum sql!

  19. #19
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    ok merci pour la réponse

    aussi , connaissez vous un petit logiciel graphique (et gratuit) qui permette de créer/éditer des bdd derby (ceux que j'ai trouvé sont payant) ?

Discussions similaires

  1. Quel type de compte utiliser pour sql server de la ferme
    Par gracouille dans le forum SharePoint
    Réponses: 5
    Dernier message: 11/03/2009, 14h44
  2. [SQL CE 3.5] Quel type de champs utiliser pour du texte ?
    Par zax-tfh dans le forum Développement
    Réponses: 10
    Dernier message: 06/03/2009, 15h30
  3. [aide] Quel type de champs utiliser pour mettre un "+"
    Par lothar59 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 04/03/2007, 14h05
  4. Réponses: 6
    Dernier message: 26/04/2006, 15h13
  5. Réponses: 0
    Dernier message: 26/04/2006, 13h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo