客户端一次性向服务器请求三次数据,服务器的代码: for(int i=0 ; i<allIDList.size() ; i++)
{
Object[] stallStatusone = {allIDList.get(i).get("user_id")};
String queryAllUserone = "select stall_name,goods_name,goods_description from MoveStall_GoodsTable where user_id=?";
List<Object> newUserList = conn.excuteQuery(queryAllUserone, stallStatusone);
JSONArray jsonUser = JSONArray.fromObject(newUserList);
} /**
* 获取结果集,并将结果放在List中
*
* @param sql
* SQL语句
* @return List
* 结果集
*/
public List<Object> excuteQuery(String sql, Object[] params) {
// 执行SQL获得结果集
ResultSet rs = executeQueryRS(sql, params);
// 创建ResultSetMetaData对象
ResultSetMetaData rsmd = null;
// 结果集列数
int columnCount = 0;
try {
rsmd = rs.getMetaData();
// 获得结果集列数
columnCount = rsmd.getColumnCount();
} catch (SQLException e1) {
System.out.println("发生错误了1:"+e1.getMessage());
}
// 创建List
List<Object> list = new ArrayList<Object>();
try {
// 将ResultSet的结果保存到List中
while (rs.next()) {
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 1; i <= columnCount; i++) {
map.put(rsmd.getColumnLabel(i), rs.getObject(i));
}
list.add(map);
}
} catch (SQLException e) {
System.out.println("发生错误了2:"+e.getMessage());
} finally {
// 关闭所有资源
closeAll();
} /**
* 关闭所有资源
*/
private void closeAll() {
// 关闭结果集对象
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
// 关闭PreparedStatement对象
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
// 关闭CallableStatement 对象
if (callableStatement != null) {
try {
callableStatement.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
// 关闭Connection 对象
if (connnection != null) {
try {
connnection.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
} 上面是服务器主要代码,但是会报错:
发生错误了1:Operation not allowed after ResultSet closed
发生错误了2:Operation not allowed after ResultSet closed什么原因呢???
{
Object[] stallStatusone = {allIDList.get(i).get("user_id")};
String queryAllUserone = "select stall_name,goods_name,goods_description from MoveStall_GoodsTable where user_id=?";
List<Object> newUserList = conn.excuteQuery(queryAllUserone, stallStatusone);
JSONArray jsonUser = JSONArray.fromObject(newUserList);
} /**
* 获取结果集,并将结果放在List中
*
* @param sql
* SQL语句
* @return List
* 结果集
*/
public List<Object> excuteQuery(String sql, Object[] params) {
// 执行SQL获得结果集
ResultSet rs = executeQueryRS(sql, params);
// 创建ResultSetMetaData对象
ResultSetMetaData rsmd = null;
// 结果集列数
int columnCount = 0;
try {
rsmd = rs.getMetaData();
// 获得结果集列数
columnCount = rsmd.getColumnCount();
} catch (SQLException e1) {
System.out.println("发生错误了1:"+e1.getMessage());
}
// 创建List
List<Object> list = new ArrayList<Object>();
try {
// 将ResultSet的结果保存到List中
while (rs.next()) {
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 1; i <= columnCount; i++) {
map.put(rsmd.getColumnLabel(i), rs.getObject(i));
}
list.add(map);
}
} catch (SQLException e) {
System.out.println("发生错误了2:"+e.getMessage());
} finally {
// 关闭所有资源
closeAll();
} /**
* 关闭所有资源
*/
private void closeAll() {
// 关闭结果集对象
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
// 关闭PreparedStatement对象
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
// 关闭CallableStatement 对象
if (callableStatement != null) {
try {
callableStatement.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
// 关闭Connection 对象
if (connnection != null) {
try {
connnection.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
} 上面是服务器主要代码,但是会报错:
发生错误了1:Operation not allowed after ResultSet closed
发生错误了2:Operation not allowed after ResultSet closed什么原因呢???
解决方案 »
- NND, 项目移植报个No bean named 'sessionFactory' is defined
- 如何使用JDBC遍历出表中所有的值?求教
- 问个问题,为什么TOMCAT挂在自己的主机上外网无法访问
- 继承HibernateDaoSupport的问题
- hibernate这样的方式得到的Session是线程不安全的?
- 大虾们好,我想做一个简单程序,用struts做,具体大体框架,没有思路,请帮帮忙,谢谢!
- 关于Java类型转换安全
- WebLogic连SQLServer2000的问题
- 怎么实现从远程服务器上取文件?要下载到本地。各位大虾救命啊!!!
- 刚装了WSAD5,打开那个“拍卖”的例子,怎么能让它运行?
- org.springframework.beans.factory.BeanCreationException
- 在web项目中如何读取到tomcat的日志?
还会出现这样的错误:
八月 02, 2017 8:01:08 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [QueryAllServlet] in context with path [/MoveStall] threw exception
java.lang.NullPointerException
at com.mysql.jdbc.PreparedStatement$ParseInfo.<init>(PreparedStatement.java:343)
at com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:519)
at com.mysql.jdbc.Connection.clientPrepareStatement(Connection.java:2187)
at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4829)
at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4734)
at JDBC.ConnectionDB.executeQueryRS(ConnectionDB.java:135)
at JDBC.ConnectionDB.excuteQuery(ConnectionDB.java:202)
at MoveStallServlet.QueryAllServlet.doPost(QueryAllServlet.java:95)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
// 执行SQL获得结果集
ResultSet rs = executeQueryRS(sql, params);
这一上来就是个无限递归,代码是怎么执行下去的
{
Object[] stallStatusone = {allIDList.get(i).get("user_id")};
String queryAllUserone = "select stall_name,goods_name,goods_description from MoveStall_GoodsTable where user_id=?";
List<Object> newUserList = conn.excuteQuery(queryAllUserone, stallStatusone);
JSONArray jsonUser = JSONArray.fromObject(newUserList);
}这个循环第一次执行的时候所有资源都关闭了lz可以尝试把closeAll放在for循环之后执行。空指针异常我猜测可能是这里:
public List<Object> excuteQuery(String sql, Object[] params) {
// 执行SQL获得结果集
ResultSet rs = executeQueryRS(sql, params);
第一次执行closeAll之后所有资源都关闭了,第二次循环的时候无法获取到结果集,即rs=null,但至于为什么有的时候才出现,这我就不知道了,不知道有没有哪位大神接着解释一下