结果集在 Java 中不起作用
Posted
技术标签:
【中文标题】结果集在 Java 中不起作用【英文标题】:ResultSet Not working in Java 【发布时间】:2018-07-19 05:06:58 【问题描述】:PFB 我用过的代码:
ResultSet rs1 = stmt.executeQuery("select dfd.document_id,dfd.country_id,dfi.folder_name from dossier_folder_documents dfd,dossier_folder_info dfi where dfd.fk_dossier_folder_id=dfi.pk_dossier_folder_id and dfd.is_core is null and dfd.action='N' and dfd.fk_dossier_basic_info_id in (select pk_dossier_id from dossier_basic_info where dossier_id= '"+vdlist.get(g)+"' and (dfd.document_id,dfi.folder_name) not in(select dfd.document_id,dfi.folder_name from dossier_folder_documents dfd,dossier_folder_info dfi where dfd.fk_dossier_folder_id=dfi.pk_dossier_folder_id and dfd.fk_dossier_basic_info_id in (select pk_dossier_id from dossier_basic_info where dossier_id= '"+sdlist.get(g)+"' and data_state='C')))");
ResultSet rs2 = stmt.executeQuery("select dfd.document_id,dfd.country_id,dfi.folder_name from dossier_folder_documents dfd,dossier_folder_info dfi where dfd.fk_dossier_folder_id=dfi.pk_dossier_folder_id and dfd.is_core is null and dfd.action='O' and dfd.fk_dossier_basic_info_id in (select pk_dossier_id from dossier_basic_info where dossier_id='"+vdlist.get(g)+"') and (dfd.document_id,dfi.folder_name) in (select dfd.document_id,dfi.folder_name from dossier_folder_documents dfd,dossier_folder_info dfi where dfd.fk_dossier_folder_id=dfi.pk_dossier_folder_id and dfd.fk_dossier_basic_info_id in (select pk_dossier_id from dossier_basic_info where dossier_id='"+sdlist.get(g)+"' and data_state='C'))");
ResultSetMetaData rsmd1 = rs1.getMetaData();
//ResultSetMetaData rsmd2 = rs2.getMetaData();
String temp5 = new String();
for(int f=1;f<=rsmd1.getColumnCount();f++)
data3+=rsmd1.getColumnName(f)+"/ /";
temp4=data3;
data3="";
while(rs1.next())
System.out.println("In here...");
num2=g;
for(int x=1;x<=rsmd1.getColumnCount();x++)
temp5+=rs1.getString(x)+"/ /";
String data5 = new String();
data5=temp5;
sublist1.add(data5);
//System.out.println(sublist);
errvdlist.add(vdlist.get(num2));
errsdlist.add(sdlist.get(num2));
System.out.println("Validation Dossier ID for New Corruption: "+vdlist.get(num2));
System.out.println("Submission Dossier ID for New Corruption: "+sdlist.get(num2));
while(rs2.next() )
num2=g;
for(int x=1;x<=rsmd1.getColumnCount();x++)
temp6+=rs2.getString(x)+"/ /";
//String data6 = new String();
data6=temp6;
sublist2.add(data6);
//System.out.println(sublist);
errvdlist.add(vdlist.get(num2));
errsdlist.add(sdlist.get(num2));
System.out.println("Validation Dossier ID for Old: "+vdlist.get(num2));
System.out.println("Submission Dossier ID for Old: "+sdlist.get(num2));
我必须执行两个查询,并且我使用了两个结果集:rs1 和 rs2。在我的输出中,执行了 rs2 的 while 循环,但没有执行 rs1。我最初认为我用于 rs1 的查询有问题,但事实并非如此。打印 'In here...' 的打印语句不会被执行,这意味着它甚至不会进入循环。有什么建议吗?
【问题讨论】:
你确定如果你在数据库中运行 rs1 的查询然后获取数据? 是的,我试过直接在数据库中运行它。它返回一行。 为什么在处理第一条语句的结果之前执行第二条语句? 请看这个,也许对你有帮助***.com/questions/8579613/… 【参考方案1】:来自ResultSet
javadoc:
ResultSet 对象自动关闭当生成它的 Statement 对象关闭、重新执行或用于从多个结果序列中检索下一个结果时。
所以基本上,Statement
一次只能给你一个ResultSet
,所以当你执行第二个查询时你会丢失第一个结果。
使用Statement
的两个实例可以同时打开两个ResultSet
。
【讨论】:
以上是关于结果集在 Java 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥此语句在 java x ^= y ^= x ^= y 中不起作用;
MailComposer didFinishWith 结果在 Swift 3.0 中不起作用
Eclipse 自动完成功能在某些 Java 文件中不起作用
为啥 HttpServletRequest.getRemoteAddr() 在 Java servlet 中不起作用? [复制]