Probleme avec sql

chahbane -  
arth Messages postés 10414 Statut Contributeur -
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 19031 Statut Modérateur 3 020
 
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 Statut Membre
 
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 10414 Statut Contributeur 1 293
 
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 3742 Statut Membre 1 011
 
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 Statut Membre
 
j'ai instancie la class une seule fois, c'est quoi un point d arret?
0