You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带额外参数的Eiffel SQLite调用技术咨询

Eiffel中SQLite带额外参数的execute_with_arguments调用详解

看你贴的代码里execute_with_arguments的调用写到一半就断了,我来给你捋清楚这个方法怎么带额外参数用。

首先,execute_with_arguments的核心是用代理来处理每一行查询结果,同时你可以给代理绑定额外的自定义参数,不用把所有数据都放到全局变量里。下面给你一步步拆解:

1. 先写好处理行数据的代理过程

你需要先定义一个用来处理查询返回行的过程,这个过程的第一个参数必须是SQLITE_ROW(对应每一行的数据),后面可以加任意你需要的额外参数,比如你代码里的test_val:

process_row (a_row: SQLITE_ROW; a_extra_val: STRING)
do
    -- 这里写处理行的逻辑,比如读取列值
    if a_row.has_column ("id") then
        print ("行ID:" + a_row.integer_value ("id").out + "%N")
    end
    if a_row.has_column ("test_val") then
        print ("存储的值:" + a_row.string_value ("test_val") + "%N")
    end
    -- 用你传递的额外参数做事情
    print ("额外参数内容:" + a_extra_val + "%N%N")

    -- 如果想提前停止遍历结果行,就返回False;继续遍历返回True
    -- Result := True
end

2. 正确调用execute_with_arguments

回到你的check_db过程里,补全调用逻辑。这里要注意两个关键点:代理的绑定方式,以及SQL参数的传递:

check_db (input_line: STRING)
local
    df_db: SQLITE_DATABASE
    df_db_query: SQLITE_QUERY_STATEMENT
    test_val: STRING
    query_args: ARRAY[ANY]
do
    test_val := "whatever"
    create df_db.make_open_read_write ("Large.db")
    -- 注意SQL语句里的占位符格式,你之前的写法多了空格,改成`:TEST_VAL`就好
    create df_db_query.make ("SELECT * FROM test_table WHERE test_val = :TEST_VAL;", df_db)
    check df_db_query_is_compiled: df_db_query.is_compiled

    -- 创建SQL参数数组,对应语句里的`:TEST_VAL`
    create query_args.make (1, 1)
    query_args.put (test_val, 1)

    -- 重点:绑定代理和额外参数
    -- `?`是占位符,表示这个参数会由execute_with_arguments自动传入SQLITE_ROW对象
    -- 后面的`test_val`就是你要传递的额外参数,会绑定到process_row的第二个参数
    df_db_query.execute_with_arguments (agent process_row (?, test_val), query_args)

    -- 别忘了释放资源
    df_db_query.free
    df_db.close
end

3. 几个容易踩的坑

  • 代理占位符不能丢:必须用?来标记由系统传入的SQLITE_ROW参数,不然编译器会提示代理签名不匹配。
  • SQL参数类型要匹配:query_args里的元素类型要和数据库列的类型对应,比如字符串用STRING,整数用INTEGER_32,不然会出现执行错误。
  • 资源要及时释放:查询语句用完后要调用free,数据库要调用close,避免资源泄漏。

内容的提问来源于stack exchange,提问作者shakeshuck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:26:19