Requete SQl et JAVA

Résolu/Fermé
xyeuh Messages postés 54 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 7 juillet 2013 - 4 nov. 2012 à 16:28
xyeuh Messages postés 54 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 7 juillet 2013 - 4 nov. 2012 à 19:44
Bonjour les amis.

voila ma question est simple:

Comment ecrire le resultat d'une requete sql dans un fichier html en java ?


Merci d'avance pour vos Réponses,
Cordialement Xyeuh.
A voir également:

3 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 nov. 2012 à 17:28
Avec une <table> par exemple. Je n'ai pas vérifié mais voici ce que ça pourrait donner :

public String toHtml(ResultSet result) throws SQLException
{
	StringBuilder sb = new StringBuilder("<table>");
	
	ResultSetMetaData data = result.getMetaData();
	int n = data.getColumnCount();
	
	sb.append("<tr>\n");
	for (int i=0; i<n; i++)
		sb.append("\t<th>").append(data.getColumnName(i)).append("</th>\n>");
	sb.append("</tr>\n");
	
	while (result.next())
	{
		sb.append("<tr>\n");
		for (int i=0; i<n; i++)
			sb.append("<td>").append(result.getObject(i)).append("</td>\n");
		sb.append("</tr>\n");
	}
	
	return sb.append("</table>\n").toString();	
}
0
xyeuh Messages postés 54 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 7 juillet 2013
4 nov. 2012 à 18:01
Merci pour votre réponse
cependant je ne comprend pas complétement votre code,
il faut savoir que je souhaite renvoyer le résultat d'une requete SQL faite en java dans la page HTML.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 nov. 2012 à 18:07
Le résultat d'une requête SQL c'est un ResultSet, c'est à dire un tableau avec des colonnes fixées et autant de lignes que de résultats. La méthode la plus simple d'afficher un tableau en HTML c'est les <table>. Ici mon code convertit un ResultSet en un String qui correspond au code HTML de présentation des résultats obtenus. Tu n'as plus qu'à mettre ce code généré dans ta page HTML à l'endroit où tu veux.
0
xyeuh Messages postés 54 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 7 juillet 2013
Modifié par xyeuh le 4/11/2012 à 18:47
Encore Merci pour votre réponse,
J'ai donc essayer ce que vous m'avait dit, mais j'obtiens toujours une erreur
que je ne comprend pas je vous poste donc mon code:

CODE Generation_Html.java



import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.File;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class Generation_Html
{
public static void run()
{
Connection con = null;
Statement st = null;
ResultSet rs = null;
//connexion à la base de donnée
String url = "jdbc:mysql://localhost:3306/METEO";
String user = "root";
String password = "pass";
//requete SQL
String sql = "SELECT * FROM TEMPERATURE ";

try {
con = DriverManager.getConnection(url, user, password);
st = con.createStatement();
rs = st.executeQuery(sql);



/***********************************/
/**************************************/

}

catch (SQLException ex) {
System.out.println("PB");
ex.printStackTrace();// traitement
} finally { // fermeture de la connexion
}

}

public String toHtml(ResultSet rs) throws SQLException
{
StringBuilder sb = new StringBuilder("<table>");

ResultSetMetaData data = rs.getMetaData();
int n = data.getColumnCount();

sb.append("<tr>\n");
for (int i=0; i<n; i++)
sb.append("\t<th>").append(data.getColumnName(i)).append("</th>\n>");
sb.append("</tr>\n");

while (rs.next())
{
sb.append("<tr>\n");
for (int i=0; i<n; i++)
sb.append("<td>").append(rs.getObject(i)).append("</td>\n");
sb.append("</tr>\n");
}

return sb.append("</table>\n").toString();


try
{
File monFichier = new File("/home/arnaud/workspace/blabla/bin/Meteo.html");

System.out.println("/home/arnaud/workspace/ProjetServeur/bin/Meteo.html existe ? "+(monFichier.exists()?"OUI":"NON"));
//ecriture dans un le fichier Meteo.html du résultat de la requete SQL.
BufferedWriter ecrivain = new BufferedWriter(new FileWriter(monFichier, false));
PrintWriter ecr = new PrintWriter(new BufferedWriter(new FileWriter(monFichier, false)));

/*ecrivain.write("<html><head><title>Web Server in JAVA</title></head><body><center><h1>Meteo</h1></center><a href=index.html>Home</a><br><br><?php while($donnees = mysql_fetch_array(rs)){?><table border='1'align='center'><tr><td id='case' size='500'>Ville</td><td><?php echo $donnees['Ville'];?></td></tr><tr><td id='case' size='100'>Temperature</td><td><?php echo $donnees['Temperature'];?></td></tr></table></body></html>");*/
/*int f = 2;*/
ecr.println(sb);
ecrivain.write(sb);
ecrivain.flush();

ecrivain.close();

BufferedReader lecteur=new BufferedReader(new FileReader(monFichier));

String content = lecteur.readLine();
while(content != null)
{
System.out.println(content);
content = lecteur.readLine();
}

lecteur.close();

}
catch(java.io.IOException ioe)
{
System.out.println(ioe);
}
}

}


CODE Run_Html.java

