Ajout dans la base de donnée en java

Fermé
Aprexia Messages postés 82 Date d'inscription vendredi 17 décembre 2010 Statut Membre Dernière intervention 14 mai 2013 - 5 janv. 2011 à 11:20
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 - 5 janv. 2011 à 14:19
Bonjour,

Je souhaite depuis mon application java, ajouter un enregistrement dans ma base de donnée.
J'utilise donc le code suivant :

/**
* Execute la requête d'ajout d'une adresse dans la base de donnée
* @param rue
* @param cp
* @param ville
* @return
*/
public ResultSet PreparedAjoutAdresse(String rue, String cp, String ville){

String sql="";

String sqlSelectAdresse="";

Statement state = null;

sql="INSERT INTO adresse(rue,codePostal,ville) VALUES('"+rue+"', '"+cp+"', '"+ville+"');";

try{
state = connection.createStatement();
state.executeUpdate(sql);
}
catch(SQLException sqleAdresse){}

sqlSelectAdresse="SELECT idAdresse FROM adresse WHERE rue='"+rue+"' AND codePostal='"+cp+"' AND ville='"+ville+"'";
try{
state = connection.createStatement();
idAdresse = state.executeQuery(sqlSelectAdresse).getInt("idAdresse");
System.out.println("id adresse récupéré" + idAdresse);
}
catch(SQLException sqle){
JOptionPane.showMessageDialog(null, "Erreur : "+ sqle, "Erreur", JOptionPane.ERROR_MESSAGE);
}
return null;
}

/**
* Execute la requête d'ajout d'un client dans la base de données
* @param clientFournisseur prend la velur TRUE si on ajoute un client, FALSE si on ajoute un fournisseur
* @param nom nom de la personne à ajouter
* @param prenomClient prenom du client à ajouter. prend la valeure NULL si on ajoute un fournisseur
* @param telFixe telephone fixe de la personne à ajouter
* @param telMobile telephone mobile de la personne à ajouter
* @param mail adresse E-mail de la personne à ajouter
* @param rue Rue de résidence de la personne à ajouter
* @param cp Code postale du lieu de résidence de la personne à ajouter
* @param ville Ville de résidence de la personne à ajouter
* @return le resultat de la requête
*/
public ResultSet PreparedAjoutPersonne(String nom, String telFixe, String telMobile, String mail, String rue, String cp, String ville){
PreparedAjoutAdresse(rue, cp, ville);
System.out.println("adresse ajoutée");

nom = nom.toLowerCase();


String sqlPersonne= "";
String sql="";

String sqlSelectPersonne="";

Statement state = null;

sqlPersonne="INSERT INTO personne(nomPersonne,telFixe,telMobile,idAdresse,mail) VALUES('"+nom+"','"+telFixe+"','"+telMobile+"','"+idAdresse+"','"+mail+"');";
try{
state = connection.createStatement();
state.executeUpdate(sqlPersonne);
}
catch(SQLException sqlePersonne){}
return null;
}

/**
* Execute la requête d'ajout d'un client dans la base de donnée
* @param idPersonne
* @param prenomClient
* @return
*/

public ResultSet PreparedAjoutClient (String prenomClient, String nom, String telFixe, String telMobile, String mail, String rue, String cp, String ville){
JOptionPane jMessageErreur = new JOptionPane();
PreparedAjoutPersonne(nom, telFixe, telMobile, mail, rue, cp, ville);

prenomClient = prenomClient.toLowerCase();

String sql = "INSERT INTO client(idPersonne, prenomClient) VALUES('"+idPersonne+"','"+prenomClient+"');";
Statement state = null;

try{
state = connection.createStatement();
state.executeUpdate(sql);
System.out.println("client ajoutée");
}
catch(SQLException sqle){
if(sqle.getSQLState().equals("23505"))
JOptionPane.showMessageDialog(null, "Le client existe déjà", "Erreur", JOptionPane.INFORMATION_MESSAGE);
else
JOptionPane.showMessageDialog(null, messageErreur+"\n"+sqle, "Erreur", JOptionPane.ERROR_MESSAGE);
}
return null;
}

Et quand je l'utilise avec :

resultat= connection.PreparedAjoutClient(prenomClient, nom, telFixe, telMobile, mail, rue, cp, ville);

