Kan geen instructies voor gegevensmanipulatie uitgeven met executeQuery()

In MySQL heb ik twee tabellen, tableAen tableB. Ik probeer twee queries uit te voeren:

executeQuery(query1) 
executeQuery(query2)

Maar ik krijg de volgende foutmelding:

can not issue data manipulation statements with executeQuery().

Wat betekent dit?


Antwoord 1, autoriteit 100%

Om gegevens te manipuleren heb je eigenlijk executeUpdate()in plaats van executeQuery().

Hier is een uittreksel uit de javadoc executeUpdate()die al een antwoord op zich is:

Voert de gegeven SQL-instructie uit, die een INSERT-, UPDATE- of DELETE-instructie kan zijn of een SQL-instructie die niets teruggeeft, zoals een SQL DDL-instructie.


Antwoord 2, autoriteit 20%

Bij het uitvoeren van de DML-instructie moet u executeUpdate/executegebruiken in plaats van executeQuery.

Hier is een korte vergelijking:


Antwoord 3, autoriteit 17%

Als je spring boot gebruikt, voeg dan gewoon een @Modifying-annotatie toe.

@Modifying
@Query
(value = "UPDATE user SET middleName = 'Mudd' WHERE id = 1", nativeQuery = true)
void updateMiddleName();

Antwoord 4, Autoriteit 13%

Voor het verwijderen van query – gebruik @Modifyingen @Transactionalvóór de @Queryzoals: –

@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);
}

Het geeft niet de java.sql.SQLException: Can not issue data manipulation statements with executeQuery()fout.

bewerken:

Aangezien dit antwoord veel upvotes krijgt, raadpleeg ik u ook naar de documentatie voor meer begrip.

@transactional

By default, CRUD methods on repository instances are transactional. For read operations, 
the transaction configuration readOnly flag is set to true. 
All others are configured with a plain @Transactional so that default transaction 
configuration applies.

@modificeren

Indicates a query method should be considered as modifying query as that changes the way 
it needs to be executed. This annotation is only considered if used on query methods defined 
through a Query annotation). It's not applied on custom implementation methods or queries 
derived from the method name as they already have control over the underlying data access 
APIs or specify if they are modifying by their name.
Queries that require a @Modifying annotation include INSERT, UPDATE, DELETE, and DDL 
statements.

Antwoord 5, Autoriteit 8%

Gebruik executeUpdate()om gegevensmanipulatie-verklaringen uit te geven. executeQuery()is alleen bedoeld voor Select-query’s (d.w.z. query’s die een resultaat instellen) retourneren).


Antwoord 6, Autoriteit 2%

Dat is wat executeUpdateis voor.

Hier is een zeer korte samenvatting van het verschil: http://www.coderanch.com/t/301594/jdbc/java/difference-between-execute-executequery-executeUpdate


Antwoord 7, Autoriteit 2%

Deze code werkt voor mij: ik heb waarden ingesteld met een insert en ontvang de last_inert_id () van deze waarde Whit A Select; Ik gebruik Java Netbeans 8.1, MySQL en 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;}

Antwoord 8, Autoriteit 2%

@Modifying
@Transactional
@Query(value = "delete from cart_item where cart_cart_id=:cart", nativeQuery = true)
public void deleteByCart(@Param("cart") int cart); 

Vergeet niet @Modifying en @Transnational toe te voegen vóór @query. het werkt voor mij.

Om het record met een bepaalde voorwaarde te verwijderen met behulp van native query met JPA, zijn de bovengenoemde annotaties belangrijk.


Antwoord 9

executeQuery()retourneert een ResultSet. Ik ben niet zo bekend met Java/MySQL, maar om indexen te maken heb je waarschijnlijk een executeUpdate()nodig.


Antwoord 10

Behalve executeUpdate() tussen haakjes, moet u ook een variabele toevoegen om een SQL-instructie te gebruiken.

Bijvoorbeeld:

PreparedStatement pst =  connection.prepareStatement(sql);
int numRowsChanged = pst.executeUpdate(sql);

Other episodes