2012-05-31 42 views
3

我准备了语句,我想从命令行工具测试而不用手动传递参数。Sqlite3 - 将参数传递给准备好的语句

例如,SQL:

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

是否有传递参数,以便SQL的一个方式可以与给定的值来执行与类似:SQL绑定(A,B,C)?

感谢,

+0

所有我能想到的是...... 1),你可以修改sqlite的C代码,并重新编译引擎 创建此功能youself 2),或者你可以实现其功能的包装语言 (用于例如一个PHP页面)..授予,第二个选项不完全是从命令行,但可以模仿相同的效果。 –

回答

1

编辑:不知道你在哪里运行此,但这里有一个Android解决方案有兴趣:

如果我正确理解你的问题,你想通过命令行传递值写入一个SQL语句来测试结果。这是一个有点工作,但可行:

有adb功能内发送intents到一个特定的活动,其中可能包括额外。如果您始终拥有固定数量的参数,则可以编写一个活动,以使用包含Extras的Intent开始,并从命令行传递该活动。输入命令(提示音乐):adb shell am start。欲了解更多有关此命令,请参阅documentationthis 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); 

(小心做这种方式,如果你有intlong 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 

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 

的东西,如果一切按计划进行的话,它应该开始你的活动,通过在演员到你的查询,并运行它。然后,所有剩下的,取决于你的输出是什么,找出把输出放在哪里,可能是一个你稍后可以检索的文件。

祝你好运!

相关问题