Se connecter a une bdd MySQL a partir d'un applet JAVA... - Java - Programmation
Marsh Posté le 27-03-2003 à 16:16:59
Le tout, c'est de réfléchir :
une applet, c'est côté client. Tu vas pas demander à tous les clients de changer leurs classpath ! Donc t'as pas à toucher au classpath.
Après j'ai jamais fait d'applet, encore moins accèdé à des bases de données avec, mais j'pense que c'est possible.
Marsh Posté le 27-03-2003 à 16:21:58
El_gringo a écrit : Le tout, c'est de réfléchir : |
Bah oui je sais bien, mais quand je voudrais diffuser l'applet, j'integrerai toutes les classes (packages) dont j'ai besoin dedans..
hum?.. c possible ça.. nan?
Marsh Posté le 27-03-2003 à 16:22:10
http://mindprod.com/jglossapplet.html
Ctrf-F
classpath
Entrée
Marsh Posté le 27-03-2003 à 16:30:55
lorill a écrit : http://mindprod.com/jglossapplet.html |
Mais heu le classpath ne rentre pas en jeux.. je n'en suis qua ma phase de tests.. faut juste que ça tourne en local..
Apres je verré.. fo pas mettre la charrue avant les boeufs..
Citation : If they were loaded from a local disk, they can't talk to any webserver. |
Donc c'est pour ça?
Il faut que je lance l'applet a partir du serveur http.. meme si c'est la meme machine.. hum? ça parrait débile.. mais ptetre qu'il fait la difference..
Puis en plus l'erreur c'est avant la connexion.. donc heu..
PS: désolé d'avance si j'ai raconté pleins de conneries dans ce post.. c'est dur de passer au java apres 4 mois de PHP..
Marsh Posté le 27-03-2003 à 16:34:17
Mr yvele a écrit : |
humm.
Ctrl F fait pas la même chose chez toi que chez moi on dirait...
Citation : |
Marsh Posté le 27-03-2003 à 16:35:27
Mr yvele a écrit : |
oui aussi, il garde l'hostname utilisé par la requete http, donc pas de requete http, pas d'hostname autorisé
Marsh Posté le 27-03-2003 à 16:35:37
lorill a écrit : |
Moi je croyais que Ctrf-F c'été un mot clef..!
Fallais pas s'emmeller les doigts dans le clavier hein..
Marsh Posté le 27-03-2003 à 16:36:40
lorill a écrit : |
Mais le probleme arrive avant nan?..
Moi il catch à "erreur driver"..
J'ai mal fait le set classpath?
Marsh Posté le 27-03-2003 à 16:38:17
Mr yvele a écrit : |
bon... je reste calme... relis le message du dessus.
LE CLASSPATH UTILISE POUR LES APPLETS N'A RIEN A VOIR AVEC CELUI UTILISE PAR LE SYSTEME.
Marsh Posté le 27-03-2003 à 16:39:34
lorill a écrit : |
jsuis fatigué.. désolé..
Marsh Posté le 27-03-2003 à 17:06:01
Comment je fais alors?..
Une piste? A part RTFM..
Marsh Posté le 27-03-2003 à 17:32:57
des applets qui font des requêtes SQL c'est pas terrible !!
habituellement, on passe plutot par des servlets qui, elles font les requêtes SQL et formate le résulat, et les applets ne font plus qu'afficher ce qu'elles ont reçu de la servlet.
Marsh Posté le 27-03-2003 à 17:36:02
benou a écrit : des applets qui font des requêtes SQL c'est pas terrible !! |
hum ah oké..
Donc ça c'est beaucoup plus optimisé que de directement ecrire/lire sur la bdd..
Et tu crois que mon hebergeur me laissera lancer un servlet?
Bon.. jvé me documenter sur les servelets! merci
EDIT: puis merci lorill aussi.. qui est quand meme un tout petit peu gentil..
Marsh Posté le 27-03-2003 à 17:44:20
Mr yvele a écrit : |
Ben, à la limite, si tu sais faire du Php, ça devrait pas poser de problème que ce soit du Php qui lise et écrive dans la BD...
Marsh Posté le 27-03-2003 à 17:49:10
El_gringo a écrit : |
j'allais le dire ...
Marsh Posté le 27-03-2003 à 17:49:44
El_gringo a écrit : |
??
Mais comment je fait communiquer le java avec le php?
Je fout le php dans un iframe caché et avec le java je rafraichi la iframe en y passant des "parametres"??
Mais c'est un peu du bricolage..
Sinon t'es sur que je doive laisser tomber l'idée de client java qui se connecte direct a la bdd.. ça parait plus simple et plus clair..
Bon encore faut til que je trouve comment integrer ces fuckings drivers a la class..
Marsh Posté le 27-03-2003 à 17:51:03
Ben, que tu communiques avec une servlet ou avec du Php, de toute façon, le protocole de comunication est standard : HTTP.
Marsh Posté le 27-03-2003 à 17:53:10
oauis, soit en HTTP (java.net.URL), soit avec une bonne socket de derrière les fagots
Marsh Posté le 27-03-2003 à 17:56:27
Je vois pas trop comment faire techniquement..
Je dois etre trop crevé.. je crois que je vais rentrer a ma maison, boire un chocolat froid!
hum.. a la rigueur avec java je peux ouvrir un fichier texte sur le serveur http.. fichier texte qui sera edité par du php (qui lui, a accés facilement a la bdd)
ça a ça que tu pensais?
Marsh Posté le 27-03-2003 à 17:59:49
c'est ca ...
ton fichier texte est généré dynamiquement en PHP
Marsh Posté le 27-03-2003 à 18:00:26
ah nan oups..
directement par sockets..
Mais je vois tjs pas.. il faudrais qu'un script php tourne indefiniment, pour pouvoir mettre a jour les client à tout instants..
Ou alors quil se lance des qu'un client lance l'appli..
Oula, jvé rentrer moi..
A+ bonne fin de soirée! et merci..
désolé jsuis a la masse!
Marsh Posté le 27-03-2003 à 18:09:12
Mr yvele a écrit : ah nan oups.. |
ca c'est juste pour optimiser les échanges réseaux ... fait ca par un fichier ca marche aussi et c'est plus simple
Marsh Posté le 27-03-2003 à 18:44:22
bon, je dis peut etre une betise, donc ne vous genez pas pour me rectifier apres hein !
Une applet charge les classes dont alle a besoin avant d'etre executee. Le nom de ton driver etant une String dans le programme, la classe n'est jamais chargee par ton applet.
Je vois donc plusieurs trucs qui -- peut-etre -- pourrait eventuellement aider, tel que l'on s'autorise a penser dans les milieux autorises (desole, il est tard par chez moi... )
1) tu fais explicitement un import org.gjt.mm.mysql.*;
2) tu fous ton applet dans un gros jar qui inclut le driver MySQL, ce qui va forcer l'applet a tout telecharger
3) tu te dis que finalement, une applet c'est chiant, c'est long a charger (surtout s'il faut charger le driver...) et qu'on peut faire des trucs excellent en PHP, qui seront vachement plus rapides parce que faire des requetes distantes c'est vraiment pas optimal
voili voilou bon courage et tiens nous au courant
bonne nuit
Marsh Posté le 27-03-2003 à 19:18:44
souk a écrit : Le nom de ton driver etant une String dans le programme, la classe n'est jamais chargee par ton applet. |
c'est la façon habituelle de charger un driver JDBC ! son code est bon !
Marsh Posté le 27-03-2003 à 19:20:06
et le reste c'est du troll !
(sauf le coup du driver dans le jar qui est obligatoire si tu continue à vouloir faire du jdbc à travers le réseau et si tu ne veut pas installer le drivers chez chacun des clients manuellement)
Marsh Posté le 27-03-2003 à 19:51:45
souk a écrit : Le nom de ton driver etant une String dans le programme, la classe n'est jamais chargee par ton applet. |
bin si elle l'est au moment du Class.forName pour autant qu'elle soit dans le classpath ...
Marsh Posté le 28-03-2003 à 09:34:47
La solution de faire une partie en PHP et une partie en applet est à mon sens la meilleure :
1 - ca évite d'avoir à laisser un accès BDD disponible depuis le réseau,
2 - tu sera obligé de mettre qqpart dans le code de ton applet, le login et le password MySQL, donc, un coup de Jad, et tu te fais détruire ta base pas le premier plaisantin venu.
Ensuite, pour communiquer, c'est tout con :
1 - ton applet fait une requete HTTP sur une de tes 'pages PHP' (je sais pas comment on appelle ça, j'ai jamais fait de PHP) , qui lui donne un résultat formatté comme ça t'arrange.
2 - l'applet lit la page retournée par son appel HTTP, interprète les infos formattées part le PHP, et affiche le résultat.
Exemple :
Code :
|
Bon, adns ce cas précis, on lit ligne à ligne, mais rien ne t'empêche de lire le résultat complet, et de l'interpréter dans son entier (par exemple, si c'est un contenu XML) Mais bon, dans ton cas, si tu y met simplement des résultats de requêtes mysql, la lecture ligne à ligne est pertinente.
Voilà voilà.
Marsh Posté le 28-03-2003 à 09:44:18
gfive a écrit : 2 - tu sera obligé de mettre qqpart dans le code de ton applet, le login et le password MySQL, donc, un coup de Jad, et tu te fais détruire ta base pas le premier plaisantin venu. |
Bah ouè, ça j'y avais pensé hier, juste avant d'aller au lit..
Et ça fait chier!
Mais bon, je peu creer un compte MySQL hyper resteint.. qui na que acces à la bdd en lecture seule...
Mais bon, c'est foireux, parceque moi, j'ai besoin que l'applet puisse ecrire.. soit dans la bdd, soit dans le fichier..
Donc il faut que je laisse au moins l'ecriture libre dans une table de la bdd... mais ça, c'est pas tres secure, si un ptit debil me Jad mon .class..
Dois je me tourner vers les servlet?..
Par exemple caramail, comment il fait?
EDIT: en tout cas, merci gfive
Marsh Posté le 28-03-2003 à 09:48:39
Tu dois te tourner vers une techno orientée Serveur HTTP.
Tu préfères les Servlets/JSP au Php ?
Marsh Posté le 28-03-2003 à 09:51:59
benou a écrit : |
oui oui, mais je n'ai jamais dit le contraire
Marsh Posté le 28-03-2003 à 09:57:16
El_gringo a écrit : Tu dois te tourner vers une techno orientée Serveur HTTP. |
nan nan vive PHP!
Mais je vois pas comment faire en php.. il faudrais que le client, ai un applet lancé, qui lui meme lance un script PHP?
Marsh Posté le 28-03-2003 à 09:59:02
bah, avec la solution de la communication applet/PHP (ou servlet, hein) par HTTP, tu peux faire de l'écriture!!
Imagine un truc tout con :
L'applet fait un appel du genre :
"http://monsite.mondomaine/MysqlManager.php?la requete que tu veux faire"
(en formattant la reqûete que tu veux faire avec un petit URLEncoder.encode(requete) pour que l'url soit valide)
et tu fait exécuter la requête par ton PHP, qui retourne le résultat...
Avec un machin basique comme ça, tu peux tout faire dans ta base, sans pour autant que l'applet ne contienne d'infos sensibles.
Par contre, ça reste risqué : un mec qui passe une requete qui te flingue ta base, par exemple, c'est embêtant...Mais bon, tu peux faire vérifier la requête à ton PHP avant de l'exécuter, histoire de vérifier qu'elle reste dans le domaine de ce que peux faire le client
Marsh Posté le 28-03-2003 à 10:09:30
ah ok.. l'applet peu faire un appel
"http://monsite.mondomaine/MysqlManager.php?la requete que tu veux faire"
sans pour autant que cette derniere se lance dans un browser.. c'est vrai.. pas bete, suffit d'envoyer une requette.. comme en telnet sur port 80 par exemple..
Donc j'ai tout ce qu'il faut.. merci
Je pense que c'est une bonne solution...
Mais imaginons que 50 - 100 clients effectuent une lecture de fichier (vers mon http) toutes les 4 secondes chacun.. ça risque pas d'etre trop lourd? je pense que ça ira hein.. rassurez moi.. ça va pas "ramer"
Marsh Posté le 28-03-2003 à 10:10:55
Ou faire un système de login avant d'autoriser quelqu'opération que ce soit.
Marsh Posté le 28-03-2003 à 10:15:58
De login? mais de toutes façon la source de l'applet est visible.. donc si je met un login pass.. ça servira a rien..
Bah de toutes façon jme débrouille avec mon PHP, lui il sait qui est censé faire quoi.. donc ça va...
Il laissera pas passer une "fausse" requete..
Marsh Posté le 28-03-2003 à 10:37:38
Mr yvele a écrit : De login? mais de toutes façon la source de l'applet est visible.. donc si je met un login pass.. ça servira a rien.. |
J'parlais de faire un système de login côté Php, histoire que n'importe quoi ne puisse pas utiliser ton code Php pour faire n'imp dans ta base. Sinon, c'est pas à peine plus sur que l'applet, ça sert à rien.
Marsh Posté le 27-03-2003 à 16:00:06
'lut!
Bah j'aimerais bien me connecter a une bdd, via un applet java..
J'ai donc codé ça :
et j'ai fait un SET CLASSPATH = mysql-connector-java-3.1.0-alpha-bin.jar;
avec le packetage ici:
E:\Program Files\javasdk\jre\lib\ext\mysql-connector-java-3.1.0-alpha-bin.jar;
Mais ça catch à "drivers erreur"
Merci de me guider dans la bonne voie..
Et soyez pas trop dur, j'ai commencé le java ce matin!
---------------
yvele n'est plus.