Vin*_*rge 3 java multithreading jdbc
ResultSet线程安全吗?
我的问题出现了,因为在我的程序中,我已经为每个查询使用了不同的语句,我已经将ResultSet声明为局部变量,但是在ResultSet关闭后,它给出了一个不允许的操作错误.但我的语句正在工作,因为我正在使用插入和删除查询中的语句.我已经评论了ResultSet部分,并没有得到错误!
真正的问题是您在多个线程之间共享Statement对象.每次"执行"Statement时,先前返回的ResultSet将自动关闭.在这种情况下,ResultSet对象"属于"可能尚未使用它的其他线程.因此例外......
您不应在多个线程之间共享Connection,Statement/PreparedStatement或ResultSet对象.每个线程都应该获取并释放自己的资源.
不,ResultSet 不应暴露给多个线程。
ResultSet 的范围永远不应大于单个方法:执行查询,将 ResultSet 映射到对象或集合,并在创建它的同一范围内关闭 ResultSet。
关闭 ResultSet 的正确方法是在它自己的 try/catch 中的 finally 块中。
查看您另一个问题中的代码。它需要一个严肃的、完整的重构。您遇到问题并不奇怪。以下是一些建议:
只是好奇 - 您是否正在尝试学习如何编写服务器?是否有理由不使用 servlet 引擎作为此应用程序的基础?套接字是开始解决此类问题的非常低级的地方。