Next Previous Contents

16. <5.1>: Databasegrensesnitt: dbi

Men det gjør også at man knytter seg mer fast til typen database som brukes, så det kan være lurt å generalisere litt. Biblioteket dbi er et overbygg som gir et mer generelt grensesnitt til mange databaser i Ruby. Du må fremdeles installere de databasespesifikke bindingene, men i koden du skriver trenger du ikke knytte deg unødig tett til databasetypen.

  1| require 'dbi' 
  2| 
  3| databasenavn = 'kurs'
  4| brukernavn   = 'deltaker'
  5| passord      = 'w3bRg0y1'
  6| server       = 'localhost'
  7| 
  8| DBI.connect("DBI:Mysql:database=#{databasenavn};host=#{server}", 
  9|             brukernavn, passord) do |dbh|
 10| 
 11|   # Et enkelt select-kall hvor hver resultatrad sendes til en block.
 12|   dbh.select_all('select fornavn, etternavn from person') do |rad|
 13|     puts rad.join(', ')
 14|   end  
 15| 
 16|   # Stedfortreder-argumenter (placeholders) i SQL-uttrykk. 
 17|   soek_etternavn = "Nordma%"
 18|   soek_fornavn = "Ol%"
 19|   dbh.select_all('select brukerid, brukernavn, fornavn, etternavn ' +
 20|                  'from person where etternavn like ? and fornavn like ?', 
 21|                  soek_etternavn, soek_fornavn ) do |rad|
 22|     puts rad.join(', ')
 23|   end  
 24| 
 25|   # Hent en liste (Array) med alle e-postadressene.
 26|   liste = dbh.select_all('select * from person').collect{|rad| rad['epost'] }
 27|   puts liste.join(', ')
 28| 
 29| end

Legg merke til at vi her angir blokker til metodekallene. Dette gjør at vi slipper å huske på å løslate ressursene selv; det skjer automatisk når blokken er ferdig utført.

Når man skal gi argumenter inn i SQL-uttrykkene, kan man bruke strenginterpolering eller addere strenger selv. Men stedfortreder-argumenter, som brukt over, er å foretrekke, da det både er ryddigere, bruker mindre minne og lar biblioteket gjøre argument-escaping for deg.


Next Previous Contents