voila mon code:
JBUTTON à une erreur cannot find symbol, j'hésite mettre unCode:
1
2
3 private final JButton toEnable; public DeleteOutil(String outil, JButton toEnable) {
Code:string JButton to Enable
Version imprimable
voila mon code:
JBUTTON à une erreur cannot find symbol, j'hésite mettre unCode:
1
2
3 private final JButton toEnable; public DeleteOutil(String outil, JButton toEnable) {
Code:string JButton to Enable
Salut,
Tu pourrais être plus clair dans tes explications !
Si tu obtiens le message d'erreur : "cannot find symbol" pour le mot JBUTTON dans ton code, c'est que ce mot n'est ni reconnu comme une variable, ni comme un classe visible (sous-entendu importée, ou du package courant, ou du package java.lang), ou un mot clef Java. En clair, Java te dit qu'il ne connait pas ce mot.
Le problème est que dans le code que tu nous expose, on ne voit pas JBUTTON, mais JButton. Est-ce à dire que tu as ailleurs le mot JBUTTON, ou que cette erreur dont tu nous parles se trouve bien à propose de ce JButton qu'on voit là. Dans le premier cas, c'est parce que le nom de la classe c'est JButton et que la casse est primordiale en Java : A est différent de a. Si c'est le second cas, c'est parce que tu as oublié l'import de la classe javax.swing.JButton.
Par ailleurs,
n'a aucun sens en Java...Code:string JButton to Enable
Oui c'etait cele il fallait que je mets import.javax.swing.JButton.
J'ai un probleme avec mon try il me marque try with ressource is not supported in source 1.5, et avec conn il a aussi cannot find.Code:
1
2
3
4
5
6
7
8 smt = maconnexion.ObtenirConnexion().createStatement(); try ( Connection con = Connection.getConnection(url,user,pwd); Statement stmt = conn.prepareStatement(wql); ) { stmt.setString(1, note); stmt.executeUpdate(wql); }
setstring egalement il a cannot find symbol.
Oui, le try-with-resource n'existe que depuis Java 7. Là, tu as paramétré ton projet pour qu'il compile en 1.5, tu ne peux donc pas utiliser le try-with-resource, ce qui signifie que tu dois fermer toi même toutes les ressources que tu ouvres.
La différence de syntaxe :
syntaxe try-with-resource
Code:
1
2
3
4
5 try( Type nomRessource = creer ressource ) { utilisation nomRessource }
syntaxe sans try-with-resource :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Type nomRessource = null; try { nomResource = creer ressource; utilisation nomRessource } finally { if ( nomRessource!=null ) { // fermer/libérer la ressource nomRessource.close() } }
Et pour
la variable s'appelle con, pas conn...Citation:
et avec conn il a aussi cannot find.
setstring egalement il a cannot find symbol.
Quant à setString() c'est une méthode de PreparedStatement, pas de Statement, le type que tu as donné à stmt. Ecris : PreparedStatement stmt = conn.prepareStatement(wql); et tu pourras appeler les méthode du type PreparedStatement sur la variable stmt, ce qui te permettra d'appeler sur cette variable les méthodes de la classe PreparedStatement.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 String wql = "DELETE FROM carnet WHERE id_note=?"; try { Connection con = Connection.getConnection(url,user,pwd); PreparedStatement stmt = con.prepareStatement(wql); } finally { if ( stmt!=null ) { // fermer/libérer la ressource stmt.close(); } }
comme cela mais ça ne marche pas et url, user, pwd me sont il utile encore car je n'utilise pas de mot de passe dans mon application. usr,pwd, user me viennent d'un tutorial.
Si tu références des variables, il faut qu'elles existent, et qu'elles aient des valeurs. Elles sont déclarées où ces variables url, user et pwd ?
je ne vais finalement pas utiliser ces paramètres.
Est ce que je peux retirer ce code?
Code:Connection con = Connection.getConnection(url,user,pwd);
Je ne sais pas comment adapter cette méthode à mon code remplace nomressource par quoi. ainsi que créer ressource.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Type nomRessource = null; try { nomResource = creer ressource; utilisation nomRessource } finally { if ( nomRessource!=null ) { // fermer/libérer la ressource nomRessource.close() } }
Cette ligne te permet de te connecter à priori à une base de données. Si tu as besoin pour ton programme de te connecter à une base de données, il va bien falloir le faire. Si tu n'en as pas besoin, tu peux supprimer cette ligne, mais tu devras aussi supprimer la création du PreparedStatement est son exécution, forcément...
C'est une forme générale, mais il suffit que tu compares l'autre forme (try-with-resource) avec le try-with-resource que tu as fait pour voir ce qui va à la place de quoi :
- "Type" réprésente le type de la ressource (ça peut être n'importe quoi qui soit Closeable) : dans ton cas, c'est PreparedStatement
- "nomRessource" c'est la variable de ce type, donc dans ton cas stmt
- "creer ressource", c'est l'expression pour instancier l'objet référencé par cette variable, donc c'est con.prepareStatement(wql);
- "utilisation nomResource", c'est le travail que tu veux/dois faire, donc l'executeUpdate()...
Voir tutoriel JDBC...
voila le resultat:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 public Void doInBackground() { PreparedStatement stmt=null; String wql = "DELETE FROM carnet WHERE id_note=?"; try { Connection con = Connection.getConnection(url,user,pwd); stmt = con.prepareStatement(wql); stmt.setString(1, note); stmt.executeUpdate(wql); } catch (Exception e) { } finally { if ( stmt!=null ) { // fermer/libérer la ressource stmt.close(); } } return null; }
unreported exeption java.sql exeption must be caught or declared thrownCode:stmt.close();
Bah, que te dit ce message d'erreur de compilation ? Que close() soulève une SQLException, que tu dois attraper (must be caught)ou relancer à l'appelant (or declared thrown).
Tu as bien mis un catch pour celle que executeUpdate() lance ? Là, pour close(), c'est pareil !
En revanche, on ne fait jamais de bloc de catch vide : s'il y a exception, tu ne le sauras pas et tu ne pouras pas comprendre pourquoi ton delete ne fonctionne pas. Au minimum, on affiche l'erreur dans la console. Ensuite, on peut faire différente chose, comme afficher à l'utilisateur qu'il y a eu un problème, ou faire un code qui essaye de rattraper l'erreur, ou tout ce que tu veux.
Autre chose : si une méthode lance une SQLException, attrape une SQLException, pas une Exception.
Dernière chose : lorsqu'on utilise un PreparedStatement, on le construit en passant en paramètre une expression SQL contenant des ? là où doivent venir les valeurs des paramètres, qui sont affectés par des méthode comme setString(). Ensuite, on exécute le PreparedStatement, avec une méthode sans paramètre (soit executeUpdate() pour un UPDATE ou un DELETE, soit executeQuery() pour un SELECT) : les méthodes avec paramètres sont pour executer des Statement simple, le paramètre étant une requête sans ?, non paramétrable donc. Donc, attention, dans ton code tu ne dois pas repasser l'expression SQL en paramètre de executeUpdate().
Merci ça marche