我想执行sqlite查询:
c = db.rawQuery("SELECT " + KEY_BOOK_ID+ " , " + KEY_BOOK_CODE + " , " + KEY_ISBN + " , " +
KEY_VOL_NO + " , " + KEY_BRAND + " , " + KEY_SKU + " , " + KEY_TITLE +
" , " + KEY_PRICE + " , " + KEY_LANG + " , " + KEY_STATUS + " FROM " +
BOOKS_TABLE + " WHERE " + KEY_SKU + " IN " + inClause + ";", null);
in子句中的值需要取自字符串数组:
String values[] = {"Singles","5 in 1 series","Childrens Book"};
以下是我的错误日志。
原因:Android。数据库sqlite。SQLiteException:接近“1”:语法错误(代码1):,编译时:从sku所在的books_表中选择book_id、book_code、ISBN、vol_no、brand、sku、title、price、lang、status(单打、5合1系列、儿童图书);在Android。数据库sqlite。SQLiteConnection。android上的nativePrepareStatement(本机方法)。数据库sqlite。SQLiteConnection。android上的acquirePreparedStatement(SQLiteConnection.java:1112)。数据库sqlite。SQLiteConnection。在android上准备(SQLiteConnection.java:689)。数据库sqlite。SQLiteSession。在android上准备(SQLiteSession.java:588)。数据库sqlite。Sqlite程序。(SQLiteProgram.java:58)在android上。数据库sqlite。SQLiteQuery。(SQLiteQuery.java:37)在android上。数据库sqlite。SQLiteDirectCursorDriver。android上的查询(SQLiteDirectCursorDriver.java:44)。数据库sqlite。SQLITE数据库。android上的rawQueryWithFactory(SQLiteDatabase.java:1433)。数据库sqlite。SQLITE数据库。rawQuery(SQLiteDatabase.java:1372)
这是我用来获取Json对象的方法。
public JSONObject searchForBooks( )
{
String values[] = {"Singles","5 in 1 series","Childrens Book"};
String inClause = Arrays.toString(values);
//replace the brackets with parentheses
inClause = inClause.replace("[","(");
inClause = inClause.replace("]",")");
SQLiteDatabase db = this.getReadableDatabase();
Cursor c ;
c = db.rawQuery("SELECT " +KEY_BOOK_ID+ " , " + KEY_BOOK_CODE + " , " + KEY_ISBN +
" , " + KEY_VOL_NO + " , " + KEY_BRAND + " , " + KEY_SKU + " , " +
KEY_TITLE + " , " + KEY_PRICE+ " , " + KEY_LANG+ " , " + KEY_STATUS
+ " FROM " + BOOKS_TABLE + " WHERE " + KEY_SKU + " IN " + inClause + ";",
null);
if (c.moveToFirst()) {
do {
JSONObject jobj = new JSONObject();
try {
jobj.put("book_id", c.getString(0));
jobj.put("book_code", c.getString(1));
jobj.put("ISBN", c.getString(2));
jobj.put("vol_no", c.getString(3));
jobj.put("brand", c.getString(4));
jobj.put("sku", c.getString(5));
jobj.put("title", c.getString(6));
jobj.put("price", c.getString(7));
jobj.put("lang", c.getString(8));
jobj.put("status", c.getString(9));
jarr1.put(0, jobj);
jm1.put("books_info", jarr1);
Log.d("Selected BOOKS info", jm1.toString());
} catch (JSONException e) {
e.printStackTrace();
}
} while (c.moveToNext());
}
c.close();
db.close();
return jm1;
}
任何帮助或建议都将不胜感激。非常感谢。
你错过了那些字符串周围的引号。
不过,我会用稍微不同的方式构建in从句
String values[] = {"Singles","5 in 1 series","Childrens Book"};
boolean first = true;
String inClause = "(";
for(String v : values){
if(first){
first = false;
} else {
inClause += ","
}
inClause += "'" + v + "'";
}
inClause += ")";
编辑
为了避免CL.在评论中描述的内容,您可以替换
inClause += "'" + v.replaceAll("'", "''") + "'";
与
inClause += "'" + v + "'";
这样,如果字符串中有单引号,它们将被转义,并且不会扰乱最终的查询。
问题内容: 我想执行一个sqlite查询: 子句中的值需要从字符串数组中获取: 我该如何实现? 问题答案: 我相信一个简单的方法就可以解决问题:
我是新的mongodb,我有一个文档在我的db如下: {“_id”:{“$oid”:“546e916cd38e0b3e0e79592f”},名称:“'hamed”,“实体:[“1”,“2”]} 现在我想阅读实体为[“1”,“2”]的aal文档,为此我尝试了以下代码: 但它不返回任何东西...有人能帮助我如何正确地写我的where子句吗?
问题内容: 我创建了一个包含3列的数据框:zip,lat,lng 我想选择zip = 00650的经纬度值 因此,我尝试使用: 但是它返回ArrayOutOfBound异常,因为它没有任何值。如果我删除where子句,它将运行良好。 有人可以解释我在做什么错吗? 更新: 数据框架构: 前10行是: 问题答案: 正如你可以在你的方案看是类型的,所以你的查询应该是这样的 更新: 如果您正在使用,则可以
我正在使用NamedParameterJdbcTemboard来运行我的查询。查询如下: 现在,我调用一个web服务,它返回一个ID列表。因此,我使用NamedParameterJdbcTemplate将ID列表映射到“客户ID”。然而,当ID列表达到1000多个时,我遇到了一个问题。我已经了解到,DB将无法处理包含100或1000个以上数据的IN。 由于我只能接收ID列表,您能否建议除了Name
我有一个包含HTML组件,如下所示: 此组件的CSS(或部分CSS)为: 其基本思想是,当通过页面上的某个click事件应用时,中的div会发生一些动画。因此该组件中的divs类似于: 使用CSS: 我的问题是,上面的页面(带有)是发生事件的地方,因此它也是应用类的地方。但是,实际的组件,它只是包含一堆div(应该是动画的),嗯,它们根本没有动画。 我可以看到类是在单击按钮时应用的,但我猜当类应用
我使用该子句捕获项目上发生的所有异常,以自定义其行为。 在测试中,uri“upload.toftp”设置了一个不存在的连接,因此它们抛出了一个异常。测试仅启动上下文并等待消息插入队列“activeMQ:int.sendmail” 当我在Fuse上安装项目时,工作良好,但当我执行一个引发某种类型异常的测试用例时,就不工作了。 这是在激发异常时显示测试用例的日志。