简体   繁体   English

Java Mysql UPDATE错误与准备好的语句

[英]Java Mysql UPDATE error with prepared statement

I am working on a java project and I need to update a row in a mysql database. 我正在研究Java项目,需要更新mysql数据库中的一行。 I am using preparedStatement and I do get an error. 我正在使用prepareStatement,但确实收到错误。 I tried to use just statement and it works. 我尝试使用just语句,它起作用了。 But I need to set some data in my sql statemnet. 但是我需要在我的sql statemnet中设置一些数据。 So I have to use preparedStatement. 所以我必须使用prepareStatement。 What's wrong? 怎么了?

So I have a database with 4 colums: Integer id (AI), Boolean monf2d, Varchar monf2p & Varchar monf2a. 因此,我有一个包含4个列的数据库:整数id(AI),布尔值monf2d,Varchar monf2p和Varchar monf2a。 The database has 2 rows and I want to update the first one, id 1. 该数据库有2行,我想更新第一行,id 1。

1st version with PreparedStatement: 第一个带有PreparedStatement的版本:

private Connection connection;
public void test() {
        PreparedStatement pr;
        String sql = "UPDATE routes SET monf2d = true, monf2p = 'Data1', monf2a = 'Data2'  WHERE id = ?";
        try {
            this.connection = ServerConnection.getConnection();
            pr = this.connection.prepareStatement(sql);
            pr.setInt(1,1);
            pr.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

2nd version with PreparedStatement: 带有PreparedStatement的第二版:

private Connection connection;
public void test() {
        Statement st;
        String sql = "UPDATE routes SET monf2d = true, monf2p = 'Data1', monf2a = 'Data2'  WHERE id = 1";
        try {
            this.connection = ServerConnection.getConnection();
            st = this.connection.createStatement();
            st.execute(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

When I am using the version with preparedStatement I get this error. 当我使用带有prepareStatement的版本时,出现此错误。

java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:861)
    at com.mysql.jdbc.StatementImpl.checkForDml(StatementImpl.java:469)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1968)
    at dbUtil.ServerSync.test(ServerSync.java:224)
    at adminapp.AdminController.initialize(AdminController.java:55)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2425)
    at loginapp.LoginController.adminLogin(LoginController.java:107)
    at loginapp.LoginController.login(LoginController.java:89)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Node.fireEvent(Node.java:8411)
    at javafx.scene.control.Button.fire(Button.java:185)
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$358(GlassViewEventHandler.java:432)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:410)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
    at com.sun.glass.ui.View.notifyMouse(View.java:937)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$152(WinApplication.java:177)
    at java.lang.Thread.run(Thread.java:748)

To update a table in case of Statement, you have to use executeUpdate() method. 要在使用Statement的情况下更新表,必须使用executeUpdate()方法。

Instead of using 而不是使用

st.execute(sql);

use below. 在下面使用。

st.executeUpdate(sql);

In case of PreparedStatement, you have to use executeUpdate() method. 如果是PreparedStatement,则必须使用executeUpdate()方法。

To know more details about methods in Statement and PreparedStatment, check below the links. 要了解有关Statement和PreparedStatment中方法的更多详细信息,请检查以下链接。 https://docs.oracle.com/javase/8/docs/api/java/sql/Statement.html https://docs.oracle.com/javase/8/docs/api/java/sql/Statement.html

https://docs.oracle.com/javase/8/docs/api/java/sql/PreparedStatement.html#executeUpdate-- https://docs.oracle.com/javase/8/docs/api/java/sql/PreparedStatement.html#executeUpdate--

Instead of using pr.executeQuery() use pr.executeUpdate(sql). 代替使用pr.executeQuery(),使用pr.executeUpdate(sql)。 It should work like a charm. 它应该像魅力一样工作。

We use executeQuery() for "select" type queries but in order to perform a query which doing modification on the table, use "executeUpdate" or "executeLargeUpdate" (in case large number of rows are to be modified) methods 我们将executeQuery()用于“选择”类型查询,但是为了执行对表进行修改的查询,请使用“ executeUpdate”或“ executeLargeUpdate”(如果要修改大量行)的方法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM