我正在构建一个与MYSQL数据库对话的java Web应用程序。当请求进来时,有几件事情需要完成。
首先,我必须验证一些数据。为此,我有一个静态方法,它传递一些数据并验证它是否准确。部分验证要求我使用另一个返回ResultSet的静态方法查询数据库
即Web应用程序调用Validate(String data)调用queryData()
当我这样做时,运行正常。
现在,在调用数据之后,我调用了另一个将一些数据插入数据库的静态函数。此插入函数调用(有时但不总是)完全相同的queryData函数来获取数据。
即web app调用insertData(data)调用queryData()。 所以程序流程如下
Webapp
|----> Validate()
|-------->queryData()
<-----------|
<---------|
|
|------>insertData()
|-------->queryData()
<-----------|
<---------|
我使用在queryData方法中本地定义的PreparedStatement查询数据库
正如我所说,验证方法工作正常,但是当涉及到insert方法时,应用程序崩溃了。
我仔细检查过两种情况下SQL语句是否相同,我甚至打印出结果集的内存位置,它们位于不同的位置。但是,当我打印出结果集的isBeforeFirst()时,它在验证方法中为true,但在insert方法中为false。
似乎JDBC正在返回ResultSet的副本(它保存在不同的内存位置),但它实际上并没有创建一个位于第一行之前的新ResultSet。
简单的解决方案是简单地将resultSet返回到之前,但这并不能解决问题。它仍然表示resultSet不是在第一次之前。
有人知道为什么会这样吗?
答案 0 :(得分:0)
感谢所有试图提供帮助的人。