1 / 34

JDBC

JDBC. Java DataBase Connectivity SQL i Java Læreboken: 8.5, s. 393-397 Forelesning i TDT4145, 14. april 2005 Av Gisle Grimen. JDBCs treenighet. Databaseoppkobling – java.sql.Connection Utføre SQL – java.sql.Statement Behandle resultater – java.sql.ResultSet

Download Presentation

JDBC

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JDBC • Java DataBase Connectivity • SQL i Java • Læreboken: 8.5, s. 393-397 Forelesning i TDT4145, 14. april 2005 Av Gisle Grimen

  2. JDBCs treenighet • Databaseoppkobling – java.sql.Connection • Utføre SQL – java.sql.Statement • Behandle resultater – java.sql.ResultSet • (+ feilbehandling – java.sql.SQLException)

  3. Eksempel • Koble opp • Legge in tabeller • Legge in poster • Søke • Koble ned

  4. Databaseoppkobling • Driver • Class.forName(”oracle.jdbc.driver.OracleDriver”); • DriverManager • Holder styr på drivere • Lager Connection-objekt:

  5. Databaseoppkobling • Connection • Connection con = DriverManager.getConnection(url,”bruker”,”pass”); • url: database- og driveravhengig • F.eks. ”jdbc:oracle:thin:@elefant.idi.ntnu.no:” +”1521:ELEFANT”

  6. Connection: autoCommit • con.setAutoCommit(boolean) • Default: true • Committer etter hver executeUpdate() • Hvis false: Transaksjonsstyring • con.commit() • con.rollback()

  7. Connection – flere metoder • createStatement(), prepareStatement(sql) • Lager Statement-objekt • close() • Lukker databaseoppkoblingen

  8. Koble opp public Connection connect() throws SQLException, ClassNotFoundException{ Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection(“jdbc:oracle:thin:@"+ "elefant.idi.ntnu.no:1521:ELEFANT", "elefant", "test"); return con; }

  9. Koble ned public void disconnect(Connection con)throws SQLException{ con.close(); }

  10. Eksempel tabell

  11. Statements • To typer statements • Statement • Utføre SQL direkte • PreparedStatememt • Prekompilere SQL

  12. Statement • Sender SQL-setninger til databasen • Lages ved hjelp av Connection objektet: • Statement stmt = con.createStatement();

  13. Statements ”tre metoder” • executeUpdate(String sql) • Resultat, antall rader påvirket (int) • executeQuery(String sql) • Resultat, svar på spørring (ResultSet) • close()

  14. Statement: executeUpdate(sql) • Alle SQL-setninger unntatt SELECT • Eks. stmt.executeUpdate(”insert into post ” +”values (5253,’Sandsli’)”; • Merk: • Enkeltfnutter rundt SQL-stringer (’Sandsli’) • Ikke semikolon til slutt i SQL-setningen • Returverdi: antall rader påvirket (int)

  15. Statement: executeQuery(sql) • SELECT-setninger • Eks.ResultSet rs = stmt.executeQuery(”select * from post”); • Returnerer ResultSet

  16. Statement: close() • Et Statement kan utføre mange SQL-setninger • Bruk close() når du er ferdig • Deallokerer ressurser • Viktig hvis man lager mange Statementer – man kan gå tom. • NB: Husk å lukke statmements, ellers kan feilmeldinger som ”maximum open cursors exceeded” oppstå

  17. PreparedStatement • Sender også SQL-setninger til databasen • Prekompilering” av SQL-setning • Effektivt ved gjentakelse, ryddigere kode(?) • Lages ved hjelp av Connection objektet: PreparedStatement stmt = con.prepareStatement(sql);

  18. PreparedStatement ”tre metoder” • executeUpdate() • Resultat, antall rader påvirket (int) • executeQuery() • Resultat, svar på spørring (ResultSet) • close() • SQLen lages i konstruktøren, metoder uten paramter

  19. PreparedStatement; eksemepl • PreparedStatement ps = con.prepareStatement(”insert into post ” + ”values (?,?)”); • ps.setInt(1,5253); • ps.setString(2,”Sandsli”); • ps.executeUpdate();

  20. ResultSet • Innholder resultat av en SQL spørre setning. • Resultat av en: • executeQuery() • executeQuery(sql)

  21. ResultSet • Tabell med resultat og ”peker”

  22. ResultSet: next() • Flytter pekeren til neste rad (hvis det er noen) • Returnerer boolean – true hvis raden finnes

  23. ResultSet: next() • Flytter pekeren til neste rad (hvis det er noen) • Returnerer boolean – true hvis raden finnes

  24. ResultSet: next() • Flytter pekeren til neste rad (hvis det er noen) • Returnerer boolean – true hvis raden finnes

  25. ResultSet: getInt(), getString()... • getXXX()-metoder for de fleste primitive typer + String, Date m.fl. • Parameter: enten kolonnenummer (start fra 1) eller kolonnenavn

  26. ResultSet: getXXX()-eksempler • rs.getInt(1)  5014 • rs.getString(2)  ”Bergen” • rs.getString(”Post_nr”)  ”5014”

  27. ResultSet: null • rs.getInt(1)  0 • rs.getInt(2)  0

  28. ResultSet: wasNull() • rs.getInt(1)  0 rs.wasNull()  false • rs.getInt(2)  0 rs.wasNull()  true

  29. ResultSet: close() • Frigjør ressurser • Meget viktig

  30. Legge in tabeller public void createTables(Connection con)throws SQLException{ Statement s = con.createStatement(); s.executeUpdate("CREATE TABLE POST" + "(Post_NR NUMBER(4),"+ "Post_Sted VARCHAR2(20),"+ "PRIMARY KEY(POST_NR))"); s.close(); }

  31. Legge in poster public void insertPosts(Connection con)throws SQLException{Statement s = con.createStatement(); s.executeUpdate("insert into post values "+ "( 5014, 'Bergen')"); s.executeUpdate("insert into post values "+ "( 5252, 'Soreidgrend')"); s.executeUpdate("insert into post values "+ "( 5253, 'Sandsli')"); s.close(); }

  32. Søk public void searchForPeopleGivenPostSted(String postSted, Connection con)throws SQLException{ PreparedStatement ps = con.prepareStatement( "select P_NR, NAVN from Person,Post where "+ "Person.Post_NR = POST.Post_NR AND Post_Sted=?"); ps.setString(1, postSted); ResultSet rs = ps.executeQuery(); while (rs.next()) { System.out.println("P_NR: ”+rs.getInt(1)+"\t Navn: "+rs.getString(2)); } rs.close(); ps.close(); }

  33. Søk public void searchStatement(String postSted,Connection con) throws SQLException{Statement s = con.createStatement(); ResultSet rs = s.executeQuery("select P_NR,"+ " NAVN from Person,Post where "+ "Person.Post_NR = POST.Post_NR "+ "AND Post_Sted='"+postSted+"'"); while (rs.next()) { System.out.println("P_NR: "+rs.getInt(1)+"\t Navn: "+rs.getString(2)); } rs.close(); s.close(); }

  34. Hjelp • http://java.sun.com/j2se/1.4.1/docs/api/ • http://www.idi.ntnu.no/~sif8020/oppskrifter/jdbc.html • http://java.sun.com/docs/books/tutorial/jdbc/ • http://developer.java.sun.com/developer/Books/JDBCTutorial/ • Oracle JDBC kan bli funnet på: • http://www.idi.ntnu.no/emner/tdt4145/programvare/ojdbc14.jar

More Related