我准备了语句,我想从命令行工具测试而不用手动传递参数。Sqlite3 - 将参数传递给准备好的语句
例如,SQL:
SELECT * FROM TABLE WHERE X = ? AND Y = ?
是否有传递参数,以便SQL的一个方式可以与给定的值来执行与类似:SQL绑定(A,B,C)?
感谢,
我准备了语句,我想从命令行工具测试而不用手动传递参数。Sqlite3 - 将参数传递给准备好的语句
例如,SQL:
SELECT * FROM TABLE WHERE X = ? AND Y = ?
是否有传递参数,以便SQL的一个方式可以与给定的值来执行与类似:SQL绑定(A,B,C)?
感谢,
编辑:不知道你在哪里运行此,但这里有一个Android解决方案有兴趣:
如果我正确理解你的问题,你想通过命令行传递值写入一个SQL语句来测试结果。这是一个有点工作,但可行:
有adb功能内发送intents到一个特定的活动,其中可能包括额外。如果您始终拥有固定数量的参数,则可以编写一个活动,以使用包含Extras的Intent开始,并从命令行传递该活动。输入命令(提示音乐):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()
,创建的选择和传入参数作为选择ARGS:
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
的东西,如果一切按计划进行的话,它应该开始你的活动,通过在演员到你的查询,并运行它。然后,所有剩下的,取决于你的输出是什么,找出把输出放在哪里,可能是一个你稍后可以检索的文件。
祝你好运!
所有我能想到的是...... 1),你可以修改sqlite的C代码,并重新编译引擎 创建此功能youself 2),或者你可以实现其功能的包装语言 (用于例如一个PHP页面)..授予,第二个选项不完全是从命令行,但可以模仿相同的效果。 –