java.sql.SQLException: Can not issue data manipulation statements with execu 这是错误提示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.sql.SQLException: Can not issue data manipulation statements with execu 这是错误提示相关的知识,希望对你有一定的参考价值。

源代码
<%@ page language="java" import="java.sql.*" pageEncoding="UTF-8"%>
<%
//获取记录得到的主键id值
String index=request.getParameter("index");
int id=Integer.parseInt(request.getParameter("index"));
%>
<%
//注册驱动程序
Class.forName("com.mysql.jdbc.Driver");
//创建对数据库vote连接
String url="jdbc:mysql://localhost:3306/vote";
String user="root";
String psw="root";
Connection con=DriverManager.getConnection(url,user,psw);
//创建语句对象以执行SQL语句
String sql="delete from vote where id=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setInt(1, id);
pstmt.executeUpdate();
ResultSet rs=pstmt.executeQuery();
rs.next();
%>
修改公司信息<br>
<form action="modify_deal.jsp" method="post">
公司名称:
<input type="text" name="company_name" value=<%=rs.getString(1) %>>
<input type="hidden" name="index" value=<%=id %>>
<input type="submit" name="ok" value="修改">
</form>

参考技术A 去掉ResultSet rs=pstmt.executeQuery();rs.next();
参见:http://zhidao.baidu.com/link?url=M5TX2Hgzs5Z6z1ygbOaHXjEil8VlgnaYxT4MKop9Qd5JL7TsWtOxdyG7G-A6N8hn9a1bhpLuQKmk4rnsByngG_追问

去掉有错。

追答

pstmt.executeQuery()是查询的意思,你delete操作用到的是pstmt.executeUpdate()。如果要用ResultSet rs=pstmt.executeQuery(),你就得用select语句

追问

嗯嗯 我找到原因啦,谢谢

本回答被提问者采纳

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

【中文标题】Oracle DB:java.sql.SQLException:关闭连接【英文标题】:Oracle DB : java.sql.SQLException: Closed Connection 【发布时间】:2011-10-10 18:00:42 【问题描述】:

java.sql.SQLException 的原因:来自 Oracle 的已关闭连接??

java.sql.SQLException: 关闭连接 在 oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 在 oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) 在 oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208) 在 oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:1131) 在 oracle.jdbc.OracleConnectionWrapper.commit(OracleConnectionWrapper.java:117)

我们从故障转移数据库连接中收到此错误。我们对其他数据库也使用相同的代码。但是只有一个数据库看到这个问题。这是因为连接可能由于长时间不活动而超时而我们正在尝试使用它吗?如果您需要更多详细信息,请告诉我...

AbandonedConnectionTimeout 设置为 15 分钟 InactivityTimeout 设置为 30 分钟

【问题讨论】:

【参考方案1】:

这意味着连接在某个时候成功建立,但是当您尝试在那里提交时,连接不再打开。您提到的参数听起来像连接池设置。如果是这样,它们与这个问题无关。最可能的原因是您和数据库之间的防火墙在一定的空闲时间后终止连接。最常见的修复方法是让您的连接池在从中签出连接时运行验证查询。这将立即识别并清除死连接,确保您只从池中获得良好的连接。

【讨论】:

感谢您的回答。验证连接属性是否会增加任何开销?我只在其中一个数据库中看到了这一点,我也怀疑那个特定的数据库有问题。 它自然会增加一些开销,因为它必须实际访问数据库才能验证连接;但是,每个数据库都有一个推荐的“验证查询”来使用,它会在数据库端产生最小的开销,所以你会得到的唯一减速是来自任何网络延迟。不管问题如何,添加验证查询是避免从池中获取死连接的一种非常简单的方法。我相信目前推荐的 Oracle 查询是select 1 from dual【参考方案2】:

您必须验证连接。

如果您使用 Oracle,您很可能使用 Oracle 的 Universal Connection Pool。以下假设您这样做。

验证连接的最简单方法是告诉 Oracle 在借用连接时必须对其进行验证。这可以通过

pool.setValidateConnectionOnBorrow(true);

但它仅在您保持连接一小段时间时才有效。如果您借用连接的时间较长,则在您持有连接时连接可能会断开。在这种情况下,您必须明确地验证连接

if (connection == null || !((ValidConnection) connection).isValid())

有关详细信息,请参阅Oracle documentation。

【讨论】:

如果你不能使用 UCP 或者不想处理在公共 maven 存储库上不可用的 Oracle 工件的问题,我最近发现 java.sql.Connection 有一个 isValid方法。它适用于超时。 而 oracle.ucp.jdbc.ValidConnection 的 isValid 导致我计划的记录器在 java.lang.ClassCastException 上崩溃

以上是关于java.sql.SQLException: Can not issue data manipulation statements with execu 这是错误提示的主要内容,如果未能解决你的问题,请参考以下文章

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

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

java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 发生错误

Java:Sqlexception:位置不支持的 SQL92 令牌:178

java.sql.SQLException:接近“on”:语法错误问题

java.sql.SQLException:架构“ROOT”不存在