SQLite rawquery

时间:2011-06-24 17:47:43

标签: android sqlite

我在资源目录中的数据库上使用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

2 个答案:

答案 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,否则会抛出异常。