我有两个数据库,如果它们匹配,我需要比较每个数据库中的三行,我必须打印该行。
示例:
Database 1:
RuleId Dataset Partition Date
------ ------- -------- ----
1234 ABVD 012145 21/01/2014
1256 ABCD 124565 22/01/2013
4567 FGHJ 0123456 22/02/2013
Database 2:
1234 ABCD 012345 21/01/2014
4567 FGHJ 0123456 22/02/2013
7894 MNBV 0147896 20/01/2014
如果两个数据库中的RuleId,Dataset和Partition相同,我必须在输出中打印这些行。
我的代码如下:
ArrayList<String> rslist = new ArrayList<String>();
ArrayList<String> rs1list = new ArrayList<String>();
int count = 1;
while (rs.next()) {
int i = 1;
count = 1;
while (i < count) {
rslist.add(rs.getString(i++));
}
rslist.add(rs.getString(2) + rs.getString(4) + (rs.getString(5)));
}
int count1 = 1;
while (rs1.next()) {
int i = 1;
count1 = 1;
while (i < count1) {
rs1list.add(rs1.getString(i++));
}
rs1list.add(rs1.getString("RuleId") + rs1.getString("Dataset")
+ rs1.getString("Partition"));
}
for (String s1 : rslist)
for (String s2 : rs1list)
if (s1.equals(s2)) {
}
如果这些行相等,我必须打印所有行值。
答案 0 :(得分:1)
在executeQuery()
方法中,您可以使用以下SQL命令:
select * from db1,db2 where db1.ruleid=db2.ruleid and db1.dataset=db2.dataset and db1.partition=db2.partition;
然后,您可以获得两个数据库中显示的匹配行。
答案 1 :(得分:0)
用于比较而无需在内存中预加载的示例(从头开始):
Connection con1 = DriverManager.getConnection("jdbc:mysql://localhost/db1", "user", "pass");
Connection con2 = DriverManager.getConnection("jdbc:mysql://localhost/db2", "user", "pass");
Statement stmt1 = con1.createStatement();
Statement stmt2 = con2.createStatement();
ResultSet rs1 = stmt1.executeQuery("select * from ... order by ... ");
ResultSet rs2 = stmt2.executeQuery("select * from ... order by ... ");
while(rs1.next() && rs2.next()) {
// compare basically rs1.getObject(i).equals(rs2.getObject(i))
}
或者从db1读取然后从db2检索来自PK的PK。我不知道你的用例...
答案 2 :(得分:0)
ResultSet最终是Object的子类,我们可以直接比较两个或多个对象。 您的问题有点具体:
ResultSet rs=st.executeQuery(sql1);
ResultSet rs1=st.executeQuery(sql2);
其中sql1和sql2是2个语句
while(rs.next() && rs1.next()){
int a=rs.next();
int b=rs1.next();
if(a==b){
System.out.println("Compairing two ResultSets");
}
}
答案 3 :(得分:0)
如果数据量不大,我建议完全加载数据集并在内存中进行比较,如下所示。
定义类以表示实现equals
的记录,该记录提供逐元素地比较字段的逻辑
public class Record {
...
public boolean equals(Object record) {
...
将两个数据集分别加载到Set
(而不是ArrayList
,尽管后者也可以正常工作,如果需要,可以使用LinkedHashSet
并使用set操作来检查存在于两者中的元素,或者如果一个元素是另一个元素的子集等。
其他建议的方法假设形式非常好的集合具有不同的顺序,没有重复,没有中间插入(A,C对A,B,C)等。