ruby sqlite3插入自动增量

时间:2015-06-19 16:04:03

标签: ruby sqlite

我在将数据插入带有id自动增量的sqlite3数据库时遇到问题。这是我到目前为止所尝试的:

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 个答案:

答案 0 :(得分: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|☺

答案 1 :(得分: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