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.