une exception est levée et me dit :

org.postgresql.util.PSQLException: Le ResultSet n'est pas positionné correctement, vous devez peut-être appeler next().

Seulement, lorsque j'utilise next(), une autre exception est lévée.

quelqu'un à t-il une solution svp?

A voir également:

1 réponse

scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
5 janv. 2011 à 14:19
Je n'ai pas trop le temps de tout lire, cependant moi j'utilise plutôt des PreparedStatement qui sont plus sécurisés, et générallement des fonctions PLPGSQL pour les insertions.

Je te met une partie de mon code en espérant que cela puisse t'aider, si tu veux faire un INSERT il te suffit de remplacer le code de la requête SQL par ton INSERT, et de faire un ExecuteUpdate au lieu du ExecuteQuery si je me souviens bien.

Bonne chance.

import java.sql.*;
import java.util.*;

public class Sample
{
	static Scanner scanner = new Scanner(System.in);
	static Connection conn = null;

	// Informations de connexion à la base de données (administrateur)
	static final String dbServer = "localhost:5432";
	static final String dbName = "u2bin002";
	static final String dbUserName = "u2bin011";
	static final String dbUserPass = "client";

	// Déclaraction des PreparedStatement's
	static PreparedStatement rechercheMedia = null;

	public static void main(String[] args)
	{
		conn = initDB(dbServer, dbName, dbUserName, dbUserPass);	// initialisation de la connexion à la base de données

		// Menu principal
		char continuer;
		do
		{
			continuer = 'n';
			System.out.println("=== Espace Video 2010 ===");
			rechercherMedia();
			System.out.println("Continuer O/N");
			continuer = scanner.nextLine().charAt(0);

			System.out.println("");
		} while (continuer == 'O' || continuer == 'o');

		closeDB(conn);
	}

	/**
	 * Fonction de recherche d'un média
	 */
	public static void rechercherMedia()
	{
		if (rechercheMedia == null)
			rechercheMedia = initPreparedStatement("SELECT * FROM video.medias_recherche_media(?);");

		System.out.println("Entrez le média à rechercher :");
		String titreFilm = scanner.nextLine();
		try
		{
			rechercheMedia.setString(1, titreFilm);
			rechercheMedia.executeQuery();

			ResultSet result = rechercheMedia.getResultSet();
			if(!result.next())
			{
				System.out.println("Aucun media trouvé");
				return;
			}
			
			do
			{
				System.out.print(result.getString(2));
				String estRendu = result.getString(3);
				
				if(estRendu != null && !estRendu.equals('t'))
					System.out.println("\tFilm loué jusqu'au " + result.getString(4));
				else
					System.out.println("\tDisponible");
				
			}while (result.next());
		} catch (SQLException se)
		{
			se.printStackTrace();
		}
	}
	
	/**
	 * Fonction permettant d'initialisé un PreparedStatement
	 * @param statement La requêtes SQL du statement à initialisé
	 * @return PreparedStatement initialisé au statement donné
	 */
	public static PreparedStatement initPreparedStatement(String statement)
	{
		try
		{
			return conn.prepareStatement(statement);
		} catch (SQLException se)
		{
			se.printStackTrace();
			System.exit(1);
		}
		return null;
	}
	
	/**
	 * Fonction d'initialisation de la base de données
	 */
	public static Connection initDB(String dbServer, String dbName, String dbUserName, String dbUserPass)
	{
		Connection conn = null;
		try
		{
			Class.forName("org.postgresql.Driver");
		} catch (ClassNotFoundException e)
		{
			System.out.println("Driver PostgreSQL manquant !");
			System.exit(1);
		}

		String url = "jdbc:postgresql://" + dbServer + "/" + dbName + "?user=" + dbUserName + "&password=" + dbUserPass;

		try
		{
			conn = DriverManager.getConnection(url);
		} catch (SQLException e)
		{
			System.out.println("Impossible de joindre le serveur !");
			System.exit(1);
		}
		return conn;
	}

	/**
	 * Fonction de fermeture de la connexion à la base de données
	 */
	public static void closeDB(Connection conn)
	{
		try
		{
			conn.close();
		} catch (SQLException e)
		{
			System.out.println("Impossible de fermer le serveur !");
			System.exit(1);
		}
	}
}



2