我将如何从 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);
之前我只有 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);