web-dev-qa-db-fra.com

Comment déterminez-vous si une insertion ou une mise à jour a réussi avec l'aide de Java et MySQL?

J'utilise Java pour me connecter à une base de données MySQL. J'essaie d'insérer ou de mettre à jour des données dans la base de données.

Même si je suis sûr que l'insertion a réussi, elle renvoie faux.

Selon l'API "execute", la valeur de retour est "true si le premier résultat est un objet ResultSet; false s'il s'agit d'un compte de mise à jour ou s'il n'y a pas de résultats".

Comment puis-je déterminer si mon insertion ou mise à jour a réussi?

    public boolean insertSelections(String selection, String name){
        String sql ="INSERT INTO WORKREPORT VALUES (?,?,?,?,?)";
        boolean action = false;
        try {
            PreparedStatement stmt = conn.prepareStatement(sql);
            SimpleDateFormat dateFormat =  new Java.text.SimpleDateFormat("yyyy:MM:dd hh:mm:ss");
            String formatDate = dateFormat.format(new Java.util.Date(System.currentTimeMillis())); 
            Java.util.Date mDate = dateFormat.parse(formatDate);
            Java.sql.Timestamp timeStamp = new Java.sql.Timestamp(System.currentTimeMillis());
//          Date time= new Date(mDate.getTime());

            stmt.setInt(1, Integer.parseInt(getNumberByName(name).trim()));
            stmt.setString(2, name);
//          stmt.setDate(3, time);
            stmt.setTimestamp(3, timeStamp);
            stmt.setString(4, selection);
            stmt.setString(5, "N/A");
            action = stmt.execute();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
        return action;
    }
20
user3239558

Puisque vous utilisez PreparedStatement vous pouvez appeler executeUpdate() -

 int count = stmt.executeUpdate();
 action = (count > 0); // <-- something like this.

À partir du lien Javadoc ( Returns) ci-dessus, emphase ajoutée,

soit (1) le nombre de lignes pour SQL Data Manipulation Language (DML) instructions ou (2) 0 pour SQL des déclarations qui ne renvoient rien.

Si vous souhaitez insérer un grand nombre d'entrées, je préférerais addBatch() et executeBatch() .

26
Elliott Frisch

Tout d'abord, vous devez savoir:

boolean execute () Exécute l'instruction SQL dans cet objet PreparedStatement, qui peut être n'importe quel type d'instruction SQL.

ResultSet executeQuery () Exécute la requête SQL dans cet objet PreparedStatement et renvoie l'objet ResultSet généré par la requête.

int executeUpdate () Exécute l'instruction SQL dans cet objet PreparedStatement, qui doit être une instruction SQL INSERT, UPDATE ou DELETE; ou une instruction SQL qui ne renvoie rien, telle qu'une instruction DDL.

        int i = stmt.executeUpdate();
        if (i > 0) {
            System.out.println("success");
        } else {
            System.out.println("stuck somewhere");
        }

Essayez ceci et vérifiez si l'insertion se produit ou non

14
SparkOn

Essayez ceci, si vous voulez savoir si les données sont insérées ou non, si l'enregistrement est inséré, il renvoie vrai ou faux.

  if(action > 0){
      return true;
    }else{
      return false;
      }
0
Pradeep Ramisetti

Si vous n'obtenez pas d'exception, je pense que la requête s'est bien passée. Vous pouvez également utiliser executeUpdate () ( http://docs.Oracle.com/javase/7/docs/api/Java/sql/PreparedStatement.html#executeUpdate () )

Vous pouvez faire un nombre sélectionné (*) valider le nombre d'enregistrements si vous le souhaitez.

0
Viraj