Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dlaczego nieprawidłowa konwersja zażądała KODU BŁĘDU:17132?

Dokumentacja Oracle JDBC mówi:

Jeśli kolumny kluczy nie są wyraźnie wskazane, sterowniki Oracle JDBC nie mogą określić, które kolumny należy pobrać. Gdy używana jest nazwa kolumny lub tablica indeksów kolumn, sterowniki Oracle JDBC mogą określić, które kolumny zawierają automatycznie wygenerowane klucze, które chcesz pobrać. Jednak gdy Statement.RETURN_GENERATED_KEYS używana jest flaga liczby całkowitej, sterowniki Oracle JDBC nie mogą zidentyfikować tych kolumn. Gdy flaga liczby całkowitej jest używana do wskazania, że ​​mają zostać zwrócone automatycznie wygenerowane klucze, ROWID pseudokolumna jest zwracana jako klucz. ROWID można następnie pobrać z ResultSet obiekt i może być używany do pobierania innych kolumn.

Nie określasz kolumn (jak pokazano w ich przykładowym kodzie), więc pobierasz ROWID; próbując to uzyskać za pomocą getInt() powoduje błąd, który widzisz. (Właściwie widzę Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004 ale myślę, że to zależy od innej wersji sterownika).

Musisz określić kolumnę, która otrzyma automatycznie wygenerowaną wartość. Jeśli nazywa się MEETING_ID wtedy byś zrobił:

    String returnCols[] = { "MEETING_ID" };
    preparedStatement = dbConnection.prepareStatement(insertTableSQL, returnCols);

... przekazując tablicę kolumn - w tym przypadku tylko jedną - zamiast flagi RETURN_GENERATED_KEYS.

rs.getInt(1) będzie wtedy pobierać tę wartość liczbową.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobierz wartości zwracane z tablicy pl/sql w java

  2. Czy można wyprowadzić instrukcję SELECT z bloku PL/SQL?

  3. Jak przetestować procedurę składowaną Oracle z typem zwrotu RefCursor?

  4. Dlaczego zmienna oracle plsql varchar2 wymaga rozmiaru, a parametr nie?

  5. Jak używać stałej pakietu w instrukcji SQL SELECT?