2010-04-08 15 views
5

Una domanda semplice: qual è il modo più efficiente per accedere a un db in Java/JDBC? Sono uno sviluppatore web e mi piacerebbe scrivere un codice riutilizzabile e scalabile.
Ciò che è interessante per me è l'uso di strumenti come il ResultSupport: è troppo costoso in termini di utilizzo delle risorse?
Cosa puoi suggerire?Strategia Java efficace per accedere a un DB

risposta

5

Non solo specifica, roba SQL appena generale JDBC

  1. Se si deve eseguire nuovamente una query più volte, utilizzare PreparedStatement. Utilizzare la stored procedure se disponibile. Questo ovviamente non è portatile quindi YMMV.

  2. Chiudere sempre ResultSet o Statement se non lo si utilizza. La chiusura di una dichiarazione chiuderà automaticamente tutti i ResultSet associati all'istruzione. Ancora è una buona abitudine chiudere il ResultSet.

  3. Provare a limitare ciò che può essere richiesto ad esempio. seleziona * dagli ordini in cui order_date tra XXX e yyy. In MySQL la query può essere una scansione completa della tabella o un 'intervallo' in base alla quantità di dati restituiti. Quindi, decidendo un modo "flessibile", si desidera che le query siano

  4. Se si utilizza MySQL, utilizzare spiegare per ottimizzare la query. Se si utilizza JPA, non è possibile visualizzare l'SQL generato. (Questo non è strettamente JDBC) Si potrebbe voler abilitare la registrazione sul manager ORM per visualizzare l'istruzione SQL utilizzata. Quindi usa spiegare per ottimizzarlo.Si consiglia di utilizzare @NamedNativeQuery se ORM genera una query realmente contorta

  5. Se il driver JDBC supporta l'aggiornamento in batch, utilizzarlo. Gli aggiornamenti batch sono supportati in PreparedStatement e ResultSet.

  6. È inoltre possibile controllare il commit. Buona idea di spegnerlo se stai eseguendo molti aggiornamenti. Il call commit() te stesso.

-1

Penso che il modo più semplice e più comune sia utilizzare Spring e il loro JDBCTemplate.

L'approccio migliore dipende probabilmente dallo stack che si sta utilizzando per creare la propria app Web. Se stai ripartendo da zero, allora la primavera è un buon modo per andare.

+0

E per la scalabilità, utilizzare un 'DataSource pool' cercato da JNDI. – gustafc

0

È molto importante utilizzare sempre un DataSource pool di connessioni come c3p0.

0

C'è un progetto che mappa oggetti java in database mysql. Azirt.

0

Usa pool di connessioni (o l'uno dal contenitore o un pool di connessioni standalone come c3p0 o DBCP) e qualcosa come DBUtils o Primavera di JdbcTemplate.

1

La migliore risposta a questa semplice domanda è: "dipende".

Esistono molte API che è possibile utilizzare per l'accesso al database. Quasi tutti useranno l'API JDBC come mezzo per comunicare con il database. Quindi, in teoria, niente può battere JDBC di basso livello (proprio come il codice macchina è in teoria sempre più veloce dei linguaggi di programmazione di livello superiore).

Ma come ti piace anche scrivere codice riusabile, ti suggerisco di guardare JPA. È lo lo standard Java per la persistenza degli oggetti nei database relazionali. Le sue prestazioni sono piuttosto buone ed è molto portabile.

Poiché JPA è solo una specifica, è possibile scegliere la propria implementazione: Hibernate, OpenJPA o qualsiasi server Java EE compatibile.

Problemi correlati