// Permet le lancement de la génération du fichier Meteo.html

public class Run_Html
{
public static void main(String[] args)
{
Generation_Html.run();

}
}

l'erreur étant que au niveau du ecrivain.write(sb); éclipse me dit qu'il attend un entier et non un String. (dans Generation_Html.java).
Cordialement Xyeuh
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 nov. 2012 à 19:15
C'est parce que tu utilises mon code n'importe comment !
Là il faudrait carrément revoir les bases de comment on utilise une méthode...

Je t'ai donné une méthode indépendante, son code ne doit pas être copier/coller en plein milieu du code d'une autre méthode ! Elle doit être appelée au moment opportun en lui passant des paramètres...

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.File;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

class Generation_Html
{
    public static String toHtml(ResultSet rs) throws SQLException
    {
        StringBuilder sb = new StringBuilder("<table>");
        
        ResultSetMetaData data = rs.getMetaData();
        int n = data.getColumnCount();
        
        sb.append("<tr>\n");
        for (int i=0; i<n; i++)
        sb.append("\t<th>").append(data.getColumnName(i)).append("</th>\n>");
        sb.append("</tr>\n");
        
        while (rs.next())
        {
            sb.append("<tr>\n");
            for (int i=0; i<n; i++)
                sb.append("<td>").append(rs.getObject(i)).append("</td>\n");
            sb.append("</tr>\n");
        }
        
        return sb.append("</table>\n").toString();
    }
    
    public static void run()
    {
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        
        //connexion à la base de donnée
        String url = "jdbc:mysql://localhost:3306/METEO";
        String user = "root";
        String password = "pass";
        
        //requete SQL
        String sql = "SELECT * FROM TEMPERATURE ";
        
        try
        {
            con = DriverManager.getConnection(url, user, password);
            st = con.createStatement();
            rs = st.executeQuery(sql);
        }
        catch (SQLException ex) 
        {
            System.out.println("PB");
            ex.printStackTrace();// traitement
        }
        
        try
        {
            File monFichier = new File("/home/arnaud/workspace/blabla/bin/Meteo.html");
        
            System.out.println("/home/arnaud/workspace/ProjetServeur/bin/Meteo.html existe ? "+(monFichier.exists()?"OUI":"NON"));
        
            //ecriture dans un le fichier Meteo.html du résultat de la requete SQL.
            BufferedWriter ecrivain = new BufferedWriter(new FileWriter(monFichier, false));
            PrintWriter ecr = new PrintWriter(new BufferedWriter(new FileWriter(monFichier, false)));
            
            /*ecrivain.write("<html><head><title>Web Server in JAVA</title></head><body><center><h1>Meteo</h1></center><a href=index.html>Home</a><br><br><?php while($donnees = mysql_fetch_array(rs)){?><table border='1'align='center'><tr><td id='case' size='500'>Ville</td><td><?php echo $donnees['Ville'];?></td></tr><tr><td id='case' size='100'>Temperature</td><td><?php echo $donnees['Temperature'];?></td></tr></table></body></html>");*/
            /*int f = 2;*/
            
            String str = toHtml(rs);
            
            ecr.println(str);
            ecrivain.write(str); 
            ecrivain.flush();
        
            ecrivain.close();
        
            BufferedReader lecteur=new BufferedReader(new FileReader(monFichier));
        
            String content = lecteur.readLine();
            
            while(content != null)
            {
                System.out.println(content);
                content = lecteur.readLine();
            }
        
            lecteur.close();
            ecr.close();
        }
        catch(java.io.IOException ioe)
        {
            System.out.println(ioe);
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }
}

// Permet le lancement de la génération du fichier Meteo.html

public class Run_Html
{
    public static void main(String[] args)
    {
        Generation_Html.run();
    }
}
0
xyeuh Messages postés 54 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 7 juillet 2013
4 nov. 2012 à 19:28
Encore merci pour votre réponse et temps consacré a mon problème.
Mais lorsque je compile votre code j'obtiens l'erreur suivante:

/home/arnaud/workspace/ProjetServeur/bin/Meteo.html existe ? OUI
java.sql.SQLException: Column index out of range.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
at com.mysql.jdbc.ResultSetMetaData.getField(ResultSetMetaData.java:405)
at com.mysql.jdbc.ResultSetMetaData.getColumnName(ResultSetMetaData.java:256)
at Generation_Html.toHtml(Generation_Html.java:25)
at Generation_Html.run(Generation_Html.java:78)
at Run_Html.main(Run_Html.java:7)

Cordialement Xyeuh.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 nov. 2012 à 19:36
Effectivement il y a une erreur, les colonnes sur les ResultSet et ResultSetMetaData sont numérotées à partir de 1, alors que dans mon code j'ai commencé les indices à 0, il faut donc tout décaler :

for (int i=1; i<=n; i++)
0
xyeuh Messages postés 54 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 7 juillet 2013
4 nov. 2012 à 19:44
Encore merci pour le temps que vous avez consacré sur mon problème.
Merci pour toutes vos réponses et votre aide qui ma était très précieuse, étant donnée que je débute dans le java.
Votre solution fonctionne parfaitement.
Cordialement xyeuh.
0