将MYSQL插入JAVA数组

时间:2017-03-24 17:29:31

标签: java mysql

表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

4 个答案:

答案 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()]);

你有;)

希望有所帮助