3

パラメータを「手動で」渡すことなくコマンドラインツールからテストしたいステートメントを準備しました。

SQL の例:

 SELECT * FROM TABLE WHERE X = ? AND Y = ?

SQL bind(a,b,c) のような特定の値で SQL を実行できるように、パラメーターを渡す方法はありますか?

ありがとう、

4

1 に答える 1

1

編集:これをどこで実行しているかはわかりませんが、興味のある方向けの Android ソリューションは次のとおりです。

私があなたの質問を正しく理解していれば、コマンド ラインから SQL ステートメントに値を渡して結果をテストする必要があります。少し手間がかかりますが、実行可能です:

特定のアクティビティにインテントを送信する adb 内の機能があり、エクストラを含めることができます。常に固定数の引数を使用する場合は、エクストラを含むインテントで開始されるアクティビティをプログラムし、コマンド ラインから渡すことができます。コマンドを入力します (音楽のキュー): adb shell am start. このコマンドの詳細については、ドキュメントまたはこのチュートリアルを参照してください

サンプルコードは次のとおりです。

public class MainActivity extends Activity {

    private final String EXTRA1 = "com.example.sample.EXTRA1";
    private final String EXTRA2 = "com.example.sample.EXTRA2";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...

        String qparam1 = null;
        String qparam2 = null;
        Intent calledBy = getIntent();

        if (calledBy.hasExtra(EXTRA1)) qparam1 = calledBy.getStringExtra(EXTRA1);
        if (calledBy.hasExtra(EXTRA2)) qparam2 = calledBy.getStringExtra(EXTRA2);
        ...

この時点で、いくつかのオプションがあります。パラメーターがあるため、法線を実行しgetContentResolver().query()、選択を作成して、パラメーターを選択引数として渡すことができます。

String selection = "WHERE x=? AND Y=?";
String[] args = new String[]{qparam1, qparam2};
getContentResolver().query(uri, projection, selection, args, null);

int(またはlongargsがある場合は、このようにすることに注意してください。この記事を参照してください。)

プリコンパイル済みステートメントの作成を選択することもできます。一部のプリコンパイル済みステートメントでは 1x1 の結果しか得られないため、期待する出力によっては制限される場合があります。

SQLiteDatabase db; // assume already initialized
SQLiteStatement statement = db.compileStatement("SELECT * FROM table WHERE x=? AND y=?");

statement.bindAllArgsAsStrings(new String[]{qparam1, qparam2});
// now run some kind of execute command, as per SQLiteStatement documentation

SQLiteStatement ドキュメント

ふぅ。最後にadb shell am start、データの送信に使用します。ドキュメントに従って、次のようなことができます

> adb shell am start -n com.example.sample/.MainActivity -e com.example.sample.EXTRA1 first -e com.example.sample.EXTRA2 second

すべてが計画どおりに進んだ場合、アクティビティを開始し、エクストラをクエリに渡して実行する必要があります。あとは、出力が何であるかに応じて、出力をどこに置くかを考え出すだけです。おそらく、後で取得できるファイルです。

頑張ってください!

于 2014-01-10T04:37:16.763 に答える