2015-06-19 50 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