2017-01-02 1 views
1

Я просмотрел этот форум и искал в Интернете решение моей проблемы, но не смог найти что-то, что указывает мне в правильном направлении. Пожалуйста, простите меня, если это дублирование.Получить определенную строку из таблицы доступа

Я работаю над проектом java, где мое приложение взаимодействует с базой данных MS Access 2016. Одна из функций моей программы - запросить db для конкретной записи и отобразить данные этой записи в gui. Вот мой код для извлечения данных:

int i = 0; 
String q = "select * from QueryData where id=123456"; 
try { 
    pstmnt=conn.prepareStatement(q); 
    Object obj ; 
    rs = pstmnt.executeQuery(); 
    while (rs.next()) { 
     obj=rs.getObject(i+1); 
     data.add(obj); //where data is a List object i++; 
    } 
} catch .... 

Проблема в том, я получаю только первое значение в этой записи (первый столбец записи) и имеются в наличии в записи/строке больше данных.

Может ли это быть метод rs.next(), который делает это, и если да, то что я должен использовать, чтобы получить следующее значение в этой конкретной записи?

+0

'OBJ = rs.getObject (я + 1)', который всегда 'OBJ = rs.getObject (1); '. Вы пытаетесь получить каждый первый столбец результата. – AxelH

ответ

2

ResultSet#next() Итерации по строкам в результирующем наборе (который в данном случае является всего лишь одной строкой). Если вы не знаете структуру результирующего набора данных в заранее, вы можете динамически вывести его из ResultSetMetaData объекта:

int i=0; 
String q="select * from QueryData where id=123456"; 
try (PreparedStatement pstmnt = conn.prepareStatement(q); 
    ResultSet rs = pstmnt.executeQuery()) { 

    ResultSetMetaData rsmd = rs.getMetaData(); 

    // Assume it's just one row. 
    // If there's more than one, you need a while loop 
    if (rs.next()) { 
     for (int i = 0; i < rsmd.getColumnCount(); ++i) { 
      data.add(rs.getObject(i + 1)); 
     } 
    } 
} 
+1

Миллион спасибо. – user3452354

Смежные вопросы