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.getSQLState 的所有可能值是啥?
java.sql.SQLException:getShort() 的值无效 - ''
Cause: java.sql.SQLException: 请求的转换无效 ; uncategorized SQLException for SQL []; SQL state [99999]; er