In MySQL ho due tabelle tableAe tableB. Sto cercando di eseguire due query:
executeQuery(query1)
executeQuery(query2)
Ma ottengo il seguente errore:
can not issue data manipulation statements with executeQuery().
Cosa significa questo?
In MySQL ho due tabelle tableAe tableB. Sto cercando di eseguire due query:
executeQuery(query1)
executeQuery(query2)
Ma ottengo il seguente errore:
can not issue data manipulation statements with executeQuery().
Cosa significa questo?
Risposte:
Per manipolare i dati di cui hai effettivamente bisogno executeUpdate()anziché executeQuery().
Ecco un estratto dal executeUpdate()javadoc che è già una risposta a sé stante:
Esegue l'istruzione SQL specificata, che può essere un'istruzione INSERT, UPDATE o DELETE o un'istruzione SQL che non restituisce nulla, ad esempio un'istruzione DDL SQL.
Se stai usando lo spring boot, aggiungi semplicemente un'annotazione @Modifying.
@Modifying
@Query
(value = "UPDATE user SET middleName = 'Mudd' WHERE id = 1", nativeQuery = true)
void updateMiddleName();
@Modifying(clearAutomatically = true) @Transactionalappena sopra l'annotazione @Query che definisce la mia query di eliminazione
Per Elimina query: usa @Modifyinge @Transactionalprima di @Querysimili: -
@Repository
public interface CopyRepository extends JpaRepository<Copy, Integer> {
@Modifying
@Transactional
@Query(value = "DELETE FROM tbl_copy where trade_id = ?1 ; ", nativeQuery = true)
void deleteCopyByTradeId(Integer id);
}
Non darà l' java.sql.SQLException: Can not issue data manipulation statements with executeQuery()errore.
Ecco a cosa executeUpdateserve.
Ecco un breve riepilogo della differenza: http://www.coderanch.com/t/301594/JDBC/java/Difference-between-execute-executeQuery-executeUpdate
Questo codice funziona per me: imposto valori con un INSERT e ottengo il LAST_INSERT_ID () di questo valore con un SELECT; Uso java NetBeans 8.1, MySql e java.JDBC.driver
try {
String Query = "INSERT INTO `stock`(`stock`, `min_stock`,
`id_stock`) VALUES ("
+ "\"" + p.get_Stock().getStock() + "\", "
+ "\"" + p.get_Stock().getStockMinimo() + "\","
+ "" + "null" + ")";
Statement st = miConexion.createStatement();
st.executeUpdate(Query);
java.sql.ResultSet rs;
rs = st.executeQuery("Select LAST_INSERT_ID() from stock limit 1");
rs.next(); //para posicionar el puntero en la primer fila
ultimo_id = rs.getInt("LAST_INSERT_ID()");
} catch (SqlException ex) { ex.printTrace;}
@Modifying
@Transactional
@Query(value = "delete from cart_item where cart_cart_id=:cart", nativeQuery = true)
public void deleteByCart(@Param("cart") int cart);
Non dimenticare di aggiungere @Modifying e @Transnational prima di @query. per me funziona.
Per eliminare il record con una condizione utilizzando una query nativa con JPA, le annotazioni sopra menzionate sono importanti.
Oltre a executeUpdate () tra parentesi, è necessario aggiungere anche una variabile per utilizzare un'istruzione SQL.
Per esempio:
PreparedStatement pst = connection.prepareStatement(sql);
int numRowsChanged = pst.executeUpdate(sql);