2012-07-17 58 views
1

我想比较两个变量,我从json服务获得的数据库,我在我的应用程序。我试图硬编码它和它的工作SQL在哪里陈述

Statement st = tmsDB.createStatement(
    "SELECT * FROM ObjectTexts WHERE programID ='AAA' AND objName ='BBB'"); 

但是,当我试图做到这一点`

Statement st = tmsDB.createStatement(
    "SELECT * FROM ObjectTexts WHERE programID="+ JsonProgramID +"AND objName ="+JsonobjName); 

没有奏效。

任何想法?

回答

7
FROM ObjectTexts WHERE programID='"+ JsonProgramID +"' AND objName =' "+JsonobjName +"'" 

如果您观察硬编码查询,则您的参数位于单引号内,但是动态的引号缺少单引号。

在SQL中,所有的String/Varchar都应该在单引号内。

注意:这些原始查询对于SQL注入非常脆弱。

黑莓API支持正常创建,准备,绑定,执行语义:

Statement st = tmsDB.createStatement("SELECT * FROM ObjectTexts WHERE programID=? AND objName = ?"); 
st.prepare(); 
st.bind(1, JasonProgramID); 
st.bind(2, JsonobjName); 
Cursor c = st.getCursor(); 
... 
+1

如果他的查询非常容易受到SQL注入的影响,你能告诉他正确的方法来避免它吗? – 2012-07-17 15:40:44

+2

@ X-Zero:我不太了解黑莓API,这就是为什么我没有建议。在android这是你需要做的http://android-er.blogspot.com/2011/06/simple-example-using-androids-sqlite_02.html – kosa 2012-07-17 15:58:50

+2

@thinksteep很好的答案,我冒昧地编辑了一些BlackBerry API代码。希望你不介意。 – Richard 2012-07-17 17:04:04

3

你似乎缺少空间和单引号。试试这个:

Statement st = tmsDB.createStatement("SELECT * FROM ObjectTexts WHERE programID= '"+ JsonProgramID +"' AND objName = '"+JsonobjName+"'");