Secondo la documentazione java di PreparedStatement.setNull: "Nota: È necessario specificare il parametro di tipo SQL ". Qual è la ragione per cui il metodo richiede il tipo SQL della colonna ?
Per la massima compatibilità; secondo le specifiche, ci sono alcuni database che non consentono l'invio di NULL non tipizzato all'origine dati sottostante.
ho notato che passando java.sql.Types.VARCHAR funziona anche per colonne non varchar. Esistono scenari in cui VARCHAR non sarà adatto a (determinati tipi di colonna o determinati provider DB)?
Non penso che quel tipo di comportamento sia realmente parte delle specifiche o se lo è, allora sono sicuro che c'è una sorta di coercizione implicita che si sta verificando. In ogni caso, fare affidamento su un tipo di comportamento che potrebbe interrompersi quando il datastore sottostante cambia non è raccomandato. Perché non specificare solo il tipo corretto?
fonte
2010-11-22 08:35:34
1. Io ancora non capisco perché devo dichiarare il tipo. Per quanto ne so il comando UPDATE con SET MY_COLUMN = NULL funzionerà su ogni tipo di colonna, quindi perché non è abbastanza? – MosheElisha
2. Ho un metodo che ottiene una stringa SQL e una collezione
@user: Riguardo a 1; Come ho già detto, JDBC è un tentativo di standardizzare l'interazione con un database, ma ogni implementazione di database là fuori ha il suo modo di fare le cose. Ad esempio, ho sentito che Oracle si lamenta se non viene fornito un tipo corretto quando si imposta NULL. Quindi JDBC richiede di specificare il tipo, se l'implementazione JDBC sottostante lo passa al database è un'altra cosa. Non può essere aiutato se un particolare protocollo del protocollo del database decide che i tipi devono essere passati quando si impostano i valori NULL, quindi non c'è motivo di ragionare su questo. –