繁体   English   中英

SQLite原始查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM