0
代码破坏:结果集后的ObjectOutputStream .reset段()
Connection connection;
String url, usernameDB, passwordDB;
url = "...";
usernameDB = "...";
passwordDB = "...";
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(url, usernameDB, passwordDB);
Statement statement = connection.createStatement();
queryResult = statement.executeQuery(query);
boolean moreRecords = queryResult.next();
if(!moreRecords)
{
out.writeBoolean(false);
out.flush();
}
else
{
int cols=0;
out.writeBoolean(true);
out.flush();
out.reset(); // line 1
cols = queryResult.getMetaData().getColumnCount();
out.writeInt(cols);
out.flush();
out.reset();
out.flush();
out.reset();
do
{
for(int i=1;i<=cols;i++)
{
out.writeObject(queryResult.getObject(i)); // line 2
out.flush();
out.reset();
}
out.writeBoolean(false);
out.flush();
out.reset();
}
while(queryResult.next());
}
'出' 是一个ObjectOutputStream。
当我到在上面的代码行1中,QueryResult对象重置本身,并且当我来线路2我得到一个异常:
“java.sql.SQLException中:结果的结束后组”。
我试图找到一种方法来增加连接超时,但没有找到办法。 看来,当我到达上面的代码中的第1行时,我失去了与数据库的连接,从而破坏了我的queryResult对象。
有没有办法解决这个问题,或者克隆结果集(用它的值)?
EDIT
此代码运行在Tomcat的6,我打开一个ServerSocket和为每个连接我启动一个新的线程继而执行上面的代码....
的任何操作上的'ObjectOutputStream'将对一个'java.sql.ResultSet'没有影响。因此,必须有一些你没有发布的代码。 – 2012-03-25 03:49:26
但这是我的问题,即ObjectOutStream对ResultSet有影响.... 我唯一能想到的是该代码在一个线程中运行.... – Netanel 2012-03-25 15:45:54