2011-04-18 150 views
7

我有一個數據庫表,有3列:id,name,permission。如何在Android中使用rawQuery

它看起來像這樣:

1個漫畫的樂趣

2通訊談話

3個漫畫觀看

我試圖讓這裏的名字是漫畫的權限。我使用下面的代碼在我的數據庫類(AppData.java):

private final static String DB_NAME = "safety_app_database"; // the name of our database 
private final static int DB_VERSION = 1; // the version of the database 

// the names for our database columns 
private final String TABLE_NAME = "permissions_table"; 
private final String ID = "id"; 
private final String NAME = "name"; 
private final String PERMISSION = "permission"; 

和方法

public Cursor getData(){ 
     return db.rawQuery("SELECT permission FROM permissions_table WHERE name = 'Comics', null); 
    } 

,我在我的主類(safety.java)調用此。 AppData引用AppData.java

appData.getData(); 

這是正確的方法嗎?我不確定,每當我嘗試調用sql查詢時它都會給我一個錯誤。

回答

4

一個錯字錯誤,你不是用"關閉sql字符串。嘗試這個。

return db.rawQuery("SELECT permission FROM permissions_table WHERE name = 'Comics' ", null); 

[編輯:JAR屬於 '的Android 2.2',這不允許在其條目修改源附件]

The Jar of this class file blongs to container Android 2.0.1 which does not allow modifications

+0

我相信你就需要使用\」逃離這裏的單引號 – Maximus 2011-04-18 18:51:17

+0

沒有,看來這不是我的SQL,我嘗試使用下面的代碼,它仍然給了我一個錯誤「公共光標的getData(){ \t \t \t回報db.rawQuery(」 SELECT * FROM permissions_table 「NULL);」 \t \t \t} – 2011-04-18 19:01:58

+0

此外,在原材料查詢,或使用execSQL方法,你必須結束STR用分號分隔。 – Maximus 2011-04-18 19:05:50

0

沒有必要爲一個原始查詢。您可以使用推薦的SQLiteDatabase查詢方法之一,它是這樣的:

db.query("permissions_table", new String [] {permission}, "name = \'Comics\'", null, null, null, null); 
+1

沒有,要麼沒有工作,只是同樣的錯誤,當我嘗試運行它,並進行調試。 – 2011-04-18 19:09:01

+0

您在logcat中遇到什麼錯誤? – Maximus 2011-04-18 19:11:00

+0

對不起它說:在顯示java.lang.NullPointerException AppData.getData(AppData.java:71) – 2011-04-18 19:16:04

0

試試下面的辦法:

public Cursor getData(String arg) { 
    return db.rawQuery("SELECT permission FROM `permissions_table` WHERE name ="+arg, null); 
} 

然後,只需調用上述方法,像這樣正確的參數:

Cursor cursor; 

cursor = getData ("Comic"); 
+0

爲了防止可能發生http://en.wikipedia.org/wiki/SQL_injection我會用'代替db.query'。 – 2013-01-31 19:02:03

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對象始終需要主鍵鍵列的名稱是_id,否則會引發異常。執行查詢的另一種方法是使用db.query方法。在從視圖中某個部門,選擇所有員工的查詢會是這樣的:

public Cursor getEmpByDept(String Dept) { 
    SQLiteDatabase db=this.getReadableDatabase(); 
    String [] columns=new String[]{"_id",colName,colAge,colDeptName}; 
    Cursor c=db.query(viewEmps, columns, colDeptName+"=?", 
     new String[]{Dept}, null, null, null); 
    return c; 
    } 

的db.query具有以下參數:字符串表名稱:表的名稱對字符串運行查詢[ ]列:查詢的投影,即中,列來檢索字符串WHERE子句:where子句,如果沒有通null的String []選擇ARGS:的參數WHERE子句字符串組由:一個字符串由子句字符串指定組具有:一個字符串指定具有子句字符串排序由:字符串排序由第

相關問題