2011-03-26 4 views
1

je ce code:problème avec une déclaration préparée

Date start = new Date(Integer.parseInt(jTextField4.getText()), Integer.parseInt(jTextField16.getText()), Integer.parseInt(jTextField17.getText())); 
     Date end = new Date(Integer.parseInt(jTextField5.getText()), Integer.parseInt(jTextField18.getText()), Integer.parseInt(jTextField19.getText())); 
     statement = connection.createStatement(); 
     preparedStatement1 = connection.prepareStatement("insert into sportmangg(customer_code," 
      + "sportman_code, start, finish, salary,amount,box salary,private salary, food salary, " 
      + "other salary, bime salary, number) " 
      + "values (? ,?, ? , ?, ?, ?, ?, ?, ?, ?, ?, ?"); 
     preparedStatement1.setString(1,jTextField15.getText()); 
    preparedStatement1.setString(2, jTextField1.getText()); 
    preparedStatement1.setDate(3, start); 
    preparedStatement1.setDate(4, end); 
    preparedStatement1.setInt(5, Integer.parseInt(jTextField6.getText())); 
    preparedStatement1.setInt(6,Integer.parseInt(jTextField14.getText())); 
    preparedStatement1.setInt(7, Integer.parseInt(jTextField7.getText())); 
    preparedStatement1.setInt(8, Integer.parseInt(jTextField8.getText())); 
    preparedStatement1.setInt(9, Integer.parseInt(jTextField9.getText())); 
    preparedStatement1.setInt(10, Integer.parseInt(jTextField11.getText())); 
    preparedStatement1.setInt(11, Integer.parseInt(jTextField10.getText())); 
    preparedStatement1.setInt(12, Integer.parseInt(jTextField20.getText())); 
    preparedStatement1.executeUpdate(); 

mais il a cette erreur:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'salary,private salary, food salary, other salary, bime salary, number) values ('' at line 1 

Quel est le problème?

+0

@ diEcho, ceci est java pas javascript – krock

+0

vous avez ajouté une prime, mais pourriez-vous s'il vous plaît répondre pourquoi les deux réponses que vous avez ne s'appliquent pas? – jzd

+0

je l'appuie ** mauvais **. Que puis-je faire jusqu'à l'annuler? –

Répondre

11

Vous ne devriez pas avoir d'espaces dans le nom du champ. Essayez entourant avec ``

+2

ou simplement remplacer les espaces par _ et oublier –

3

Les noms des colonnes avec des espaces en eux sont un très mauvaise idée.

Si vous devez les avoir, les entourer de guillemets obliques:

`private salary` 
+1

Ce ne sont pas des guillemets. –

+0

Modifiez alors, s'il vous plaît. – duffymo

+0

D'accord, je l'ai édité. Je n'ai jamais trouvé un moyen dans la syntaxe markdown de StackOverflow de mettre des backticks littéraux à l'intérieur de la mise en forme de code en ligne, donc j'ai dû créer une nouvelle ligne en retrait comme pour le code de bloc. –

0

Vous devez remplacer le salaire privé avec private_salary et continuer à travailler avec les conventions de nom de colonne acceptables.

1

Vous avez manqué ) dans la dernière ligne de votre requête SQL il devrait donc être:

+ " values (? ,?, ? , ?, ?, ?, ?, ?, ?, ?, ?, ? )"; 
0

noms de colonnes ou de table ne doivent pas avoir des espaces. Rejoignez-les en soulignant. et faites-les en majuscules ... ce ne sont pas des règles mais des façons acceptées de travailler avec des objets DB. Si les noms ne peuvent pas être modifiés dans la base de données et que vous êtes coincé avec quelque chose comme un salaire, alors some salary devrait vous aider.

0

mehdi; Je pense que ce que vous avez à faire est tout cela:

  1. noms de changement de colonnes nommé espace (salaire privé, salaire alimentaire, les autres salaires, bime salaire) soit en remplaçant les espaces par des underscores (recommandé par les conventions de nommage) ou par noms environnants avec accent grave CHAR:

    `box salary`, `private salary`, `food salary`, `other salary`, `bime salary`

  2. Fix cette ligne ajouter entre parenthèses finales

    + "values (? ,?, ? , ?, ?, ?, ?, ?, ?, ?, ?, ?");

    il faut dire:

    + "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");

  3. Enfin, je vous recommande de prendre l'argument prepareStatement à une chaîne ou variable StringBuffer, dites « SqlString » ou quelque chose, vous pouvez le manipuler de manière plus transparente.Quelque chose comme ceci:

String sqlString = ""; 
sqlString += " insert into sportmangg"; 
sqlString += " (customer_code, sportman_code, start, finish,"; 
sqlString += " salary, amount, box_salary, private_salary,"; 
sqlString += " food_salary, other_salary, bime_salary, number)"; 
sqlString += " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"; 
preparedStatement1 = connection.prepareStatement(sqlString); 

(ou si vous utilisez StringBuffer utilisation méthode append)

1

Peut-être que vous pouvez essayer ceci:
https://github.com/stuparmihailo/util4j/releases/tag/v1.0
Il est un certain projet simple et a belle manière de créer des déclarations:
String query = "INSERT INTO table VALUES (?,?,?,?,?,?,?)"; PreparedStatement stmt = con.prepareStatement(query); StatementUtil.fill(stmt, 45, "text", 2, null, new Date(), false, 3.5);

Questions connexes