khryz88
khryz88

Reputation: 13

How to deal with the ResultSet in Java and convert it to an Array of int?

I'm really perplexed as to why there's only one value being returned by this set of codes. What I'm trying to do here is to query all the *sense_num* (not primary key) that has the primary key as the parameter. The result should contain 2 or more sense_num and so in every sense_num result, I try to store each element in an int[] array and return the int array respectively. For e.g the result from this query are sense_num 172 & 173. both of them should already be in the array but when i tested the calling function, what it has received is the last value, 173.

I hope you can help me with this. Thanks!

public int[] getAllSenseID(int primeID) {

    int[] objects = {};
    String qry = "SELECT sense_num FROM cebuano_sense WHERE id_num = '" + primeID + "'";
    try {
        DatabaseConn db = new DatabaseConn("cebuano_wsd");
        db.connect();
        db.query(qry);
        ResultSet result = db.getResult();
        ResultSetMetaData data = db.getData();


        if (result.next() == true) {

            java.sql.ResultSetMetaData rsmd = result.getMetaData();
            int colNo = rsmd.getColumnCount();
            result.beforeFirst();
            int row = 0;
            System.out.println(colNo + "::> Column Number");

            while (result.next()) {
                objects = new int[colNo + 1];

                int i = 0;

// object[0] has all the values when I tested it and that's why it only accepts the last //one... how do get or receive both values?

                while (i < colNo) {
                    objects[i] = result.getInt(colNo);

                    //print to test
                    System.out.println(objects.length + " >> Count  of Objects");
                    System.out.println(i + " :: " + objects[i] + " >> result");
                    i++;
                }

            }
        }
    } catch (SQLException ex) {
        ex.printStackTrace();
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    }

    return objects;
}

Upvotes: 1

Views: 1753

Answers (3)

Isaac Truett
Isaac Truett

Reputation: 8874

It looks like you're expecting objects[0] to be the first row in your ResultSet, objects[1] to be the second row, etc. What you're actually doing is putting the first column in objects[0], the second column in objects[1], etc. and every row overwrites the previous one. Since your query only has one column, you don't really need the inner loop. Just loop over the ResultSet and put sense_num from each row into the next available element in objects[]. Then objects[] will contain what I think you are expecting.

Upvotes: 0

Manidip Sengupta
Manidip Sengupta

Reputation: 3611

Your qry selects one column from the table, so colNo is always 1.

So I think your objects array needs to correspond to row count, and in the results.next loop, you fill out the array. Hope that helps, - MS.

Upvotes: 0

Peter Lawrey
Peter Lawrey

Reputation: 533670

Your line

objects = new int[colNo + 1];

replaces any previous row you have, so you only have the last row you got.

You could have an List<int[]> which you add to for each row.

Upvotes: 2

Related Questions