如何在OCaml中以字符串形式输出数据库中的查询



每当我使用sqlite3-ocaml库在OCaml中输出查询时,它都会将数据库中的信息作为单元而不是字符串打印出来。我想知道如何将数据库中的信息输出为字符串?谢谢!

您可能指的是cb函数,它是exec函数族的回调函数。在exec中,它的类型为row -> headers -> unit,这意味着对于每个调用,库将调用回调并提供行信息和标题信息,即,它将像my_callback row hdrs一样被调用。它应该返回unit类型的值,OCaml的说法是它不返回任何东西(或者它返回的任何东西都将被忽略)。

打印所有行(让我们忽略空值和初学者的标题)的一个简单方法是使用exec_not_null_no_headers,例如

let print_query db query = 
Sqlite3.exec_not_null_no_headers db querty ~cb:(fun row -> 
Array.iter (fun row -> print_string (row ^ " ")) row;
print_char 'n')

这将把查询结果打印到标准输出。如果你想,而不是打印输出,收集到一个字符串,然后你可以使用Buffer模块来构建它,例如,

let query_to_string db query = 
let buf = Buffer.create 64 in
Sqlite3.exec_not_null_no_header db query ~cb:(fun row -> 
Array.iter (fun elt -> 
Buffer.add_string buf elt;
Buffer.add_char buf ' ');
Buffer.add_char buf 'n');
Buffer.contents buf

最新更新