我已经准备好声明,我想从命令行工具进行测试,而无需“手动”传递参数。
示例 sql:
SELECT * FROM TABLE WHERE X = ? AND Y = ?
有没有一种传递参数的方法,以便可以使用给定的值执行 SQL,例如: SQL bind(a,b,c) ?
谢谢,
我已经准备好声明,我想从命令行工具进行测试,而无需“手动”传递参数。
示例 sql:
SELECT * FROM TABLE WHERE X = ? AND Y = ?
有没有一种传递参数的方法,以便可以使用给定的值执行 SQL,例如: SQL bind(a,b,c) ?
谢谢,
编辑:不知道你在哪里运行这个,但对于那些感兴趣的人来说,这是一个 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
(如果您有或long
args,请注意这样做。请参阅这篇文章。)
您还可以选择创建预编译语句。一些预编译语句只会给你一个 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
呸。好的,最后,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
如果一切按计划进行,它应该启动您的活动,将附加内容传递到您的查询中,然后运行它。然后,根据您的输出,剩下的就是确定将输出放在哪里,可能是您以后可以检索的文件。
祝你好运!