我已准备好声明,我想从命令行工具测试,而不是"手动"传递参数。
示例sql:
SELECT * FROM TABLE WHERE X = ? AND Y = ?
是否有一种传递参数的方法,以便可以使用给定的值执行SQL,例如:SQL bind(a,b,c)?
谢谢,
答案 0 :(得分:1)
编辑:不知道你在哪里运行,但这里是一个针对那些感兴趣的Android解决方案:
如果我正确理解您的问题,您希望将值从命令行传递到SQL语句以测试结果。这有点工作,但可行:
adb中有一些功能可以将Intent发送到特定的Activity,其中可能包含Extras。如果您将始终拥有固定数量的参数,则可以使用包含Extras的Intent对Activity进行编程,并从命令行传递它。输入命令(提示音乐):adb shell am start
。有关此命令的更多信息,请参阅documentation或this tutorial
以下是一些示例代码:
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
或long
args,请注意这样做。请参阅this article。
您还可以选择创建预编译语句。一些预编译的语句只会给你一个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
如果一切按计划进行,它应该启动您的活动,将附加内容传递到您的查询中,然后运行它。然后根据你的输出,剩下的就是找出输出的位置,可能是一个你以后可以检索的文件。
祝你好运!