我将如何从 2 个不同的数据库加入数据并将数据插入到 VO

How would I join and insert data to the VO from 2 different database

之前我只有 1 个 SQL 查询,其中所有列字段仅位于 1 个数据库中。但现在我需要将 StudentAccess 移动到另一个数据库。我需要加入两个数据库记录并将其插入到我的 VO 对象中。

数据库 1: Select STUD_ID_NR, STUD_NM, STUD_LOG_ID 来自学生

数据库 2: SELECT STUD_LOG_ID、STUD_LOG_ID 来自 StudentAccess 其中 logFlag= true

STUD_LOG_ID 将是两个 table 加入他们的标识符。

这是我当前的代码,之前只存储来自 1 个数据库的数据

Class 1:

try
{
    conn = getDataSource().getConnection();
    stmt = conn.createStatement()
    rs = stmt.executeQuery(StudentQuery);
    

    List<StudentVO> listOfStudents = new ArrayList<StudentVO>;
    
    if(null != rs)
     {
      while(rsv.next())
       {
         StudentVO validStudent = StudentsMapper.mapToVo(rs.getString(STUD_ID_NR), 
         rs.getString(STUD_NM), rs.getString(STUD_LOG_ID));

         if(validStudents != null)
          {
            listOfStudents.add(validstudent);
          }
      
    StudentStore.setAllStudents(listOfStudents);
}

如果数据来自两个数据库。如果他们的 STUD_LOG_ID 匹配,我如何仍然将学生的 STUD_LOG_IN_ID 插入到 VO 中?

假设我们可以在 class.

中调用两个数据库
try
{
    conn = getDataSource().getConnection();
    stmt = conn.createStatement()
    rs = stmt.executeQuery(StudentQuery);
    rs2 = stmt.executeQuery(StudentAccessQuery);

    List<StudentVO> listOfStudents = new ArrayList<StudentVO>;
    
            if(null != rs2)
             {
              while(rsv.next())
               {
               }
             }
    
            if(null != rs)
             {
              while(rsv.next())
               {
               }
        
            StudentStore.setAllStudents(listOfStudents);
    }

我很困惑我该怎么做。我应该先在数组列表中添加两条记录然后使用包含吗?

我的语音包含 STUD_ID_NR,STUD_NM,STUD_LOG_IN_ID

建议

我不知道您使用的是哪个 SQL,但会建议您使用单个查询本身来生成所需的结果集。处理数据会容易很多。

Connection 到 DB 总是很昂贵,尽量减少连接数。这是很好的练习。

备选

在 java 中,您的方法是正确的,但是根据我对 post 的理解,contains 可能不起作用,因为 2 个结果集可能具有不同的值。 如果不是这种情况,您可以使用 contains.

下面是一个不使用 contains 的例子。这里我假设第二个结果集可能有多个值,每个 LOGIN_ID

 List<StudentVO> listFromDb1 = new ArrayList<StudentVO>;
 List<StudentVO> listFromDb2 = new ArrayList<StudentVO>;
    
if(rs2 != null){
    while(rsv.next())
    {
        // listFromDb1
        //add result set from db1
    }
}

if(rs!=null){
    while(rsv.next())
    {
        // listFromDb2
        //add result set from db2
    }
}

List<StudentVO> finalList = new ArrayList<StudentVO>();

// considering listFromDb1 is your main dataset
for(StudentVO student : listFromDb1){
     //boolean true =listFromDb2.stream().filter(s-> s.equals(student.getSTUD_LOG_IN_ID())).findAny().isPresent();
     for(StudentVO student2  : listFromDb2){
         if(student.getSTUD_LOG_IN_ID().equals(student2.getSTUD_LOG_IN_ID())){
             
            //set the student values in new object and then add it to final list
             StudentVO tempStu= new StudentVO(student,student2.getSTUD_LOG_IN_ID()); //it is just an example.
             
             finalList.add(tempStu); 
            
             //use break here if 2nd resultset doesnot hold multiple log in id for same student;
         }
     }
}

StudentStore.setAllStudents(finalList);