Как я могу напечатать результаты запроса SQL в Java в отдельные поля JTextFields для каждого столбца? - PullRequest
0 голосов
/ 02 декабря 2011

Я написал Java-программу, которая сможет добавлять клиентов в базу данных, а затем искать их по имени пользователя или customer_id.

Я могу добавлять пользователей в базу данных без проблем.Кроме того, я могу выбрать пользователя по имени пользователя или customer_id и распечатать информацию о пользователе в JTextArea для просмотра.Однако я хотел бы напечатать информацию о пользователях из каждого конкретного столбца в их строке базы данных в соответствующий JTextField в моей форме.Я думаю, что для этого мне нужно использовать массив, но пока я не добился успеха.

Код, который у меня есть на данный момент для выбора данных, выглядит следующим образом:

public String selectCustomer() throws ClassNotFoundException, SQLException{
    String result = "";
    String strSQL = "SELECT * FROM customer WHERE username = '" + this.getUsername() + "'"; 
    DataAccess DA = new DataAccess();
    ResultSet rs;
    try{
        rs = DA.getResultSet(strSQL);
        ResultSetMetaData metaData = rs.getMetaData();
        int columns=metaData.getColumnCount();
        while(rs.next()){//reading one record
            for(int i=1;i<=columns;++i) {//this reads column by column
                result+="<"+metaData.getColumnName(i)+">";
                result+=rs.getString(i);
                result+="</"+metaData.getColumnName(i)+">\n";
            }//closes for loop
        }//closes while loop
    }//closes try       
    catch(SQLException sqle){sqle.printStackTrace();}   
    catch(Exception e){e.printStackTrace();}
    return result;
}

Теперь мне нужно изменить этот код, чтобы поместить результаты моего столбца в массив, и тогда я смогу просто извлечь данные из массива, правильно?Я мог бы быть полностью от моего рокера здесь.Я не знаю.D:

Буду признателен за любой совет.

Спасибо!

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

Может быть, что-то подобное может помочь, вы можете создать оператор и соединение в качестве переменной экземпляра, чтобы вы могли регулярно проверять, открыта она или нет. Вы должны использовать многомерный массив, если хотите вернуть как массив

 public ArrayList<ArrayList<String>> getQueryResult(String query){

            ArrayList<ArrayList<String>> feedback = new ArrayList<ArrayList<String>>();
            ArrayList<String> feed = null;

            try {
                ResultSet rs = stm.executeQuery(query);

                ResultSetMetaData rsm = rs.getMetaData();
                    feed = new ArrayList<String>();

                    for(int y = 1;y<rsm.getColumnCount();y++){

                        feed.add(rsm.getColumnName(y));
                    }
                    feedback.add(feed);

                while(rs.next()){
                    feed = new ArrayList<String>();
                for(int i=1;i<=rsm.getColumnCount();i++){

                        feed.add(rs.getString(i));
                }
                feedback.add(feed);
            }



            } catch (SQLException e) {
                //handler
            }
            return feedback;

        }
1 голос
/ 02 декабря 2011

Конечно, вы можете получить значения из ResultSet, используя getString (и другие методы getXXX), а затем использовать setText, чтобы поместить значения в текстовое поле.

Этот учебник может помочь: http://docs.oracle.com/javase/tutorial/jdbc/basics/retrieving.html

PS Я забыл сказать, что вы можете получить значения по имени столбца, а не по индексу столбца, если хотите - это немного медленнее, но облегчает написание и сопровождение кода.

НТН

...