通过Ant将多个参数传递给SQLite

时间:2012-05-04 18:00:57

标签: sqlite ant

从Ant脚本调用SQLite时我需要同时使用.separator和.import,但似乎无法正确使用语法。根据这里关于在bash脚本中做同样事情的答案,我的最新尝试就是这个。

<exec executable="sqlite3">
    <arg value="${sqlite.db}" />
    <arg value=".separator ';'\n.import ${data.dir}/DISTRICT_BOUNDARY.txt DISTRICT_BOUNDARY" />
</exec>

不幸的是,这会导致以下错误消息。

错误:未知命令或无效参数:“separator”。输入“.help”获取帮助

我正在尝试做什么的正确语法是什么?

最终解决方案:

<exec executable="sqlite3" inputstring=".separator ';'&#10;.import ${data.dir}/METADATA_DESCRIPTION.txt METADATA_DESCRIPTION">
    <arg value="${sqlite.db}" />
</exec>

2 个答案:

答案 0 :(得分:1)

您似乎无法通过sqlite3的最终参数传递元命令(即以.开头的命令);只有实际的SQL语句似乎在那里工作[*]。有两种可能的修复方法;或者将元命令写入文件并使用-file filename选项(在数据库名称之前的两个参数)加载它们,或者在sqlite3的标准输入中传递整个多语句指令集。通过inputstring参数:

,您可以更简单地使用ant实现第二个选项
<exec executable="sqlite3" inputstring=".separator ';'
.import ${data.dir}/DISTRICT_BOUNDARY.txt DISTRICT_BOUNDARY">
    <arg value="${sqlite.db}" />
</exec>

是的,它有一个真正的换行符。与真正的SQL语句不同,您不能使用分号分隔元命令。如果您愿意,可以将换行编码为&#10;


[*]实际上,单个元命令可以工作,但你不能放两个。

答案 1 :(得分:0)

我认为Ant将第二个arg值中的单引号解释为字符串分隔符。尝试转义单引号:

<arg value=".separator \';\'\n.import${data.dir}/DISTRICT_BOUNDARY.txt DISTRICT_BOUNDARY" />

我不熟悉SQLite语法,但.import参数可能也需要是一个单独的arg值。