0

Ant スクリプトから SQLite を呼び出すときに .separator と .import の両方を使用する必要がありますが、正しい構文を取得できないようです。SO の回答 here に基づいて、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>
4

2 に答える 2

1

.sqlite3の最後の引数を介してメタコマンド(つまり、で始まるコマンド)を渡すことはできないようです。実際のSQLステートメントのみがそこで機能するようです[*]。2つの可能な修正があります。メタコマンドをファイルに書き込み、-file filenameオプション(データベース名の前に2つの引数)を使用してそれらをロードするか、sqlite3の標準入力でマルチステートメントの命令セット全体を渡します。inputstringこの2番目のオプションは、パラメーターを使用してantを使用して実装する方が簡単です。

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

はい、それには本当の改行が含まれています。実際のSQLステートメントとは異なり、メタコマンドをセミコロンで区切ることはできません。必要に応じて改行をエンコード&#10;できます。


[*]実際には、1つのメタコマンドで機能しますが、2つ入れることはできません。

于 2012-05-05T23:05:48.583 に答える
0

Antは、2番目のarg値の単一引用符を文字列区切り文字として解釈していると思います。一重引用符をエスケープしてみてください。

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

私はSQLite構文に精通していませんが、.importパラメーターも個別のarg値である必要がある場合があります。

于 2012-05-05T21:09:48.473 に答える