3

我已经准备好声明,我想从命令行工具进行测试,而无需“手动”传递参数。

示例 sql:

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

有没有一种传递参数的方法,以便可以使用给定的值执行 SQL,例如: SQL bind(a,b,c) ?

谢谢,

4

1 回答 1

1

编辑:不知道你在哪里运行这个,但对于那些感兴趣的人来说,这是一个 Android 解决方案:

如果我正确理解您的问题,您希望将命令行中的值传递到 SQL 语句中以测试结果。这有点工作,但可行:

adb 中有将 Intent 发送到特定 Activity 的功能,其中可能包括 Extras。如果您总是有固定数量的参数,您可能会编程一个 Activity 以使用包含 Extras 的 Intent 启动并从命令行传递它。输入命令(提示音乐):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);
        ...

此时你现在有几个选项,因为你有你的参数,你可以运行一个 normal 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 回答