2009-12-15 30 views
61

Trong MySQL, tôi có hai bảng, tableAtableB. Tôi cố gắng để thực hiện hai truy vấn:Không thể phát hành các câu lệnh thao tác dữ liệu bằng executeQuery()

executeQuery(query1) 
executeQuery(query2) 

Nhưng tôi nhận được lỗi sau:

can not issue data manipulation statements with executeQuery(). 

này có nghĩa là gì?

+0

Bạn có quyền truy cập vào MySQL nào khác ngoài JDBC - Quản trị viên MySQL không? Hoặc dòng lệnh? –

+0

tôi có quyền truy cập vào quản trị mysql. tuy nhiên sự kiện này là như vậy. cơ sở dữ liệu mysql sẽ được tạo, sửa đổi, cập nhật, vv bằng cách sử dụng quản trị mysql nhưng sau đó tất cả các hoạt động được yêu cầu phải được thực hiện với java. – silverkid

+0

Tốt hơn bao gồm việc tạo chỉ mục trong các tập lệnh để tạo cơ sở dữ liệu hơn là thông qua JDBC, rất có thể sau khi bạn có thể đã sử dụng chúng. –

Trả lời

132

Để thao tác dữ liệu bạn thực sự cần executeUpdate() thay vì executeQuery().

Dưới đây là một chiết xuất từ ​​executeUpdate() javadoc mà đã là một câu trả lời riêng của mình tại:

Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.

2

ExecuteQuery hy vọng một tập kết quả. Tôi không quen thuộc với Java/MySQL, nhưng để tạo các chỉ mục, bạn có thể muốn một ExecuteUpdate().

+1

Nó không mong đợi một 'ResultSet'. Nó thay vào đó ** trả về ** một 'ResultSet'. – BalusC

+1

Nó hy vọng một tập hợp kết quả từ DB là những gì tôi có ý nghĩa. –

12

Sử dụng executeUpdate() để phát hành báo cáo thao tác dữ liệu. executeQuery() chỉ dành cho các truy vấn SELECT (nghĩa là các truy vấn trả lại tập hợp kết quả).

-1

Bên cạnh executeUpdate() trên dấu ngoặc đơn, bạn cũng phải thêm biến để sử dụng câu lệnh SQL.

Ví dụ:

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

Xin chào! Khi lên đầu, các câu hỏi và câu trả lời trên Stack Overflow phải được viết bằng tiếng Anh (nếu không chúng sẽ có nguy cơ bị xóa và/hoặc Google Translation). Chúc mừng! (_Hola! Làm thế nào để có thể sử dụng nó, trước khi bạn truy cập vào ngăn xếp Stack Overflow debe estar escrito en Inglés (ví dụ như trình duyệt Google Traductor). ¡Salud! _) –

7

Khi thực hiện DML tuyên bố, bạn nên sử dụng executeUpdate/execute hơn executeQuery.

Dưới đây là một so sánh ngắn gọn:

executeQueryVSexecuteUpdateVSexecute

1

Mã này làm việc cho tôi: Tôi thiết lập các giá trị whit một INSERT và nhận được LAST_INSERT_ID() của giá trị này whit một SELECT; Tôi sử dụng java NetBeans 8.1, MySql và 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;} 
Các vấn đề liên quan