2009-05-14 11 views
1
USER = "user" 
PASS = "pass" 

QUERY = "SELECT c1, c2, c3, c4, c5, c6, c7 FROM table" 

SQLITE_SCHEMA = 'c1, c2, c3, c4, c5, c6, c7' 

sqlite_db = SQLite3::Database.new('sqlite.db') 
odbc_db = DBI.connect('DBI:ODBC:database', USER, PASS) 
odbc_db.select_all(QUERY) do |entry| 
    sqlite_db.execute "insert into smnt (" + SQLITE_SCHEMA + ") values ('" + entry[0].to_s + "','" + 
                      entry[1].to_s + "','" + 
                      entry[2].to_s + "','" + 
                      entry[3].to_s + "','" + 
                      entry[4].to_s + "','" + 
                      entry[5].to_s + "','" + 
                      entry[6].to_s + "')" 
    end 

Es muss ein sauberer Weg, um die db.Execute Zeichenfolge zu schreiben, oder bin ich zu pingelig?Eine Frage des Rubin-Stils von einem Neuling

Antwort

4

Neben der Schleife in hypoxide Antwort, sollten Sie auch variable Interpolation:

sqlite_db.execute "insert into smnt (#{SQLITE_SCHEMA}) 
    values (#{entry.map {|e| "'#{e.to_s}'"}.join(',')})" 

Beachten Sie, dass Ihre entry Elemente waren alle hygienisiert werden besser, oder für eine Welt von Schmerz, Bobby Tables Art zubereitet werden.

+2

verdammt ... mich schlagen, um es –

+1

:) * lol * ich Nägel mit Köpfen ging und vermied überhaupt keinen Gebrauch von +, aber das ist nur meine Vorliebe. :-P –

+1

Ich mag das wirklich. Ich muss mich selbst trainieren, so zu denken. – rubynewbie

1

Sie könnten eine for-Schleife für die Zeichenfolge schreiben ... Sie würden ein paar Zeilen Code speichern.

1

Wie wäre:

" VALUES (#{entry.collect{|e|"'"+e.to_s+"'"}.join(",")})"