首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在SQLite for Android Application中使用预准备语句编写INSERT、UPDATE、DELETE、SELECT、嵌套SELECT命令?

如何在SQLite for Android Application中使用预准备语句编写INSERT、UPDATE、DELETE、SELECT、嵌套SELECT命令?
EN

Stack Overflow用户
提问于 2018-06-15 15:26:01
回答 1查看 248关注 0票数 0

最近,我了解到android中的原始查询不能阻止SQL注入,因此我决定将所有查询转换为预准备语句,这是SQL注入预防。但是我不知道如何在预准备语句中转换复杂的查询。

我想转换以下查询:

1.

代码语言:javascript
复制
select
    *
FROM
    TableName
where
    (tab1col1 in(SELECT tab2Col2 FROM MasterTable where tab2col1='Y')
    or  tab1col2 = CV.TRUE)
order by
    tab1col3, tab1col4, tab1col5,tab1col6

2.

代码语言:javascript
复制
Select
    * ,count(*) as TOTAL_COUNT ,
    SUM(CASE WHEN tabCol1 LIKE '%todayDate%' THEN 1 ELSE  0 END) as  TOTAL_COL1_COUNT
from
    TableName
group by tabCol2;
EN

回答 1

Stack Overflow用户

发布于 2018-06-16 05:32:31

防止SQL注入的唯一方法是使用参数。(在一些PHP中,获取参数的惟一方法是使用预准备语句,但这不是Android数据库API中的一个缺点。)

只需为任意字符串编写?,并分别传递这些值:

代码语言:javascript
复制
String name = ...;
String password = ...;
cursor = db.rawQuery("SELECT SomeCol FROM Users WHERE Name = ? AND Password = ?",
                     new String[]{ name, password });

请注意,只有当您的字符串值由(潜在敌意的)用户控制时,才会发生SQL注入。您上面的查询看起来不是这样的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50870916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档