Domanda

Voglio sapere se è una buona idea catturare un'eccezione basata su un indice univoco di sql in java.

Voglio catturare un'eccezione come 'voce duplicata per 1-0' se così allora gestire l'eccezione altrimenti inserirla correttamente nella tabella del database?

È stato utile?

Soluzione

Dico che non lo fai, per due motivi:

  • i messaggi di errore sono un po 'poco chiari: ERRORE 1062 (23000): voce duplicata' xxx 'per la chiave 1 . Sei sempre sicuro al 100% quale chiave è 1?
  • ti blocca in uno specifico fornitore di database

Trovo più semplice in modo transazionale :

  • verifica l'esistenza della riga;
  • genera un'eccezione se la riga esiste già;
  • inserisci la nuova riga.

Problemi di prestazioni :

Dico misura due volte, taglia una volta . Profili l'uso per il tuo caso d'uso specifico. In cima alla mia testa direi che le prestazioni non saranno un problema tranne che per gli scenari di utilizzo di db pesanti.

Il motivo è che una volta eseguito un SELECT su quella riga specifica, i suoi dati verranno inseriti nella cache del database e immediatamente utilizzati per il controllo di inserimento effettuato sull'indice per l'istruzione INSERT . Inoltre, tenendo presente che questo accesso è supportato da un indice porta alla conclusione che le prestazioni non saranno un problema.

Ma, come sempre, misura.

Altri suggerimenti

Non vedo perché no. È probabilmente più efficiente dell'esecuzione di una query prima dell'inserimento. Tuttavia, è probabilmente meglio rilevare il codice di errore dell'eccezione piuttosto che riconoscere il messaggio di errore.

È possibile utilizzare il comando REPLACE. Inserisce / aggiorna in base all'esistenza del record. Ed è anche atomico mentre query, quindi inserire / aggiornare non lo è. Dipende da cosa vuoi fare se rilevi la violazione chiave?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top