Salut Vincent,
voici un exemple que je crois simple pour te donner un aperçu de jdbc (attention, je n'ai pas testé, et ce n'est pas nom plus parole d'évangile)
D'abord une classe générique pour se connecter :
import java.sql.*;
public class AccessToDB
{
Connection dbConnection;
PreparedStatement stmt;
static String dbDriver="org.mysql.Driver"; //le nom du driver jdbc, a verifier
static String dbURL="jdbc:mysql://localhost:3306/mabase";
static String userID="nomUser";
static String passwd="passUser";
//connection to db
public boolean connect()
{
try
{
Class.forName(dbDriver);
dbConnection = DriverManager.getConnection(dbURL,userID,passwd);
}
catch(Exception e)
{
log(e);
}
if (dbConnection==null) return false;
return true;
}
//pour un INSERT ou un UPDATE ou un DELETE
public synchronized boolean insertQuery (String dbQuery) throws SQLException
{
boolean status = false;
stmt = dbConnection.prepareStatement(query);
int nbInsert = stmt.executeUpdate(dbQuery);
if (nbInsert == 0)
{
log("Pb insertion");
status = false;
}
else
{
// all ok
status = true;
}
stmt.close();
return status;
}
//pour un SELECT
public synchronized ResultSet executeQuery(String query) throws SQLException
{
stmt = dbConnection.prepareStatement(query);
ResultSet rs=stmt.executeQuery();
return rs;
}
//deconnection
public static void cleanUp()
{
try
{
log("Closing database connection");
dbConnection.close();
}
catch (SQLException e)
{
log(e);
}
}
// Simple method for logging messages to console.
protected void log(Object msg) { System.out.println(msg); }
}
Une classe classe qui utilise la classe précédente :
/* un exemple simple d'utilisation de ta classe AccessDB */
import java.sql.ResultSet;
public class Utilisation
{
static String dbDriver="org.mysql.Driver"; //le nom du driver jdbc, à vérifier
static String dbURL="jdbc:mysql://localhost:3306/mabase";
static String userID="nomUser";
static String passwd="passUser";
public static void main (String [] args)
{
AccessBD access=new AccessBD();
String query="select nom, prenom, age, email from personne";
if (access.connect(dbDriver,dbURL,userID,passwd))
{
ResultSet rs=access.executeQuery(query);
while rs.next()
{
String nom=rs.getString("nom");//recupre la String contenue dans la colonne portant le nom "nom"
String prenom=rs.getString("prenom");
int age=rs.getInt("age");
String mel=rs.getString("email");
System.out.println(nom+"\t"+prenom+"\t"+age+"\t"+mel);
}
}
else System.out.println("pb de connection");
}
}
Ensuite, pour la doc java online (où il y a aussi les classes jdbc bien sure) :
http://java.sun.com/j2se/1.4.2/docs/api/
N'hesite pas à poser des questions quand tu aura fait quelques essais.
puce
>>l'accumulation de sauts de puce qui font les joies de l'informatique.
Les sauts de puce de certains on souvent l'air de pas de géant pour d'autres ;-)
Meilleurs voeux pour 2004. J'ai réglé mon problème en utilisant l'interface founie dans le package standard de JAVA, mais je me retrouve avec le même problème qu'avant, c'est à dire une erreur interne du servlet qui ne trouve pas la classe de mon package. Voici donc le message d'erreur complet et le code source :
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import dev.test.*; // Mon package que j'importe
// si je ne met pas abstract dans la declaration, il me fait une erreur à la compile
public abstract class emprunt extends test implements Servlet {
public void handleError(Exception e, HttpServletResponse res) throws ServletException, IOException
{
res.setContentType("text/html");
PrintWriter out=res.getWriter();
// HTML est une classe créé séparément, elle fonctionne normalement
HTML h=new HTML("Calcul de l'emprunt : erreur");
h.add(HTML.HEADING, "Une erreur est survenue...", false);
h.add(HTML.LINE, "", false);
h.add(HTML.NORMAL, e.getMessage(), false);
out.println(h.getPage());
out.close();
}
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
// Extrait les valeurs des paramètres sous forme de chaînes.
String principalAsString=req.getParameter("capital");
String interestAsString=req.getParameter("interet");
String paymentAsString=req.getParameter("mensualite");
float principal, interest, payment;
// Initialise contenant la durée de remboursement
int months;
try
{
// Les fonctions qui provoquent l'erreur ne trouvant pas leur classe d'origine
principal=stringToFloat(principalAsString);
interest=stringToFloat(interestAsString);
payment=stringToFloat(paymentAsString);
// Utilise la classe emprunt pour obtenir sa durée
months=calculateLoanPeriod(principal, interest, payment);
}
catch (NumberFormatException e)
{
handleError(new NumberFormatException("Vérifier que vous avez rentré des valeurs numériques."), res);
return;
}
catch (Exception e)
{
handleError(e, res);
return;
}
res.setContentType("text/html");
PrintWriter out=res.getWriter();
HTML h=new HTML("Calcul de l'emprunt : résultats");
h.add(HTML.HEADING, "Résultats du calcul de l'emprunt", false);
h.add(HTML.LINE, "", false);
h.add(HTML.NORMAL, "Capital en € : ", false);
h.add(HTML.NORMAL, Float.toString(principal), true);
h.add(HTML.NORMAL, "Intérêt : ", false);
h.add(HTML.NORMAL, Float.toString(interest), true);
h.add(HTML.NORMAL, "Mensualité : ", false);
h.add(HTML.NORMAL, Float.toString(payment), true);
h.add(HTML.NORMAL, "Nombre de mensualités : ", false);
h.add(HTML.NORMAL, Integer.toString(months), true);
out.println(h.getPage());
out.close();
}
}
Error: 500
Internal Servlet Error:
// L'ordinateur cherche dans dev/test/test alors qu'il devrait chercher dans dev/test, j'ai cherché partout ou j'aurais pu faire cette erreur. le fichier JAR représentant le package a bien dev/test
java.lang.NoClassDefFoundError: dev/test/test
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at java.lang.ClassLoader.findSystemClass(ClassLoader.java:666)
at com.sun.web.core.ServletLoader.loadClass(ServletLoader.java:73)
at com.sun.web.core.ServletLoader.loadServlet(ServletLoader.java:31)
at com.sun.web.core.ServletWrapper.loadServlet(ServletWrapper.java:91)
at com.sun.web.core.ServletWrapper.handleRequest(ServletWrapper.java:119)
at com.sun.web.core.InvokerServlet.service(InvokerServlet.java:168)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:840)
at com.sun.web.core.ServletWrapper.handleRequest(ServletWrapper.java:155)
at com.sun.web.core.Context.handleRequest(Context.java:414)
at com.sun.web.server.ConnectionHandler.run(ConnectionHandler.java:139)
le pb dans tes import :
import dev.test;
et non pas dev.test.*;
by