【发布时间】:2019-12-30 09:28:55
【问题描述】:
我正在尝试编写一个 java 程序,该程序需要遍历“旧值”列表以从 oracle 数据库表中获取“新值”列表。 OLD 值列表,我想从 shell 脚本中传递这个列表,该脚本将成为 java 程序的包装器。
一个 b c
--select 语句类似
select new_name from items where old_name = ? //loop through the list of old values
第二步是使用上面查询中的 new_name 在下面的 select 语句中使用
select msgid from new_name
我正在尝试做这样的事情 -
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@//host:port/SID", "userid", "password");
Statement stmt = conn.createStatement();
for (int i=0; i < arg.length; i++)
{
ResultSet getNewVal = stmt.executeQuery("select new_name from items where old_name = " + old_name[i]);
while (getNewVal.next()){
String newVal = getNewVal.getString(1);
ResultSet getMsgID = stmt.executeQuery("select msgid from " + newVal );
System.out.println (getMsgID.getString(1));
}
}
问题 - 第一个查询的 ResultSet 关闭并在我执行第二个查询时生成异常(关闭的结果集:下一个)
有什么建议吗?
根据要求,包括示例表定义。
create table items ( new_name varchar2(20),old_name varchar2(20) );
create table new_name ( msgid varchar2(20));
【问题讨论】:
-
请包括两个表的定义。
-
你真的是说有以列的值命名的表吗?
-
你的意思是old_name和new_name都包含在表字段中?
-
你为什么不用一个查询来做呢?
select msgid from new_name where new_name in (select new_name from items where old_name = ?) -
@a_horse_with_no_name new_name 是第二个查询中的实际表名。我想到了您的建议,但没想到我实际上可以将这 2 条 sql 语句放入一个查询中。