2012-04-16 5 views
0

Я пытаюсь вставить данные в MySQL таблицы, но я получил сообщение об исключении, которое говорит:Ошибка при выполнении запроса MySQL в Java

Apr 16, 2012 3:01:03 PM RFID.RFID passDetInput 
SEVERE: Can not issue data manipulation statements with executeQuery(). 
java.sql.SQLException: Can not issue data manipulation statements with executeQuery(). 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929) 
at com.mysql.jdbc.StatementImpl.checkForDml(StatementImpl.java:436) 
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1390) 
at RFID.RFID.passDetInput(RFID.java:495) 
at RFID.RFID.SaveActionPerformed(RFID.java:472) 
at RFID.RFID.access$700(RFID.java:28) 
at RFID.RFID$7.actionPerformed(RFID.java:259) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6504) 
    ... 

Это мой код, чтобы сделать манипуляции с данными:

import java.sql.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public void passDetInput(String tag, String fname, String lname, String pID, String ConNo, String phone) { 

     String SQLcomm = "insert into pass_det (RFID_tag, fname, lname, ID_num, Conveyor_num, Phone_num) values (/'"+tag+"/',/'"+fname+"/',/'"+lname+"/',/'"+pID+"/',/'"+ConNo+"/',/'"+phone+"/')"; 

     java.sql.Connection con = null; 
     Statement st = null; 
     ResultSet rs = null; 

     String url = "jdbc:mysql://localhost:3306/passenger_details"; 
     String user = "root"; 
     String password = ""; 

    try { 
     con = DriverManager.getConnection(url, user, password); 
     st = con.createStatement(); 
     rs = st.executeQuery(SQLcomm); 

    } catch (SQLException ex) { 
     Logger lgr = Logger.getLogger(RFID.class.getName()); 
     lgr.log(Level.SEVERE, ex.getMessage(), ex); 
    } 
} 

и функция выполняется с помощью кнопочного нажатия.

Я проверил имя базы данных, имя таблицы и имя элементов, и все они верны. Где ошибка в моем коде?

Спасибо заранее.

+0

Это ясное объяснение в вашей трассе стека исключений "* Невозможно выдавать операторы обработки данных с помощью' executeQuery() '*" означает, что вы не можете использовать операторы манипуляции данными, такие как 'INSERT',' UPDATE' и 'DELETE 'с' executeQuery() '. Вы должны использовать их с 'executeUpdate()' и 'executeQuery()' с помощью оператора SELECT'. – Lion

ответ

3

Попробуйте execute() или executeUpdate() метод. Если я правильно помню, executeQuery предназначен только для SELECT заявлений.

Также следует обратить внимание на: PreparedStatement

+0

при использовании этой команды, я получил эту ошибку, i.imgur.com/83iOe.png это странно, поскольку это строка, но признанная как int –

2

Вы должны использовать st.executeUpdate(SQLcomm);

+0

при использовании этой команды, я получил эту ошибку, http: //i.imgur. com/83iOe.png Это странно, так как это строка, но распознанная как int –

+1

@Firhan Fikrin :) 'executeUpdate()' возвращает значение 'int'. Вам нужно назначить его переменной 'int'. Вы в настоящее время назначаете его 'rs' типа' ResultSet'. Вы можете просто избежать этого, если вам не требуется возвращаемое значение, например 'st.executeUpdate (« Ваш SQL-запрос »). Не назначайте его. Он просто возвращает значение состояния 'executeUpdate()', успешно ли это или нет. – Lion

+0

@ lion вы можете показать мне, как вы это делаете, я довольно смущен –

0

Только executeUpload() решит вашу проблему.

+0

Это довольно минималистский ответ. Я думаю, что человек, задающий этот вопрос, может захотеть получить немного больше информации. – Spudley