我正在使用java创建一个基本的SQL编辑器,我想知道如何创建一个2d数组,将每个"Persons"数据存储在一个数组列表中。我有一个名为联系人详细信息的数据库,它存储每个人的联系ID,全名,电子邮件,电话号码等,只是为了看看是否有人可以在评论中删除一些代码,以了解我该如何做到这一点?这是我用来从数据库中检索的当前代码:
public void SELECTALL() {
db.Connnect();
Connection conn = db.getConnection();
if (conn!=null) {
try {
String SQL = "SELECT * FROM (?);";
PreparedStatement stmt = conn.prepareStatement(SQL);
//Gathering which table the user wants to view
Scanner s = new Scanner(System.in);
System.out.println("Enter name of table");
String TABLENAME = s.nextLine();
//Inserting table name into SQL command
stmt.setString(0, TABLENAME);
//Executing query
ResultSet rs = stmt.executeQuery();
//Displating data to user
while (rs.next()) {
//DATA GETS STORED IN 2D ARRAY SO EACH PERSON GETS OWN PERSONAL INTEGER TO BE CALLED BY E.G soandso.get(4)
}
} catch (SQLException err) {
System.err.println(err);
}
}
}
谢谢大家。 任何反馈也很棒。
列表和人员类
我绝对建议创建一个Person
类来存储与 Person 的一个实例相关的所有数据。此类将包括该人的联系人 ID、全名、电子邮件、电话号码等。像这样的东西会起作用,尽管您希望将字段设为私有并最终为它们制作 getter/setter:
public class Person {
public int id;
public String name;
public String email;
public String phoneNumber;
}
然后,在获取结果时,您可以创建Person
类的新实例,并将所有人员详细信息存储在那里。然后,您可以将所有Person
实例存储在一个List<Person>
中,如下所示:
public void SELECTALL() {
List<Person> persons = new ArrayList<Person>();
...
while (rs.next()) {
Person person = new Person();
person.id = rs.getInt("idColumn");
person.name = rs.getString("nameColumn");
...
persons.add(person);
}
}
然后,如果需要,您可以最终返回整个List<Person>
。要在填写List<Person>
后获取特定的Person
实例,您可以使用 Streams 筛选该列表,如下所示:
Person john = persons.stream()
.filter(person -> person.name.equals("John"))
.findFirst()
.orElse(null);
这将获得人员列表中第一个名称与"John"完全相同的Person
实例。如果没有具有该名称的人存在,它将返回 null。
2D 数组列表
但是如果你真的坚持使用2D ArrayList,你可以做这样的事情:
public void SELECTALL() {
List<List<String>> persons = new ArrayList<List<String>>();
...
while (rs.next()) {
List<String> personData = new ArrayList<String>();
personData.add(rs.getString("idColumn"));
personData.add(rs.getString("nameColumn"));
...
persons.add(personData);
}
}
哈希地图
但是,如果你这样做,我建议尝试HashMap
,让人 Id 成为HashMap
的"钥匙",就像这样:
public void SELECTALL() {
Map<Integer, List<String>> persons = new HashMap<Integer, List<String>>();
...
while (rs.next()) {
List<String> personData = new ArrayList<String>();
int key = rs.getInt("idColumn");
personData.add(rs.getString("nameColumn"));
...
persons.put(key, personData);
}
}
然后,您可以通过执行以下操作来获取人员数据的List<String>
:
List<String> person = persons.get(key);