Se connecter a une bdd MySQL a partir d'un applet JAVA...

Se connecter a une bdd MySQL a partir d'un applet JAVA... - Java - Programmation

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 :
 

Code :
  1. //E:\Program Files\javasdk\jre\lib\ext\mysql-connector-java-3.1.0-alpha-bin.jar;
  2. import java.awt.*;
  3. import java.sql.*;
  4. public class applet extends java.applet.Applet
  5. {
  6. public void init ()
  7. {
  8.  try
  9.  {
  10.   //com.mysql.jdbc.Driver
  11.   //org.gjt.mm.mysql.Driver
  12.   Class.forName("org.gjt.mm.mysql.Driver" ).newInstance();
  13.  }
  14.  catch (Exception E)
  15.  {
  16.   add(new Label("drivers erreur" ));
  17.  }
  18.  try
  19.  {
  20.   Connection C = DriverManager.getConnection("jdbc:mysql://localhost/base?user=root&password=" );
  21.  }
  22.  catch (SQLException E)
  23.  {
  24.   add(new Label("connexion erreur" ));
  25.  }
  26. }
  27. }


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.
Reply

Marsh Posté le 27-03-2003 à 16:00:06   

Reply

Marsh Posté le 27-03-2003 à 16:13:23    

:bounce:


---------------
yvele n'est plus.
Reply

Marsh Posté le 27-03-2003 à 16:15:24    

e.printStackTrace();

Reply

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.

Reply

Marsh Posté le 27-03-2003 à 16:21:58    

El_gringo a écrit :

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.


 
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?


---------------
yvele n'est plus.
Reply

Marsh Posté le 27-03-2003 à 16:22:10    

http://mindprod.com/jglossapplet.html
 
Ctrf-F  
classpath
Entrée

Reply

Marsh Posté le 27-03-2003 à 16:30:55    


 
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..


Message édité par Mr yvele le 27-03-2003 à 16:34:25

---------------
yvele n'est plus.
Reply

Marsh Posté le 27-03-2003 à 16:34:17    

Mr yvele a écrit :


Puis en plus l'erreur c'est avant la connexion.. donc heu.. :/


humm.
Ctrl F fait pas la même chose chez toi que chez moi on dirait...
 

Citation :


 archive= "Everything.jar,Sub/MoreStuff.zip"      
 
Resource file, classes etc. Your ARCHIVE parameter must have a list of the absolute or relative jar files, separated by commas. (Watch out! The ARCHIVE tag in <OBJECT is space-separated!) If you have too little or too much qualification, or if you fail to use the file naming conventions of your server, you will be in trouble. You are probably best to use absolute urls or fully qualified hard disk file names. Whether the archive is supposed to be relative to the current HTML directory, the CODEBASE, or all elements of the classpath is unclear.

Reply

Marsh Posté le 27-03-2003 à 16:35:27    

Mr yvele a écrit :


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..


oui aussi, il garde l'hostname utilisé par la requete http, donc pas de requete http, pas d'hostname autorisé

Reply

Marsh Posté le 27-03-2003 à 16:35:37    

lorill a écrit :


humm.
Ctrl F fait pas la même chose chez toi que chez moi on dirait...


 
Moi je croyais que Ctrf-F c'été un mot clef..!   :pt1cable:  
Fallais pas s'emmeller les doigts dans le clavier hein..


---------------
yvele n'est plus.
Reply

Marsh Posté le 27-03-2003 à 16:35:37   

Reply

Marsh Posté le 27-03-2003 à 16:36:40    

lorill a écrit :


oui aussi, il garde l'hostname utilisé par la requete http, donc pas de requete http, pas d'hostname autorisé


 
Mais le probleme arrive avant nan?..
Moi il catch à "erreur driver"..
 
J'ai mal fait le set classpath?


---------------
yvele n'est plus.
Reply

Marsh Posté le 27-03-2003 à 16:38:17    

Mr yvele a écrit :


J'ai mal fait le set classpath?


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.

Reply

Marsh Posté le 27-03-2003 à 16:39:34    

lorill 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.


 
 :p  jsuis fatigué.. désolé..


---------------
yvele n'est plus.
Reply

Marsh Posté le 27-03-2003 à 16:54:29    

[:cupra]


---------------
Je code en série et en parallèle
Reply

Marsh Posté le 27-03-2003 à 17:06:01    

Comment je fais alors?.. :/
Une piste? A part RTFM..


---------------
yvele n'est plus.
Reply

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.

Reply

Marsh Posté le 27-03-2003 à 17:36:02    

benou a écrit :

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.


 
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..  ;)


Message édité par Mr yvele le 27-03-2003 à 17:37:57

---------------
yvele n'est plus.
Reply

Marsh Posté le 27-03-2003 à 17:44:20    

Mr yvele a écrit :


 
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..  ;)  


 
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...

Reply

Marsh Posté le 27-03-2003 à 17:49:10    

El_gringo 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...


j'allais le dire ...

Reply

Marsh Posté le 27-03-2003 à 17:49:44    

El_gringo 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...


 
??
 
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.. :/


---------------
yvele n'est plus.
Reply

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.

Reply

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

Reply

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?


---------------
yvele n'est plus.
Reply

Marsh Posté le 27-03-2003 à 17:59:49    

c'est ca ...
ton fichier texte est généré dynamiquement en PHP

Reply

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!


---------------
yvele n'est plus.
Reply

Marsh Posté le 27-03-2003 à 18:09:12    

Mr yvele a écrit :

ah nan oups..
directement par sockets..


ca c'est juste pour optimiser les échanges réseaux ... fait ca par un fichier ca marche aussi et c'est plus simple

Reply

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...  :sleep: )
 
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  :D  
 
voili voilou bon courage et tiens nous au courant  :hello:  
bonne nuit

Reply

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.


 :o  
 
c'est la façon habituelle de charger un driver JDBC ! son code est bon !

Reply

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)


Message édité par benou le 27-03-2003 à 19:20:16
Reply

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 ...


Message édité par darklord le 27-03-2003 à 19:52:05

---------------
Just because you feel good does not make you right
Reply

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 :
  1. // Creation de l'URL
  2. URL url = new URL("monsuperPHP" );
  3. // Ouverture de la page, mise en place d'un BufferedReader
  4. BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
  5. //Lecture ligne à ligne
  6. String line;
  7. while ((line = reader.readLine()) != null) {
  8.     //Traitement des infos de ta ligne ici..
  9. }

 
 
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à.

Reply

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  ;)


Message édité par Mr yvele le 28-03-2003 à 09:44:48

---------------
yvele n'est plus.
Reply

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 ?

Reply

Marsh Posté le 28-03-2003 à 09:51:59    

benou a écrit :


 :o  
 
c'est la façon habituelle de charger un driver JDBC ! son code est bon !


 
oui oui, mais je n'ai jamais dit le contraire  :)

Reply

Marsh Posté le 28-03-2003 à 09:57:16    

El_gringo a écrit :

Tu dois te tourner vers une techno orientée Serveur HTTP.
Tu préfères les Servlets/JSP au Php ?


 
nan nan vive PHP!  [:theorie de nico]  
 
Mais je vois pas comment faire en php.. il faudrais que le client, ai un applet lancé, qui lui meme lance un script PHP?


---------------
yvele n'est plus.
Reply

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

Reply

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  :jap:  
 
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"


---------------
yvele n'est plus.
Reply

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.

Reply

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..  ;)


---------------
yvele n'est plus.
Reply

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..
 
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..  ;)  


 
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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed