SQLException:“无法使用 executeQuery() 发出数据操作语句”[重复]

Posted

技术标签:

【中文标题】SQLException:“无法使用 executeQuery() 发出数据操作语句”[重复]【英文标题】:SQLException: "Can not issue data manipulation statements with executeQuery()" [duplicate] 【发布时间】:2013-12-07 20:33:25 【问题描述】:
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import ="java.sql.*" %>
<%@ page import = "com.mysql.jdbc.Driver" %>
<jsp:useBean id="vo" class="my.member.MemberVo"/>
 <jsp:setProperty property="*" name="vo"/>
<%

  Connection conn = null;
  Statement  stmt = null;
  PreparedStatement ps = null;

  String queryPerson = new String(); //Query statement
  String queryUserInfo = new String();
  String queryAccount = new String();

  try 
    Class.forName("org.gjt.mm.mysql.Driver");
     catch (ClassNotFoundException e ) 
        System.out.println("JDBC error");
    
  try
   conn = DriverManager.getConnection("jdbc:mysql://mysql2.cs.stony***.edu/jaehyeolee", "root", "");
   catch(SQLException e) 
      System.out.println("Database Error");
  
   System.out.println("Database connected");


   try
      stmt = conn.createStatement(); 


      queryAccount = "insert into member values('testID','password','name');";
      System.out.println(queryAccount);
      stmt.executeQuery(queryAccount);
  catch(SQLException e)
      System.out.println("not inserted!");
  finally
        conn.close();
    

 %>

这是我在 jsp 文件中的非常简单的 mysql 查询。 我想将值插入到表成员(id、密码、名称)中,但它一直抛出一个 异常并打印“未插入!”。

有谁知道是什么导致了异常?我试图从昨天中午开始弄清楚 但我仍然不知道原因。

请帮忙!

这是我的堆栈跟踪!

Database connected
java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
insert into member('userid','password','name') values('jhlee127','108512012','JayZ');
not inserted!
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
    at com.mysql.jdbc.StatementImpl.checkForDml(StatementImpl.java:499)
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1518)
    at org.apache.jsp.member.regFormProc_jsp._jspService(regFormProc_jsp.java:109)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:695)

【问题讨论】:

你有异常的堆栈跟踪吗? 您应该打印 e 而不是“未插入”,这可能会更清楚地说明错误。也向我们展示成员的架构,ID 列是否接受字符串? @Rogue 我放了异常的堆栈跟踪。 有时在将错误消息发布到 StackExchange 之前实际阅读它们会有所帮助。我认为 Cannot issue data handling statements with executeQuery() 听起来不言自明。 请注意:请永远,永远处理这样的异常。对于像这样的致命异常,只需让它们冒泡,并选择将它们捕获到更高的位置以打印正确的错误消息。 永远不要像这样抓住并继续。 【参考方案1】:

代替:

stmt.executeQuery(queryAccount);

使用:

stmt.executeUpdate(queryAccount);

【讨论】:

是的!有用!非常感谢!你拯救了我的一天!!!【参考方案2】:

我的 Java 很生锈,但这里不是应该使用某种 executeUpdate() 方法来代替 executeQuery() 吗?

【讨论】:

谢谢。真的很有帮助!【参考方案3】:
PreparedStatement ps = conn.prepareStatement("insert into member (testID, password, name) values (?, ?, ?)");
ps.setInt(1, idValue);
ps.setString(2, passwordValue);
ps.setString(3, nameValue);
try 
    ps.executeUpdate();
    ps.close();

试试这个,如果解决了,请告诉我。

【讨论】:

【参考方案4】:

您需要拨打statement.executeUpdate 而不是statement.executeQuery

【讨论】:

以上是关于SQLException:“无法使用 executeQuery() 发出数据操作语句”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

异常和 SQLException 的区别

SQLException: 游标状态无效

SQLException.getSQLState 的所有可能值是啥?

java.sql.SQLException:getShort() 的值无效 - ''

Cause: java.sql.SQLException: 请求的转换无效 ; uncategorized SQLException for SQL []; SQL state [99999]; er

Oracle DB:java.sql.SQLException:关闭连接