表A
id | salary | company
1 | 500 | 2
2 | 700 | 2
3 | 900 | 3
4 | 1100 | 4
5 | 600 | 5
我想将MySQL插入java数组中。但是,我当前的查询只是将MySQL表的最后一个结果输入到我的database.id [I]数组中,然后为整个数组重新填充从I = 0到I = 10的相同结果。很抱歉缩写代码,但它工作正常,而不是我想要的方式。
理想情况下,我希望我的database.id [I]数组只能从表A id [1]和id [2]引入,因为那是company = 2.感谢您的帮助!
Statement stmt = conn.createStatement();
String query = String.format("select * from table A where company =2");
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
for (int i = 0; i < 10; ++i) {
database.id[i] = rs.getInt("id");
database.salary[i] = rs.getInt("salary");
}}
ID
答案 0 :(得分:0)
如果要将值添加到对象中,例如:
Object user = null;
List<Object> list = null;
if(codigoError == 0 && respuesta.trim().equals("DONE")){
list = new ArrayList<Object>();
rs = (ResultSet) sentencia.getObject(1);
while(rs.next()){
user = new Object();
user.setId(rs.getInt("id"));
user.setSalary(rs.getInt("salary"));
list.add(user);
}
获得价值观:
List<Object> list = dao.getMaleinUsr();
if(list != null && !list.isEmpty()){
for(Object user : list){
log.info("ID::: "+user.getId());
log.info("Salary ::: "+user.getSalary());
}
答案 1 :(得分:0)
您的代码为ResultSet
中每一行的数组长度设置了相同的ResultSet
行。你有太多的循环;您没有包含数组的初始化,但List
可能更好。以下内容适用于您的需求。
Statement stmt = conn.createStatement();
String query = String.format("select * from table A where company =2");
ResultSet rs = stmt.executeQuery(query);
List<Integer> myIds = new ArrayList<>();
List<Integer> mySalaries = new ArrayList<>();
while (rs.next()) {
myIds.add(rs.getInt("id"));
mySalaries.add(rs.getInt("salary"));
}
您将拥有两个包含所需数据的列表ResultSet
。
答案 2 :(得分:0)
此查询的结果集为:
id | salary | company
1 | 500 | 2
2 | 700 | 2
手执行代码,这就是:
while循环获取第一个结果,id = 1。
你的for循环将1写入database.id,将500写入索引1到9的database.salary。注意,因为你预先增加了i,所以索引0保持未分配状态,这不是很好。
while循环获取第二个结果,id = 2。
你的for循环将2写入database.id,将700写入索引1到9的database.salary,覆盖以前的内容。
循环终止,只记录了最终记录。
防止这种情况的最小变化是放弃内部for循环:
Statement stmt = conn.createStatement();
String query = String.format("select * from table A where company =2");
ResultSet rs = stmt.executeQuery(query);
int i = 0;
while (rs.next()) {
database.id[i] = rs.getInt("id");
database.salary[i] = rs.getInt("salary");
i++;
}}
通过此更改,每个值将在两个数组中存储一次,从0开始,并且不会相互覆盖。也就是说,请注意不要超越数组的范围:我个人会使用Collections API(可能是List)。此外,最好使用包含单个值的Record对象列表,而不是具有两个字段列表的Record对象。
Record.java
public class Record {
private int id;
private int salary;
private int company;
public Record (int id, int salary, int company) {
//...set your fields.
}
//setters, getters
}
致电代码:
Statement stmt = conn.createStatement();
String query = String.format("select * from table A where company =2");
ResultSet rs = stmt.executeQuery(query);
List<Record> recordlist = new ArrayList<Record>();
while (rs.next()) {
recordlist.add(new Record(rs.getInt("id"), rs.getInt("salary"), rs.getInt("company");
}}
答案 3 :(得分:0)
好吧我看到你想把它们保存在一个数组中
Statement stmt = conn.createStatement();
String query = String.format("select * from table A where company =2");
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
for (int i = 0; i < 10; ++i) {<--Your for is overriting from 0 to 9 each time rs.next is true, so from 0 to 9 you will have the same value
database.id[i] = rs.getInt("id");
database.salary[i] = rs.getInt("salary");
}}
现在有一个问题,使用数组你必须知道你的响应的大小,以便知道你将在阵列上放多少。
正如vaxquis所说:使用resultSet.last()后跟resultSet.getRow()会给你行数,但这可能不是一个好主意(How do I get the size of a java.sql.ResultSet?)
但为什么不使用List?
看,我们可以这样做:
ResultSet rs = stmt.executeQuery(query);
List<Database> ins = new ArrayList<Database>();
while (rs.next()) {
Databasein = new Database();
in.id= rs.getDouble("id");
in.salary= rs.getDouble("salary");
ins.add(in);
}
System.out.println(ins.size());
因此,您将获得包含所有值的列表,但如果您还想要一个数组,则可以将列表更改为数组,一旦您的列表中包含您的记录,您就可以使用
Database[] bar = ins.toArray(new Database[ins.size()]);
你有;)
希望有所帮助