I am currently learning JDBC for the first time.
For example, if you run a select statement and create an entity class to store the returned values, I would like to ask you a question about how to do it.
Please see the code below first
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import co.jp.******.jdbc.entites.EmployeeBasic;
import co.jp.aaaaaaa.jdbc.entites.EmployeeSkill;
public class AppEntry {
public static void main(String[]args) {
try{
connectionTest();
} catch(ClassNotFoundException | SQLExceptione){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void connectionTest()throws ClassNotFoundException, SQLException {
Connection conn = null;
Class.forName("org.postgresql.Driver");
conn=DriverManager.getConnection("jdbc:postgresql://localhost:5432/test", "postgres", "postgres");
// insertTest(conn);
selectTest(conn);
}
public static List <EmployeeBasic>selectTest(Connection conn)throwsSQLException{
Statement stmt = null;
ResultSetters = null;
stmt = conn.createStatement();
rs = stmt.executeQuery("select\r\n" +
US>"*\r\n" +
"from\r\n" +
"employee_basic\r\n" +
"left join\r\n" +
US>"employee_skill\r\n" +
US>"on\r\n" +
"employee_basic.employee_no=employee_skill.employee_no\r\n";
List<EmployeeBasic>result=new ArrayList<>();
EmployeeBasic preEntity = null;
EmployeeBasicity=null;
while(rs.next()){
if(preEntity==null){
entity=new EmployeeBasic();
entity.employeeNo=rs.getLong("employee_no");
entity.employeeName=rs.getString("employee_name");
result.add(entity);
preEntity=entity;
} else if(preEntity.employeeNo!=rs.getLong("employee_no")){
entity=new EmployeeBasic();
entity.employeeNo=rs.getLong("employee_no");
entity.employeeName=rs.getString("employee_name");
result.add(entity);
preEntity=entity;
}
EmployeeSkill skill=new EmployeeSkill();
skill.skillName=rs.getString("skill_name");
entity.skills.add(skill);
}
return result;
}
}
entity is here
EnThere is also an entity called EntitySkill, but it is omitted because it is only a field variable.
package co.jp.*******
import java.util.ArrayList;
import java.util.List;
public class EmployeeBasic {
public long employeeNo;
public String employeeName;
publicList<EmployeeSkill>skills=new ArrayList<>();
}
SQL is here
create table employee_basic(
employee_no bigint,
employee_name varchar(32),
primary key (employee_no)
)
create table employee_skill(
employee_skill_lnk serial,
employee_no bigint,
skill_name varchar(32),
primary key(employee_skill_lnk)
)
insert into employee_basic values(1, 'user1')
insert into employee_basic values(2, 'user2')
insert into employee_skill(employee_no, skill_name) values(1,'sql')
insert into employee_skill(employee_no, skill_name) values(1, 'java')
insert into employee_skill(employee_no, skill_name) values(1, 'cpp')
insert into employee_skill(employee_no, skill_name) values(1,'c#')
select
*
from
employee_basic
left join
employee_skill
on
employee_basic.employee_no=employee_skill.employee_no
Could you explain the while() part of selectTest(){} of this code?Please explain why you add the first line of the combined table to entity and the else if after that follows.
Thank you for your cooperation!
I'll explain it in pictures.
Based on these DB search results (records),
You are trying to create such a Java object.
Compare the picture with the source code to understand the intent of the source code.
The first if statement determines the first line of the search results, and the second if statement ( else if...
) determines the first record of a different employee (employeeNo
).
By the way, these two conditions are the same, so they can be combined into one.
© 2024 OneMinuteCode. All rights reserved.