打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
freeswitch.Dbh query 说明

freeswitch.Dbh

用于获取FreeSWITCH中的ODBC或和核心数据库sqlite的数据库操作句柄,执行sql查询。

该方法的好处是它使用FreeSWITCH提供的数据库连接池,比LuaSQL中为每个env:connect()创建一个单独的tcp连接会快很多。

用法如下:

local dbh = freeswitch.Dbh("dsn","user","pass") -- 当连接ODBC时(已被废弃)-- 或者 --local dbh = freeswitch.Dbh("core:my_db") -- 当连接sqlite (已被废弃, 如果你必须要用这个方法,需要升级FS)-- 或者 --local dbh = freeswitch.Dbh("sqlite://my_db") -- 连接位于freeswitch子目录db中的sqlite数据库-- 或者 --local dbh = freeswitch.Dbh("odbc://my_db:uname:passwd") -- 连接ODBC数据库assert(dbh:connected()) -- 断言,如果数据库连接失败,则退出脚本dbh:test_reactive("SELECT * FROM my_table",                  "DROP TABLE my_table",                  "CREATE TABLE my_table (id INTEGER(8), name VARCHAR(255))")dbh:query("INSERT INTO my_table VALUES(1, 'foo')") -- populate the tabledbh:query("INSERT INTO my_table VALUES(2, 'bar')") -- with some test datadbh:query("SELECT id, name FROM my_table", function(row)  stream:write(string.format("%5s : %s\n", row.id, row.name))end)dbh:query("UPDATE my_table SET name = 'changed'")stream:write("Affected rows: " .. dbh:affected_rows() .. "\n")dbh:release() -- optional
  • freeswitch.Dbh(odbc://my_db:uname:passwd)用于从连接池获取一个ODBC数据库句柄

  • freeswitch.Dbh("sqlite://my_db") 用于从连接池中获取核心数据库(sqlite)一个操作句柄 (如果指定的数据库不存在,会先自动创建).

  • dbh:connected() 用于检查数据库是否仍处于连接状态,返回true代表连接正常,false则相反。
  • dbh:test_reactive("test_sql", "drop_sql", "reactive_sql")用于执行test_sql语句,如果执行失败,则执行drop_sql与reactive_sql语句(方便表的初始化创建)
  • dbh:query("query", function()) 第一个参数用于传入sql查询语句,第二个参数是一个可选的lua回调函数,每返回一行数据会被调用一次。
  • 回调函数接收到的参数是每次循环遍历返回的行对象。 访问每行中列数据的方法为:{ ["column_name_1"] = "value_1", ["column_name_2"] = "value_2" }.(译者注:该种方法比较古老,根据上面的代码,现在可能已被row.id, row.name这种形式代替,需要验证,至少我还没试过。)
  • (可选)如果你的回调函数返回非0的数字,则会中断循环。
  • dbh:affected_rows() 返回最后的操作影响的行数,操作包括INSERT、DELETE和UPDATE,当然,SELECT操作不包括在内。
  • (可选)dbh:release()将句柄释放回资源池,以便被其他线程复用。 当dbh超出定义范围,被垃圾回收时(比如脚本执行完毕后),同样会自动释放资源。所以,该函数对那些需要长期执行且快速释放连接的脚本比较有用。

查看Lua_freeswitch_dbh获取更多的例子。


dbh:query(sql_Select_FaxRecvHisID_query,function(faxidtable)
print(faxidtable)
i=0
for key,val in pairs(faxidtable) do
--for key,vals in pairs(val) do
print("faxtask"..i..": key->"..key.." val->"..val);
i = i+1;
--end;
end;
faxid = faxidtable["faxid"]
end);

__________________________________



select faxid from runfaxrecvhistory where CallerID='204'
table: 0x9f3b850
faxtask0: key->faxid val->7
table: 0x9d68700
faxtask0: key->faxid val->8
table: 0x9f116c0
faxtask0: key->faxid val->9
table: 0x9fa2d38
faxtask0: key->faxid val->10
table: 0x9ed3028
faxtask0: key->faxid val->11
table: 0x9f0aca0
faxtask0: key->faxid val->12
table: 0x9d80ae0
faxtask0: key->faxid val->13
table: 0x9d80b88
faxtask0: key->faxid val->14
table: 0x9f3fba8
faxtask0: key->faxid val->15
table: 0x9f3fa30
faxtask0: key->faxid val->16
table: 0x9f11560
faxtask0: key->faxid val->17
table: 0x9f11658
faxtask0: key->faxid val->18
table: 0x9f391e8
faxtask0: key->faxid val->19
table: 0x9f34c90
faxtask0: key->faxid val->20
table: 0x9e3cd28
faxtask0: key->faxid val->21
21



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
《FreeSWITCH: VoIP实战》:嵌入式脚本
PHP PDO 基础
a question of perl
11-James
实例演示SQL Server中五个事务隔离的区别
PHP+Ajax实现后台文章快速排序
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服