J'ai le message : Erreur de syntaxe dans l'instruction ALTER TABLE.
J'ai également essayé avec les syntaxes :
String requete = "ALTER TABLE " + ancienNom + " RENAME AS " + nouveauNom;
et String requete = "RENAME TABLE " + ancienNom + " TO " + nouveauNom;
La base de mon programme doit etre bonne car j'ai également une requete
req.executeUpdate("DROP TABLE " + Principale.monChoixIndex);
qui , elle, fonctionne très bien.
Merci d'avance car je pensais passer 2 secondes sur cette requête , et cela fait déjà plusieurs heures que je cherche en vain !
KX
Messages postés16701Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention26 mai 2023126 4 juil. 2018 à 18:35
Bonjour,
En SQL il y a plusieurs types de commandes SQL :
DML (Data Manipulation Language) comme SELECT, INSERT, UPDATE ou DELETE
DDL (Data Definition Language) comme CREATE, ALTER, DROP ou RENAME
En Java on retrouve donc des méthodes différentes dans la classe Statement, chacune s'utilisant dans un cas ou dans l'autre et il faut bien regarder la documentation pour savoir ce que l'on fait :
Parameters:
sql - an SQL statement to be sent to the database, typically a static SQL SELECT statement
Returns:
a ResultSet object that contains the data produced by the given query; never null
Parameters:
sql - an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or DELETE; or an SQL statement that returns nothing, such as a DDL statement.
Returns:
either (1) the row count for SQL Data Manipulation Language (DML) statements or (2) 0 for SQL statements that return nothing
Parameters:
sql - any SQL statement
Returns:
true if the first result is a ResultSet object; false if it is an update count or there are no results
Dans ton code, tu as utilisé
executeUpdate
, qui est spécifiquement indiqué comme étant une méthode pour faire des commandes DML. Or toi tu veux faire des commandes DDL. Il faut donc utiliser la méthode
Réponse pour KX,
D'abord merci, étant débutant en java , j'ai appris des choses ...... cependant j'ai modifié le code en changeant executeUpdate en execute
... et j'ai toujours le message d'erreur : Erreur de syntaxe dans l'instruction ALTER TABLE.
remarque dans mon programme req est du type "Statement" mais je ne pense pas que l'erreur puisse venir de là.
KX
Messages postés16701Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention26 mai 2023126
>
papaChimique
4 juil. 2018 à 19:01
Quelle base de données utilises tu ? Car les commandes peuvent changer d'un éditeur à l'autre.
En général ce devrait être
ALTER TABLE table_name RENAME TO new_table_name;
Mais en SQL Server par exemple ce sera
sp_rename 'table_name', 'new_table_name';
Remarque : 05010102 c'est bizarre de commencer le nom d'une table par un chiffre.
Dans tous les cas, il faut que tu testes ta commande SQL directement dans ta base de données et ne la programmer en Java qu'une fois qu'elle fonctionne.
Une question bonus (spécial KX): pourquoi avoir écrit "C'est bizarre d'avoir choisi une base de données Microsoft pour faire un programme Java" , y-a-t-il une autre solution plus "naturelle" pour programmer en java. Moi j'avais pris ACCES parce que c'est la seule que je connaissais (j'avais dit que j'étais débutant et donc je confirme)
KX
Messages postés16701Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention26 mai 2023126 13 juil. 2018 à 20:07
MS Access est une base de données propriétaire qui ne fonctionne que sous Windows avec un certain nombre de limites (pas d'index, pas de tables temporaires, 2Go max...) et que l'on retrouvera plutôt en collaboration avec d'autres technologies Microsoft (VBA par exemple).
Les programmes Java travailleront soit avec des bases de données ultra légères embarquées dans le programme (H2, Derby...) et donc multiplate-forme pour s'adapter au plus grand nombre d'utilisateurs (pas que Windows donc), soit à l'opposé - et notamment en Java EE - avec des bases de données extrêmement performantes (Oracle, PostgreSQL...) pour manipuler des données beaucoup plus volumineuses que ne peut faire Access.
Remarque 1 : par rapport à ton code, il faut penser à fermer tes Statement parce que Java ne le fera pas tout seul, il pensera que tu vas t'en resservir alors ce n'est pas le cas, donc à chaque appel tu vas en ouvrir un nouveau qui ne sera jamais fermé jusqu'au moment où il en aura tellement d'ouverts qu'il refusera d'en ouvrir un nouveau...
Remarque 2 : si ton SELECT INTO échoue tu affiches une erreur mais tu continues, c'est à dire que tu vas quand même faire le DROP TABLE alors que tu n'as pas créé la nouvelle table, donc tu vas perdre toutes tes données !
C'est pour ça que je conseillais de faire une seule requête, si la première partie plante, la suite ne sera jamais appelé.