java + JDBC

0

cześć.
Piszę aplikację, która łączy się z bazą danych(w moim przypadku z bazą Oracla) zapisuje do niej dane, a póżniej odczytuje. Stworzyłem tablicę z dwoma kolumnami typu(varchar2) jedną o dlugości 400 bo są to bardzo dlugie stringi, drugą 100. Zapis do bazy nie nastręcza problemów, gorzej jest z odczytem.
Napisałem taką funkcję:

protected String[] readAskAndAns(String nazTablicy) {
String tabPytIOdp[] = new String[2];
try{
String query = "SELECT PYTANIE, ODPOWIEDZ FROM " + nazTablicy;
ResultSet rs = state.executeQuery(query);
tabPytIOdp[0] = rs.getString("PYTANIE");
tabPytIOdp[1] = rs.getString("ODPOWIEDZ");
}catch(SQLException e) {e.printStackTrace();}

return tabPytIOdp;
}

Teraz gdy wysołuję tą funkcję w innym fragmecie kodu to wyświetla mi się taki błąd:

com.inet.ora.ab: [OraDriver] Not on a valid row.
at com.inet.ora.am.a(Unknown Source)
at com.inet.ora.am.a(Unknown Source)
at com.inet.ora.am.a(Unknown Source)
at com.inet.ora.k.d(Unknown Source)
at com.inet.ora.k.getBytes(Unknown Source)
at com.inet.ora.k.getString(Unknown Source)
at com.inet.ora.k.getString(Unknown Source)
at Baza.readAskAndAns(Baza.java:109).

czy może mi ktoś powiedzieć o co chodzi z tym błędem? czy może to jest niekompatybilność typów między Oracle, a javą.
Proszę o pomoc.

0

Not on a valid row - czyli pracujesz na złym wierszu. Dzieje się tak, gdyż na samym początku ResultSet nie wskazuje na 1 wiersz wyniku. Jeśli chcemy pobrać wszystkie wiersze piszemy:

 while (rs.next()) {
    String s = rs.getString(1);
    ...
}

rs.next() powoduje przełączenie na kolejny wiersz. Oto rozwiązanie:

if (rs.next()) {
    tabPytIOdp[0] = rs.getString("PYTANIE");
    tabPytIOdp[1] = rs.getString("ODPOWIEDZ");
} else {
    tabPytIOdp[0] = "";
    tabPytIOdp[1] = "";
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1