我在资源目录中的数据库上使用Eclipse上的rawquery时出错。 DB是“预加载”表和数据,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
答案 0 :(得分:0)
看起来你必须在对象名称周围加上双引号。所以你想要这样做:
String q = "SELECT \"Description\" FROM \"" + DBtable + "\" WHERE Source = \"" + source + "\" ";
请注意双引号前面有转义字符'\'
答案 1 :(得分:0)
要执行查询,有两种方法:执行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子句的参数说明查询的结果在Cursor对象中返回。在select语句中,如果表的主键列(id列)的名称不是_id,则必须使用SELECT [Column Name]形式的别名作为_id,因为Cursor对象始终期望主要key列的名称为_id,否则会抛出异常。