lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Greetings,

 

I am trying out lsqlite3 for the first time and am new to databases.  I understand the sqlite3 statements for the most part, but am have trouble understanding how to extract data using lsqlite3.  I see how you can print the values in a database table using db:nrows in a For statement, but what if I want just a single entry?

 

I have tried a couple of ways to do this, one that works and one that doesn’t.  These come from looking through the information found at http://lua.sqlite.org/index.cgi/doc/tip/doc/lsqlite3.wiki

 

This one works, but doesn’t seem very elegant:

 

local sqlite3 = require("lsqlite3")

local db = sqlite3.open("POE.db")

 

function getvalue(udata,cols,values,names)

  a = values[1]

  return 0

end

db:exec( 'SELECT event_pending FROM devices where url="" getvalue )

print(a)

 

 

This one doesn’t:

 

local sqlite3 = require("lsqlite3")

local db = sqlite3.open("test.db");

 

db:exec [[

  DROP TABLE if exists numbers;

  CREATE TABLE numbers(num1,num2,str);

  INSERT INTO numbers VALUES(1,11,"ABC");

  INSERT INTO numbers VALUES(2,22,"DEF");

  INSERT INTO numbers VALUES(3,33,"UVW");

  INSERT INTO numbers VALUES(4,44,"XYZ");

  ]]

 

local insert_stmt = db:prepare('SELECT * FROM numbers WHERE num1=1')

x = insert_stmt:get_names()

print(x[3])

x = insert_stmt:get_value(0)

print(x[1])

 

 

The above works until it gets to the line “x = insert_stmt:get_value(0)”.  Lua returns the following:

 

C:\work>lua test2.lua

str

lua: test2.lua:17: misuse of function

stack traceback:

        [C]: in method 'get_value'

        test2.lua:17: in main chunk

        [C]: in ?

 

Why doesn’t the second example work?

 

Should I be doing this another way?  I thought I would be able to pull queries into a Lua table, but I don’t see a way to do that.

 

Thanks,

 

Rick