#!/usr/local/bin/ruby -w require "dbi" # dynamische Address Klasse # bekommt einen Hash als Argument mit den Spalten Namen als keys # und den Spalten Einträgen als values class Address def initialize(hash) hash.keys.each do |key| type.send(:attr_accessor, key) end hash.each do |key, value| send("#{key}=", value) end end end # Bekommt die Daten für die Datenbank # Jede von DBI unterstützte Datenbank ist verwendbar class AddressDB def initialize(dbd_driver, database, table, user="", password="") @dbd_driver = dbd_driver @database = database @table = table @user = user @password = password @column_names = [] @dbh = DBI.connect("dbi:#{dbd_driver}:#{database}", user, password) @dbh.columns("#{table}").each do |col| #puts col['name'] @column_names << col['name'] end end # liefert für jeden Eintrag ein Address Objekt zurück def each_entry sql = "SELECT * FROM #{@table}" @dbh.execute(sql) do |sth| sth.fetch do |row| r = row.to_h yield Address.new(r) end end end end # Testcode ab = AddressDB.new("Mysql", "abook1", "addresses1", "markus", "eagle") # Einfache Datenausgabe ab.each_entry do |address| print "firstname: ", address.firstname, "\n" print "lastname: ", address.lastname, "\n" print "email: ", address.email, "\n" puts end