2015-06-19 65 views
1

我有一個麻煩,插入數據到一個ID爲自動增量的sqlite3數據庫。以下是我迄今爲止嘗試:ruby​​ sqlite3 insert with autoincrement

begin 
    db = SQLite3::Database.open db_name 
    db.execute "CREATE TABLE IF NOT EXISTS Audit(
     id INTEGER PRIMARY KEY AUTOINCREMENT, 
     module TEXT, 
     hostname TEXT, 
     criticity TEXT, 
     raw_data TEXT 
    );" 
rescue SQLite3::Exception => e 
    puts e.backtrace 
ensure 
    db.close if db 
end 

我插入數據是這樣的:

db.execute("INSERT INTO Audit VALUES (module,hostname,criticity,raw_data)", 
    check, 
    hostname, 
    raw_data, 
    criticity 
) 

以下是錯誤:

#<SQLite3::SQLException: table Audit has 5 columns but 4 values were supplied> 

我不知道如何提供id值,因爲它應該是自動遞增的

回答

2

這是一個奇怪的錯誤,我得到SQLite3::SQLException: no such column: module 我想你可以做到這一點的格式嘗試錯誤的格式,

db.execute("INSERT INTO Audit (module,hostname,criticity,raw_data) VALUES (?,?,?,?) ", 'module', 'host', 'criticity', "\x01\x00\x00\x00\x01") 

結果:

sqlite> SELECT * FROM Audit; 
1|module|host|criticity|☺ 
0

正如猜測嘗試插入空值。

db.execute("INSERT INTO Audit VALUES (id, module,hostname,criticity,raw_data)", 
    null, 
    check, 
    hostname, 
    raw_data, 
    criticity 
) 

也期待在https://www.sqlite.org/faq.html#q1它指出一個A column declared INTEGER PRIMARY KEY will autoincrement