hi tiany??
i am so sorry ?? my english is poor??
Connection conn = null;
  Statement stmt = null;
  conn = .......;
  stmt = conm.createStatement(xxxxxx);
  ResultSet rs = stmt.executeQuery(sql1);
  while(rs.next()){
    str = rs.getString(xxxxx);
    ResultSet rs1 = stmt.executeQuery(\"select * from 
anyTable where any=str\");
  }


it's true??

????????iPhone


------------------ Original ------------------
From: ???? <[email protected]&gt;
Date: Wed,Nov 6,2019 6:34 PM
To: dev <[email protected]&gt;
Subject: Re: (IOTDB-291) Statement close operation may cause the whole 
connection's resource to be released



Hi, Liu

You mean at the same time, one statement can only hold one ResultSet in 
mysql-jdbc?


&gt; -----????????-----
&gt; ??????: "????????.????`" <[email protected]&gt;
&gt; ????????: 2019-11-06 17:41:28 (??????)
&gt; ??????: dev <[email protected]&gt;
&gt; ????: 
&gt; ????: ?????? (IOTDB-291) Statement close operation may cause the whole 
connection's resource to be released
&gt; 
&gt; hi&amp;nbsp;tiany,&amp;nbsp;
&gt; in&amp;nbsp;cluster, how to save the&amp;nbsp;statementId Map, and how to 
releases the resources corresponding of&amp;nbsp;queryIds ,&amp;nbsp;
&gt; i see mysql jdbc when call execute(sql) method , it will 
to&amp;nbsp;implicitlyCloseAllOpenResults ,why not&amp;nbsp;refer to this??
&gt; you want the client nested call ?
&gt; ------------------&amp;nbsp;????????&amp;nbsp;------------------
&gt; ??????:&amp;nbsp;"????"<[email protected]&amp;gt;;
&gt; ????????:&amp;nbsp;2019??11??6??(??????) ????5:13
&gt; ??????:&amp;nbsp;"dev"<[email protected]&amp;gt;;
&gt; 
&gt; ????:&amp;nbsp;Re: (IOTDB-291) Statement close operation may cause the 
whole connection's resource to be released
&gt; 
&gt; 
&gt; 
&gt; Hi,
&gt; 
&gt; I have solved the issued by maintaining a ThreadLocal<Map<Long, 
Set<Long&amp;gt;&amp;gt;&amp;gt; in the TSServiceImpl which is a map 
(statementId -&amp;gt; all queryIds in that statement).
&gt; 
&gt; Every time the statement is closed, all the queryIds in that map should 
also be closed.
&gt; However, when a ResultSet is closed, it only releases the resources 
corresponding to that queryId.
&gt; When the connection is closed, the function closeSession() is invoked, it 
will release all the resource saved in that session thread.
&gt; 
&gt; The PR link is https://github.com/apache/incubator-iotdb/pull/526.
&gt; 
&gt; 
&gt; &amp;gt; -----????????-----
&gt; &amp;gt; ??????: "Yuan Tian (Jira)" <[email protected]&amp;gt;
&gt; &amp;gt; ????????: 2019-11-05 22:53:00 (??????)
&gt; &amp;gt; ??????: [email protected]
&gt; &amp;gt; ????: 
&gt; &amp;gt; ????: [jira] [Created] (IOTDB-291) Statement close operation may 
cause the whole connection's resource to be released
&gt; &amp;gt; 
&gt; &amp;gt; Yuan Tian created IOTDB-291:
&gt; &amp;gt; -------------------------------
&gt; &amp;gt; 
&gt; 
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 Summary: Statement close operation may cause the whole connection's resource 
to be released
&gt; 
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 Key: IOTDB-291
&gt; 
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 URL: https://issues.apache.org/jira/browse/IOTDB-291
&gt; 
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 Project: Apache IoTDB
&gt; 
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 Issue Type: Bug
&gt; 
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 Reporter: Yuan Tian
&gt; &amp;gt; 
&gt; &amp;gt; 
&gt; &amp;gt; The function closeClientOperation() in IoTDBStatement.java 
invokes the function closeOperation(TSCloseOperationReq) in TSServiceImpl. 
&gt; &amp;gt; Because the queryId field in TSCloseOperationReq is set to be 
-1L, the releaseQueryResource&amp;nbsp; function will release all the 
resources&amp;nbsp; in that connection.
&gt; &amp;gt; 
&gt; &amp;gt; {code:java}
&gt; &amp;gt;&amp;nbsp;&amp;nbsp; private void closeClientOperation() throws 
SQLException {
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if 
(operationHandle != null) {
&gt; 
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 TSCloseOperationReq closeReq = new TSCloseOperationReq(operationHandle, -1);
&gt; 
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 closeReq.setStmtId(stmtId);
&gt; 
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 TSStatus closeResp = client.closeOperation(closeReq);
&gt; 
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 RpcUtils.verifySuccess(closeResp);
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (Exception e) {
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw 
new SQLException("Error occurs when closing statement.", e);
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&gt; &amp;gt;&amp;nbsp;&amp;nbsp; }
&gt; &amp;gt; {code}
&gt; &amp;gt; 
&gt; &amp;gt; {code:java}
&gt; &amp;gt;&amp;nbsp;&amp;nbsp; private void 
releaseQueryResource(TSCloseOperationReq req) throws StorageEngineException {
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map<Long, 
QueryContext&amp;gt; contextMap = contextMapLocal.get();
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (contextMap == null) {
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
return;
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (req == null || 
req.queryId == -1) {
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 
end query for all the query tokens created by current thread
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for 
(QueryContext context : contextMap.values()) {
&gt; 
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 QueryResourceManager.getInstance().endQueryForGivenJob(context.getJobId());
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
contextMapLocal.set(new HashMap<&amp;gt;());
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
QueryResourceManager.getInstance()
&gt; 
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 .endQueryForGivenJob(contextMap.remove(req.queryId).getJobId());
&gt; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&gt; &amp;gt;&amp;nbsp;&amp;nbsp; }
&gt; &amp;gt; {code}
&gt; &amp;gt; 
&gt; &amp;gt; 
&gt; &amp;gt; 
&gt; &amp;gt; 
&gt; &amp;gt; --
&gt; &amp;gt; This message was sent by Atlassian Jira
&gt; &amp;gt; (v8.3.4#803005)

Reply via email to