2011-05-09 36 views
0

我希望能通過一個表名作爲變量,當我用Ruby和SQLite3創建一個表。SQLite3創建表時使用變量?

這是我到目前爲止有:

$db.execute %q{ 
    CREATE TABLE @tableName (
    id integer primary key, 
    term varchar(100), 
    meaning varchar(100)) 
} 

$ DB定義爲

$db = SQLite3::Database.new("test.db") 
$db.results_as_hash = true 

@tablename是用戶輸入。我可以看到它不喜歡@tableName,但我不知道如何解決這個問題。

回答

1

只需使用普通的字符串插值:

$db.execute %Q{ 
    CREATE TABLE #{@tableName} (
    id integer primary key, 
    term varchar(100), 
    meaning varchar(100)) 
} 

請注意,我打開你的%q{}引用到%Q{}得到插值工作。

+0

非常感謝!我嘗試使用#{@ tableName},但不斷收到錯誤,這使我懷疑#{@ tableName}方法並促使我發佈。感謝您提供%Q {}提示! – Naz 2011-05-10 00:19:55

+0

@Naz:'%q {}'就像單引號,'%Q {'''就像雙引號。 – 2011-05-10 00:51:25

+0

非常感謝這兩個評論 - 它現在肯定更有意義! – Naz 2011-05-10 02:11:21

3

%q是單引號的替代方案,插值在單引號字符串中不起作用。 同樣在紅寶石插值是用#{}完成的,就像在"Welcome #{name}"中一樣。 我會嘗試:

$db.execute <<-SQL 
    CREATE TABLE #{@tableName} (
    id integer primary key, 
    term varchar(100), 
    meaning varchar(100) 
) 
SQL 
+0

謝謝!我應該更多地閱讀.execute,因爲我沒有意識到你可以使用它的格式。 – Naz 2011-05-10 00:23:52