sql >> Databasteknik >  >> RDS >> Oracle

Varför begärde ogiltig konvertering FELKOD:17132?

Oracle JDBC-dokumentationen säger:

Om nyckelkolumner inte uttryckligen anges, kan Oracle JDBC-drivrutiner inte identifiera vilka kolumner som behöver hämtas. När ett kolumnnamn eller kolumnindexmatris används kan Oracle JDBC-drivrutiner identifiera vilka kolumner som innehåller automatiskt genererade nycklar som du vill hämta. Men när Statement.RETURN_GENERATED_KEYS heltalsflagga används, Oracle JDBC-drivrutiner kan inte identifiera dessa kolumner. När heltalsflaggan används för att indikera att automatiskt genererade nycklar ska returneras, visas ROWID pseudo kolumn returneras som nyckel. ROWID kan sedan hämtas från ResultSet objekt och kan användas för att hämta andra kolumner.

Du anger inte kolumnerna (som visas i deras exempelkod) så du hämtar ROWID; försöker få det med getInt() orsakar felet du ser. (Jag ser faktiskt Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004 men jag tror att det beror på en annan drivrutinsversion).

Du måste ange kolumnen som får det automatiskt genererade värdet. Om det heter MEETING_ID då skulle du göra:

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

... passerar arrayen av kolumner - bara en i det här fallet - snarare än RETURN_GENERATED_KEYS-flaggan.

rs.getInt(1) kommer då att hämta det numeriska värdet.




  1. Hur du snabbar upp din SQL-server med hjälp av databasprestandaövervakning

  2. Hur snabbar man på SELECT .. LIKE-frågor i MySQL på flera kolumner?

  3. @@IDENTITY, SCOPE_IDENTITY(), OUTPUT och andra metoder för att hämta senaste identitet

  4. Importera psycopg2-biblioteket har inte laddats:libssl.1.0.0.dylib