Probleme avec sql

Fermé
chahbane - 5 févr. 2013 à 22:53
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 - 7 févr. 2013 à 06:51
Bonjour,

Je viens de programmer une application pour creer une base de donnes sql, mais c'est toujours la meme erreur ".
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'etudiant' already exists"

voici mon code et merci pour votre temps :)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.ImageIcon;
import javax.swing.JOptionPane;


public class CreateBD {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/";

static final String USER = "root";
static final String PASS = "";

public CreateBD()
{
JOptionPane jop1, jop3;
ImageIcon img = new ImageIcon("D:\\programmes android\\calculMoeyenneIia\\src\\info.PNG");
ImageIcon img2 = new ImageIcon("D:\\programmes android\\calculMoeyenneIia\\src\\error.PNG");
jop1 = new JOptionPane();
jop3 = new JOptionPane();

Connection conn = null;
Statement stmt = null;
try{
//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//STEP 4: Execute a query
System.out.println("Creating database...");
stmt = conn.createStatement();
String sql = "CREATE DATABASE insat";
stmt.executeUpdate(sql);
System.out.println("Database created successfully...");
sql = "CREATE TABLE insat.etudiant (" +
"cin VARCHAR(8) PRIMARY KEY," +
"numIns VARCHAR(7)," +
"nom VARCHAR(20)," +
"prenom VARCHAR(20)) ";
stmt.executeUpdate(sql);
sql = "CREATE TABLE insat.matiere (" +
"nom_mat VARCHAR(20)," +
"cin VARCHAR(8) REFERENCES etu," +
"ds DECIMAL(5.2)," +
"tp DECIMAL(5.2)," +
"exam DECIMAL(5.2)," +
"CONSTRAINT pk PRIMARY KEY(nom_mat, cin));";
stmt.executeUpdate(sql);
jop1.showMessageDialog(null, "Base de Donnees cree avec succes!", "Information", JOptionPane.INFORMATION_MESSAGE, img);
}catch(SQLException se){
//Handle errors for JDBC
jop3.showMessageDialog(null, "Erreur lors de la creation de la base de donnees : "+se.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE, img2);
se.printStackTrace();
}catch(Exception e){
//Handle errors for Class.forName
jop3.showMessageDialog(null, "Erreur lors de la creation de la base de donnees : "+e.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE, img2);
e.printStackTrace();
}finally{
//finally block used to close resources
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){
}// nothing we can do
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}//end finally try
}//end try

System.out.println("Goodbye!");
}
}


A voir également:

2 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
5 févr. 2013 à 23:02
Ce n'est pas une erreur de Java, mais de SQL, ton programme te renvoie l'erreur mais ce n'est pas lui qui la provoque (pas directement).

J'imagine que l'erreur concerne cette partie là du code :

sql = "CREATE TABLE insat.etudiant (" + 
    "cin VARCHAR(8) PRIMARY KEY," + 
    "numIns VARCHAR(7)," + 
    "nom VARCHAR(20)," + 
    "prenom VARCHAR(20)) ";

stmt.executeUpdate(sql);

Si tu veux exécuter plusieurs fois ton programme pour faire des tests, il faudrait que tu nettoie ta base de données entre chaque exécution pour annuler les opérations effectuées par le programme. Par exemple, supprimer la table "etudiant" pour éviter qu'elle n'apparaisse comme déjà existante.

Idéalement, il faudrait en fait prendre en compte ce cas dans ton programme, et donc regarder si la table existe déjà, et la créer seulement si elle n'existe pas...
Éventuellement, si elle existe, tu peux supprimer son contenu, pour avoir le même comportement que si tu venais de la créer...
2
chahbane Messages postés 8 Date d'inscription dimanche 21 octobre 2012 Statut Membre Dernière intervention 6 février 2013
6 févr. 2013 à 14:54
A Chaque Test je supprime toute la base de donnee mais la meme erreur persiste!! C'est ca le probleme!
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
7 févr. 2013 à 06:51
Et pourtant il s'agit exactement de ça.

Si c'est le même message d'erreur , alors c'est que la base et la table existent toujours.

Le comportement n'est pas aléatoire dans ce cas.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
6 févr. 2013 à 15:22
Bonjour,

Tu es sûr de n'appeler ta fonction qu'une seule fois ?
Je te suggère de mettre un point d'arrêt sur
sql = "CREATE TABLE insat.etudiant (" + 
    "cin VARCHAR(8) PRIMARY KEY," + 
    "numIns VARCHAR(7)," + 
    "nom VARCHAR(20)," + 
    "prenom VARCHAR(20)) ";

stmt.executeUpdate(sql);

pour vérifier ça...

Xavier
0
chahbane Messages postés 8 Date d'inscription dimanche 21 octobre 2012 Statut Membre Dernière intervention 6 février 2013
6 févr. 2013 à 15:27
j'ai instancie la class une seule fois, c'est quoi un point d arret?
0