鉴于以下代码:
//connection stuff
ResultSet rs = statement.executeQuery(query1);
statement.executeQuery(query2);
while(rs.next){
//code
}
即使已经执行了第二个语句,结果集rs
仍然有效吗?
我知道当你关闭一个语句时,结果集不再有效,但这里的代码只是执行另一个查询而不是将它存储在结果集中。
答案 0 :(得分:1)
statement
假设Statement
是executeQuery
:
默认情况下,每个Statement对象只能同时打开一个ResultSet对象。因此,如果读取一个ResultSet对象与另一个ResultSet对象的读取交错,则每个ResultSet对象必须由不同的Statement对象生成。如果存在一个开放的对象,则Statement接口中的所有执行方法都会隐式关闭该语句的当前ResultSet对象。
发布的代码不安全 - 第二次调用ResultSet
会返回一个新的rs
,并且只有一个可以一次打开os.environ['STANFORD_PARSER'] = os.path.join(
os.path.expanduser('~'), 'stanford-parser/stanford-parser.jar')
os.environ['STANFORD_MODELS'] = os.path.join(
os.path.expanduser('~'), 'stanford-parser/stanford-parser-3.5.2-models.jar')
parser = nltk.parse.stanford.StanfordParser(
model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
parsed = parser.parse(sentence_which_differs_from_time_to_time)
无效。