Voir la version complète : Comment accéder depuis un applet java sur une base de donnée msql
simonh14
25/10/2005, 11h00
Hello
Maintenant que je commence à assimiler plus ou moins java, je passe du temps à créer des applets. cependant une question existentielle me turlupine.
Comment accéder aux bases de données Msql par le biais d'un applet? si vous aviez un ptit exemple ca me soulagerait pas mal
comment on affiche?
A plus et longue vie au GCN
Pour ça, il faut d'abord télécharger le driver JDBC Mysql Java que tu peut trouver en cherchant 2 minutes sur google.
Ensuite, il faut ajouter la librairie mysql-connector à ton classpath pour la compilation (les IDE le font souvent avec une option "ajouter une librairie").
Je vais te mettre un exemple pour te montrer comment ça marche :
//ConnectionMysql.java[
import java.sql.*;
import javax.swing.*;
public class ConnectionMysql {
Connection connec;
String chaineconnexion = "jdbc:mysql://nom_de_la_base";
String login = "mon_login";
String pass = "mon_pass";
public Connection getConnec() throws Throwable {
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection(chaineconnexion, login, pass);
}
public static void main(String [] args) {
try {
connec = getConnec();
Statement instruction = connec.createStatement();
instruction.executeUpdate("CREATE TABLE ESSAI(NOM VARCHAR(255))");
instruction.executeUpdate("INSERT INTO ESSAI(NOM) VALUES("Jean")");
instruction.close();
Statement instruction2 = connec.createStatement();
ResultSet resultat = instruction2.executeQuery("SELECT NOM FROM ESSAI");
instruction2.close();
while(resultat.next()) {
JOptionPane.showMessageDialog(null, resultat.getString("NOM"));
}
resultat.close();
}
catch(Throwable exception)
{
JOptionPane.showMessageDialog(null, "Erreur : "+exception);
}
}
}
Explications :
- La classe java.sql.Connection sert à décrire la connexion à ta base de données MySQL. On l'utilise pour beaucoup de méthodes, donc j'ai créé une méthode dans l'exemple pour aller plus vite.
- La classe java.sql.Statement sert à décrire une instruction SQL envoyée à la BDD. Son constructeur n'est jamais utilisé : pour en créer un, on utilise la methode java.sql.Connection.createStatement().
- La methode java.sql.Statement.executeUpdate(String) sert à envoyer une demande de mise à jour d'une base de données qui ne renverra pas de resultat.
- Il faut fermer chaque java.sql.Statement pour des problemes d'allocation memoire. Pour cela, on utilise la methode java.sql.Statement.close().
- La classe java.sql.ResultSet sert à accueillir les resultats d'une requete sur une BDD. Elle se comporte comme la classe java.util.Arrays.
- On n'utilise pas la methode java.sql.Statement.executeUpdate(String) pour une requete, mais seulemeunt pour les mises à jour. Pour les requetes, on utilise la methode java.sql.Statement.executeQuery(String) qui renvoie un objet de type ResultSet.
- On utilise la methode next() pour naviguer dans un ResultSet comme dans un tableau.
J'espère que ma réponse te convient. Pour une applet, c'est le même principe, sau qu'il ne faut pas utiliser la methode main() mais la methode init().
Argh ! Ce forum a enlevé toute l'indentation de code que j'ai pris 5 min a faire snif...
Je l'ai remise. Il faut mettre le code entre balises [code]
Par contre si ta base de données est sur un autre serveur que celui sur lequel le client télécharge l'applet, il te faudra signer ton applet.
simonh14
08/11/2005, 17h38
Mais ton exemple n'est pas un applet...
(mtn j'essaie les de faire par un servlet mais ca bugue un peu pour le moment.)
Mais un applet sur une base de données c'est comment
ton exemple j'y arrive c'est un prog java... pas un applet ou c moi qui divague?:00000020:
Mais merci quand même pour vos aides, vous m'avez déjà rendu beaucoup service:00000026:
pour en faire une applet, il te suffit de faire comme l'a dit delroth :
modifier le code pour dériver de Applet et remplacer le nom et la signature de la méthode main() par ceux de la méthode init()
Que rencontres-tu comme problème ?
simonh14
16/11/2005, 15h31
en fait la c bon :D
Mais j'ai un autre problème plus difficile cette fois et bien malin sera celui qui pourra me répondre en Jsp.
j'ai un formulaire avec une liste déroulante. quand tu envoies, ca va dans une autre page qui va récupérerce que t'as passé comme valeur.
String F;
F= request.getParameter("choix");
je peux faire un <%= F %> ca m'affiche la valeur 1 par exemple ou 2 ou 3...
jusque la ca marche. mais si je fais un test
If (F=="1")
{
out.print("bouh");
}
ca ne marche pas mais pourquoi donc?
si tu pouvais me faire un exemple qui marche je serais vraiment heureux paske ca me bouffe l'existence. j'ai pu voir que ca marchait que pour des entiers? mais alors avec un .equals ca marche mieux? paske moi ca va pas non plus.
Je sais je suis un boulet sur ce coup :( mais me tendre une perche serait vraiment sympa(pas le poisson(la perche :))
Pour faire de la comparaison sur des String, tu dois utiliser les méthodes equals ou equalsIgnoreCase.
Ca devrait marcher. :00000031:
simonh14
17/11/2005, 14h37
he oui j'ai tj des rpoblèmes...
tu sais mtn que ca marche j'ai un autre problème. je lance tomcat5 et j'entre l'url localhost:8080/fcd/mapage.
le truc c'et que tout ce qui est jsp ca passe comme du beurre
mais tout le sql ne passe pas. comment faire pour que je puisse enfin afficher mes résultats de base de données dans ma feuille jsp?
j'utilise le normal de driver
Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost/fcdmbre","++++++","+++++");
je travaille sous eclipse. je sais pas pourquoi je ne peux pas voir mes réponses a mes requetes...
(pour tester mes page je lance internet et tape l'url)
le plugin tomcat sous eclipse demarre eclipse mais ne lance pas mes jsp
alors c pour ca que j'urilise un simple browser pour tester
Le plugin Tomcat ne sert effectivement qu'à lancer Tomcat depuis Eclipse ainsi qu'à voir son log dans la console.
Pour tester tu dois utiliser un navigateur.
je te propose un truc : upload ton projet sur un FTP ou envoie moi le par mail (voir mon profil) et je te le teste. Si y'a des problemes j'essaierai de les corriger.
Sinon pour faire des applis comme tu essaye d'en faire il y a des trucs qui peuvent t'aider et qui s'appellement des frameworks. Le plus connu et surement le plus utilisé dans le monde pro est STRUTS. Ca se présente sous la forme de classes contenues dans des archives JAR ainsi que des fichiers de config en XML. Ca t'aide à architecturer ton appli selon le modèle MVC (la partie Controleur est gérée dans STRUTS), à gérer facilement des formulaires, des pools de connexions à la BDD...
Mais c'est à mettre en oeuvre uniquement dans la cas d'un projet de taille assez conséquente. Pour un petit projet ca vaut pas ler coup (tu t'encombres de plein de trucs dont tu n'a pas besoin, notament d'un modèle MVC). Toujours est-il qu'il faut savoir que ca existe. :00000031:
Upload ou envoie moi ton projet, je vais voir ce que je peux faire. A+
simonh14
19/11/2005, 20h51
je t'envoie le fichier, mais lundi, car la j'ai pas accès à mes fichiers(pc de bureau)
en effet je connais pas du tout les struts, mais je devrai développer une comptabilité assez conséquente avec des bases de données, lecteurs de cartes, compte et tout. donc il faut que je trouve un plugin pour eclipse pour faire des struts... faudrait que je trouves des tut sur google. je pense qu'il doit y en avoir pas mal...
merci pour ton aide
Oui si ton projet est assez consequent, tu peux regarder du coté de STRUTS.
Renseigne toi aussi sur le modèle MVC sur lequel STRUTS est basé, si tu ne connais pas.
Personnelement je n'utilise pas de plugin Eclipse pour STRUTS mais il doit en exister si tu veux (je ne sais pas ce qu'ils apportent). Il y a EasySTRUTS mais il doit marcher uniquement sur Eclipse 2 et pas 3 (à l'époque ou j'avais regardé).
Il y a une FAQ STRUTS ici : http://java.developpez.com/faq/struts/
Il te faudra trouver un tutorial/cours en plus.
J'attends ton mail lundi ;)
simonh14
21/11/2005, 09h08
<%@ page language="java" import="java.lang.String.*,java.lang.*, java.io.*, java.sql.*, java.awt.*, javax.swing.*, javax.servlet.*, javax.servlet.http.*;" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'entrainement.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel='stylesheet' href='styles.css' type='text/css'>
</head>
<body bgcolor='#cccccc' text='#000000'>
<table align='center' width='100%' cellspacing='0' cellpadding='0'>
<H4>Page principale. </h4><hr>
</table>
<%
String s;
s= request.getParameter("choix");
//boolean chaine = s.equals("a");
//if( chaine == true)
//{out.print("youhou");
// }
//out.print(chaine);
int varselection = Integer.parseInt(s);
if(varselection==1)
{
out.print("voici la partie entrainement");
//Nom de mon pilote
String pilote = "com.mysql.jdbc.Driver";
try{
//Chargement de mon pilote
%>bouh<%
Class.forName(pilote);
//Connexion à ma base mysql
Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost/fcdmbre","root","");
//Création de mon statement qui va me permettre d'executer mes requetes
Statement instruction = connexion.createStatement();
ResultSet resultat = instruction.executeQuery("SELECT * FROM joueur");
while(resultat.next()){
%>bouh<%
System.out.print("---------------------------");
out.print("Nom du joueur "+resultat.getString("NomJoueur"));
out.print("Prenom du joueur: "+resultat.getString("PrenomJoueur"));
}
}
catch (Exception e){
out.println("echec pilote : "+e);
}
}
if(varselection==2)
{
out.print("voici la partie match amical");
}
if(varselection==3)
{
out.print("voici la partie match de coupe");
}
if(varselection==4)
{
out.print("voici la partie match de championnat");
}
%>
</body>
</html>
explication:
ici on récupère les valeurs d'un formulaire.
en fonction de la valeur on va lancer telle ou telle instruction.
en l'occurence si ca vaut 1 on va faire le match amical.
donc accéder a la base de donnée pour afficher les valeurs en fonction de la requete(qui fonctionne mais qui est toute conne vu que c une requête test ;).
et si il y a une erreur alors on affiche le message de l'erreur.
les print sont des test pour voir depuis ou mon prog ne marche plus. c'est dès la déclaration du pilote.
le message suivant s'affiche:
echec pilote : java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
merci
(lundi 9h10:p)
Ah, donc apparement tu mets ton code Java dans tes JSP.
C'est une technique qui va vite montrer ses limites quand ton appli va grossir.
Tu devrais utiliser des JavaBeans qui feront tes traitements "métier".
Dans ta JSP, tu ne devrais avoir que des appels à des méthodes de la forme getXxxxx().
Ainsi tu sépareras la partie "présentation" de la partie "applicative". Tu auras alors un code beaucoup plus robuste et plus facilement évolutif et maintenable.
Si tu veux faire une appli de taille assez consequente, je te conseille de jeter un oeil au modele MVC et à STRUTS.
Faudrait que t'essaye de trouver des exemples d'architectures d'applis J2EE sur le web.
Revenons à ton erreur. Apparement il ne trouve pas ta classe com.mysql.jdbc.Driver . Je suppose qu'elle est dans un JAR qui est en fait ton driver de connexion à MySQL. Il faut que ton appli trouve ce JAR donc. Tu dois inclure son chemin dans ton classpath. Un autre solution est de donner ce JAR à manger à Tomcat, ainsi ton appli saura où trouver ce JAR. Tu dois le mettre dans [...]\Tomcat\common\lib\
Voilà j'espere avoir pu t'aider.
simonh14
21/11/2005, 14h57
att
je me suis pété le fion pendant environ 8h et j'ai même pas pensé à le mettre dans le répertoire common lib de tomcat... merci beaucoup mon ami tu m'as rendu un super service.
Merci pour tes conseils. si une fois t'as une question sur un autre sujet pas de prob fais moi signe (html, php, "asp",accèss, vba) et je ferai ce que je peux pour t'aider.
http://smileyonline.free.fr/images/gif/bravo/vignette/thumbnails/1036947074_gif.gif
ok je regarderai ces struts mais ca a l'air bien complexe comme histoire...
vBulletin® v.3.6.5, Copyright ©2000-2009, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org