2014-06-24 7 views
14

Sto usando Java per connettermi a un database MySQL. Sto cercando di inserire o aggiornare i dati nel database.Come si determina se un inserimento o un aggiornamento ha avuto successo utilizzando Java e MySQL?

Anche se sono abbastanza sicuro che l'inserimento ha avuto esito positivo, restituisce false.

In base all'API "execute", il valore restituito è "true se il primo risultato è un oggetto ResultSet; false se è un conteggio di aggiornamento o non ci sono risultati".

Come è possibile determinare se il mio inserimento o aggiornamento è stato eseguito correttamente?

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; 
    } 
+1

Provare con 'stmt.executeUpdate();' per il tipo di 'Update op (INSERT, UPDATE, DELETE)'. –

risposta

19

Dal momento che si sta utilizzando PreparedStatement è possibile chiamare executeUpdate() -

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

Dal Javadoc (Returns) link qui sopra, corsivo,

o (1) il conteggio fila per istruzioni SQL Manipulation Language (DML) o (2) 0 per istruzioni SQL che non restituiscono nulla.

Se si desidera inserire un gran numero di voci, io preferirei addBatch() e executeBatch().

-1

Se non si ottiene un'eccezione, penso che la query sia andata bene. Oppure, si potrebbe essere in grado di utilizzare executeUpdate() (http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#executeUpdate())

Si può fare un conteggio select (*) non convalidare numero di record, se si desidera.

+0

Attualmente sto eseguendo una query di eliminazione che dovrebbe rimuovere 1 record nel mio test.La query passa, tuttavia restituisce 0 record modificati. Pertanto, ciò non è corretto. Il conteggio SELECT (*) funzionerebbe, ma non è obbligatorio. –

9

Prima di tutto questo si deve sapere:

booleana execute() esegue l'istruzione SQL in questo oggetto PreparedStatement, che può essere qualsiasi tipo di istruzione SQL.

ResultSet executeQuery() Esegue la query SQL in questo oggetto PreparedStatement e restituisce l'oggetto ResultSet generato dalla query.

int executeUpdate() Esegue SQL in questo oggetto PreparedStatement, che deve essere uno SQL INSERT, UPDATE o DELETE; o un'istruzione SQL che non restituisce nulla, come un'istruzione DDL.

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

     } 

Prova questo e check it out se inserto sta accadendo o no

0

Prova questa, se si desidera sapere se i dati è inserita o no, se il record viene inserito lo tornare vero oppure falso .

if(action > 0){ 
     return true; 
    }else{ 
     return false; 
     } 
Problemi correlati