回答

收藏

Android Sqlite IN,NOT IN语法

技术问答 技术问答 214 人阅读 | 0 人回复 | 2023-09-14

我试图运行NOT IN选择NOT IN动态列表。就像是
( d# y6 _: n9 q+ nSELECT id, type FROM CONTACTS where type NOT IN ('connect','answer')$ q" K1 R0 x* Z' s, K  j
在代码中,我徒劳的尝试是:
/ y# @' G& U2 z% d# {0 ?. Wdb.query(TABLE, new String[] { "id", ""}, " type NOT IN (?)", "connect,answer", 3 p* E3 N, R& }! r; \( C& [: D  d( s
    null, null, null); // didn't work
( K9 w! z" f$ _7 @. bdb.query(TABLE, new String[] { "id", ""}, " type NOT IN (?)", "'connect','answer'",
2 y1 N5 {  K0 I& _% l/ g' y7 a$ ~+ K( tnull, null, null); // didn't work
0 T& N3 k4 ~. c! t7 D我对此的看法是,?替换将我的逗号列表视为单个参数。我确实找到了解决方案,但它很难看,因此除非有人提出更优雅的方法,否则我不会在此处发布该解决方案
5 b% M0 K+ z& _$ B  @                ; T- F9 n% y* l* b) ^: V  G6 W
解决方案:' g# z) `) p# C  m
                ) E# N& T7 k- F, v* d

- A, N# a" A$ q7 E0 ~( L/ l6 P  R3 U; F6 H; |3 w: c
                您不能只放置一个’?’ 而不是值列表。这样,尝试对列表进行参数化几乎没有任何好处。当然,可以创建2、4、16值的准备好的语句,..." type NOT
4 ?/ _8 m$ v! D# L: B# @# xIN (?,?)", new String[]{ "connect","answer"' I, o; H* l: ^! i; }  l' D
},...但是即使在具有远程RDBMS的服务器上,它也有可疑的价值。相反,做
! G5 i1 a) f/ k9 A% z+ y3 p8 cdb.query(TABLE, new String[] { "id", ""}, " type NOT IN ('connect','answer')",
. U6 a, g- x1 f4 X     null, null, null, null);1 I- K: }# P! x% w
如果列表是动态的,则必须转义字符串并将其放入单引号列表中。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则