我的地图将字符串存储为键,将对象的链接列表存储为值。现在,我需要将此数据存储在数据库表中。 我的地图数据是这样的——
键 : 值
id : [2, 3, 4, 5]
name : [Rohit, Iravati, Uttam, Sushil]
jobrole : [Software Engineer, Software Engineer, Manager, Director]
salary : [100, 100, 100, 100]
我的表结构是 -
[身份证,姓名,工作角色,薪水]
我不明白我应该如何从地图中读取数据以创建下面的给定查询以将此地图数据存储在表中 -
insert into DBROLTA.Employee(id, name, jobrole, salary) values(2, 'Rohit', 'Software Engineer','100');
insert into DBROLTA.Employee(id, name, jobrole, salary) values(3, 'Iravati', 'Software Engineer','100');
insert into DBROLTA.Employee(id, name, jobrole, salary) values(4, 'Uttam', 'Manager','100');
谁能帮帮我。
将键和相应的值数组存储在map中,将键存储为id,将自定义对象存储为值。
其中自定义对象是具有属性 ID、名称、工作角色和薪水的对象。
创建 Map 并将自定义对象存储到 ID.So 您可以轻松检索对象并创建 sql 语句并执行它们。
Map<Interger, CustomObject> = new HashMap<Integer, CustomObject>
对于多个插入查询执行,请使用批量插入和批量执行方法,这是为了避免多次数据库命中。
请参阅:如何从 java 执行多个 SQL 语句以进行批量更新操作。
public static void main(String[] args) {
Map<String, LinkedList<Object>> map = new HashMap<>();
LinkedList<Object> data = new LinkedList<>();
data.add(2);
data.add(3);
map.put("id", data);
data = new LinkedList<>();
data.add("Rohit");
data.add("Iravati");
map.put("name", data);
data = new LinkedList<>();
data.add("SE");
data.add("SSE");
map.put("jobrole", data);
data = new LinkedList<>();
data.add(100);
data.add(200);
map.put("salary", data);
for (int i = 0; i < map.get("id").size(); i++) {
Object id = map.get("id").get(i);
Object name = map.get("name").get(i);
Object jobrole = map.get("jobrole").get(i);
Object salary = map.get("salary").get(i);
// TODO Use above values to create your query.
System.out.println(id + "-" + name + "-" + jobrole + "-" + salary);
}
}
您可以使用 for 循环循环访问所有数据并一次生成一个查询字符串
也许像这样
for(int j = 0; j < mapOfData.get("ID").length(); j++){
strID = mapOfData.get("ID").get(j);
strName = mapOfData.get("Name").get(j);
query = "INSERT INTO TABLE VALUES (" + strID + ", " + strName + ")";
}
你遍历地图的整个长度(假设你的地图中没有缺失的数据(,访问每个链接列表并从那里获取值。
这是一个糟糕的方法,但你现在的数据结构并没有给我留下太多选择。
public static void main(String[] args) {
//GIVEN
Map<String, LinkedList<Object>> data = new HashMap<>();
data.put("id", Stream.of(1, 2, 3)
.collect(Collectors.toCollection(LinkedList::new)));
data.put("name", Stream.of("a", "b", "c")
.collect(Collectors.toCollection(LinkedList::new)));
data.put("jobrole", Stream.of("x", "y", "z")
.collect(Collectors.toCollection(LinkedList::new)));
data.put("salary", Stream.of(10.0, 20.0, 30.0)
.collect(Collectors.toCollection(LinkedList::new)));
//Let's fix your data structure first
Employee[] employeesArr = null;
for (Map.Entry<String, LinkedList<Object>> entry : data.entrySet()) {
int count = 0;
if (employeesArr == null) {
employeesArr = new Employee[entry.getValue().size()];
for (int i = 0; i < employeesArr.length; i++) {
employeesArr[i] = new Employee();
}
}
switch (entry.getKey()) {
case "id":
for (Object o : entry.getValue()) {
employeesArr[count++].setId((Integer) o);
}
break;
case "name":
for (Object o : entry.getValue()) {
employeesArr[count++].setName((String) o);
}
break;
case "jobrole":
for (Object o : entry.getValue()) {
employeesArr[count++].setRole((String) o);
}
break;
case "salary":
for (Object o : entry.getValue()) {
employeesArr[count++].setSalary((Double) o);
}
break;
}
}
//employeesArr is a much better data structure
for (int i = 0; i < employeesArr.length; i++) {
//use PreparedStatement or an ORM
System.out.println("insert into DBROLTA.Employee(id, name, jobrole, salary) values ("
+ employeesArr[i].getId() + ", '"
+ employeesArr[i].getName() + "', '"
+ employeesArr[i].getRole() + "', "
+ employeesArr[i].getSalary()
+ ");");
}
}
员工.java
public class Employee {
private int id;
private String name;
private String role;
private double salary;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
//other getters/setters
}