为啥我可以将 java 应用程序连接到 MySQL DB 但无法执行查询? [复制]

Posted

技术标签:

【中文标题】为啥我可以将 java 应用程序连接到 MySQL DB 但无法执行查询? [复制]【英文标题】:Why can I connect java application to MySQL DB but can't execute a query? [duplicate]为什么我可以将 java 应用程序连接到 MySQL DB 但无法执行查询? [复制] 【发布时间】:2015-01-17 18:36:04 【问题描述】:

我正在 Netbeans 中做一个简单的 java 应用程序,它包含一个包含 2 个字段、名称和年龄的注册表单。我想将文本字段信息提交到 mysql 数据库。当您单击提交按钮时,我正在使用以下代码:

private void btnOKActionPerformed(java.awt.event.ActionEvent evt)
                                      

    String name = txtName.getText();
    String age = txtAge.getText();

    String request = "INSERT INTO register VALUES ('"+name+"','"+age+"');";


    try
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/registsDB","root","root");
    Statement st = conn.createStatement();
    st.executeQuery(request);
    
    catch(Exception ex) 
        System.out.println("Whoops.");
    

我认为连接是成功的,但是在执行查询时出现了某种错误。我看过几个例子,他们使用了类似的代码,不知道出了什么问题。

Java 新手。如果有人可以帮助我,我将不胜感激。提前致谢。

编辑:

错误列表:

java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
at com.mysql.jdbc.StatementImpl.checkForDml(StatementImpl.java:504)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1523)
at jantarinho.Cadastro.btnOKActionPerformed(Register.java:113)
at registsDB.Register.access$000(Register.java:19)
at registDB.Register$1.actionPerformed(Register.java:52)
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:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

【问题讨论】:

你遇到什么样的错误? 请在您的问题中包含完整的错误信息。 将 catch 语句更改为 ex.printStackTrace() 并查看错误是什么。不要吞下异常。 当你得到一个异常时,打印任何不包含异常消息的东西是完全没有意义的。 改掉这个习惯。 更改您的 catch 块以打印整个堆栈跟踪并将其发布在您的问题中。 正如预期的那样,异常的文本现在完全回答了您的问题。没有必要这样做。 NB Netbeans 与此问题的相关性为零。 【参考方案1】:

您不能使用 executeQuery() 方法操作表(插入、更新)。您需要运行 stmt.executeUpdate(request);。

https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeUpdate%28java.lang.String%29

【讨论】:

就是这样,谢谢! 稍微搜索一下就能回答你的问题@HugoP

以上是关于为啥我可以将 java 应用程序连接到 MySQL DB 但无法执行查询? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

将 Grafana 连接到 MySQL 显示查询失败,为啥?

为啥我无法连接到 mysql 数据库?

为啥 Java 在最新的 JDK 更新后无法连接到 MySQL 5.7,应该如何解决? (ssl.SSLHandshakeException:没有适当的协议)

如何将 MySQL 连接到 Java 程序

为啥一旦我将主机从“localhost”更新为“mydomain.com”,Wordpress 会突然连接到 MySQL 数据库服务器?

将 Java Spark Sql 连接到 Mysql