[英]SQLite rawquery
我在资产目录中数据库上的Eclipse上的rawquery出现错误。 数据库已“预加载”表和数据,并且SQL字符串(第一个注释行)可在SQLite DB浏览器中使用。 当我将SQL字符串复制到代码中并进行修改以删除引号时,将出现错误。 下面的代码来自“标准”公共类DataBaseHelper扩展了SQLiteOpenHelper {。我是android / java的新手,希望获得任何帮助或建议。
public Cursor getAllSectionDescriptions( String DBtable, String source){
//Works in DB: SELECT "Description" FROM "SectionProps" WHERE Source = "UK"
//String q = "SELECT Description FROM SectionProps WHERE Source = UK " ; <= errors in code
String q = "SELECT Description FROM " + DBtable + " WHERE Source = " + source + " "; //<== errors in code
//06-24 16:53:03.373: ERROR/AndroidRuntime(1000): Caused by: android.database.sqlite.SQLiteException: no such table: SectionProps: , while compiling: SELECT Description FROM SectionProps WHERE Source = UK
Cursor mCursor = myDataBase.rawQuery(q, null);
mCursor.moveToFirst();
return mCursor;
}//end cursor
要执行查询,有两种方法:执行db.rawQuery方法执行db.query方法要执行原始查询以检索所有部门:
Cursor getAllDepts()
{
SQLiteDatabase db=this.getReadableDatabase();
Cursor cur=db.rawQuery("SELECT "+colDeptID+" as _id,
"+colDeptName+" from "+deptTable,new String [] {});
return cur;
}
rawQuery方法具有两个参数:字符串查询:select语句String [] selection args:如果select语句中包含WHERE子句的参数注意游标对象中返回查询结果。 在select语句中,如果表的主键列(id列)的名称不是_id,则必须使用SELECT [Column Name]形式的别名作为_id,因为Cursor对象始终期望主键键列的名称为_id,否则将引发异常。
看起来您必须在对象名称两边加上双引号。 因此,您需要这样做:
String q = "SELECT \"Description\" FROM \"" + DBtable + "\" WHERE Source = \"" + source + "\" ";
请注意,双引号前的转义字符“ \\”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.