2012-09-11 108 views
0

我試圖從數據庫獲取數據。我已經有50-60個方法用於對db執行操作,並且它們都很好。今天我創建了另一種方法......但它不起作用! IDK也許是因爲我使用的是相同的遊標的2倍.. IDK ...這是產生錯誤代碼:從數據庫獲取數據時出錯

public ArrayList<String> getValueFromTab(String tipoGrafico){ 

    SQLiteDatabase sqlDB = null; 
    Cursor data = null; 
    String ascissa=null; 
    String tabella=null; 
    ArrayList<String>dati=new ArrayList<String>(); 

    try { 
     sqlDB = openDataBase(SQLiteDatabase.NO_LOCALIZED_COLLATORS); 
     data=sqlDB.rawQuery("SELECT TABELLA, ASCISSA FROM cpm_analysis WHERE CATEGORIA='"+tipoGrafico+"' AND ABILITATO <>'no'", null); 

     if(data.getCount()==0){ 
      data=null; 
     }else{ 
      while(data.moveToNext()){ 
       tabella=data.getString(0); 
       ascissa=data.getString(1); 
      } 
      data=null; 
     } 
     data=sqlDB.rawQuery("SELECT DISTINCT"+ascissa+" FROM "+tabella+"", null); 

     if(data.getCount()==0){ 
      data=null; 
     }else{ 
      while(data.moveToNext()){ 
       dati.add(data.getString(1)); 
      } 
      data=null; 
     } 
     return dati; 

    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }finally { 
     if (data != null) 
      data.close(); 
     if (sqlDB != null) 
      sqlDB.close(); 
    } 

    return null; 

} 

我破格錄取第一rawquery後()。

這是一個完美的作品的另一種方法:

SQLiteDatabase sqlDB = null; 
    Cursor data = null; 

    try { 
     sqlDB = openDataBase(SQLiteDatabase.NO_LOCALIZED_COLLATORS); 
     String[] posizioni=new String[]{"Grafici UL", "Grafici UR", "Grafici DL", "Grafici DR"}; 
     String[] categorie=new String[posizioni.length]; 
     String categorieTemp=""; 
     for(int i=0; i<posizioni.length; i++){ 
      data=sqlDB.rawQuery("SELECT CATEGORIA FROM cpm_analysis WHERE AREA_DISPLAY='"+posizioni[i]+"' AND ABILITATO <> 'no' ", null); 
      if(data.getCount()==0){ 
       data=null;} 

      else{ 
      while(data.moveToNext()){ 
       categorieTemp=data.getString(0); 
       categorie[i]=categorieTemp; 
      } 
      data=null; 
      } 
     } 
     return categorie; 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }finally { 
     if (data != null) 
      data.close(); 
     if (sqlDB != null) 
      sqlDB.close(); 
    } 

    return null; 

} 

哪裏錯了嗎?提前

編輯對不起我的英文不好,並感謝

請幫我>。 <我要瘋了......

重新編輯

好,我解決它。 Idk爲什麼但我不能從一個活動調用這個方法,所以我之前在Activity中調用它。它沒有打開數據庫.. Idk爲什麼@ _ @現在它可以工作... Ty全部:)

+0

你可以發佈你的logcat異常嗎? –

+0

和什麼是例外? – mihail

+0

很難回答你的問題,沒有錯誤信息和/或堆棧跟蹤 – HitOdessit

回答

2

在DISTINCT和列名之間給出適當的空間。

data=sqlDB.rawQuery("SELECT DISTINCT "+ascissa+" FROM "+tabella+"", null); 
+0

是的,這是一個錯誤,但我在第一個查詢中,而不是在第二個。我試圖糾正這個錯誤,我仍然得到異常。 –

1

這同樣適用於data=sqlDB.rawQuery("SELECT TABELLA, ASCISSA FROM cpm_analysis WHERE CATEGORIA='"+tipoGrafico+"' AND ABILITATO <>'no'", null);

這部分 ... AND ABILITATO <>'no'", null); 有AFER <>沒有合適的空間,以及。

+0

糾正它......但是在同一行發生異常。我已經複製了我的查詢,並且我直接在db上執行了它,並且它能正常工作... –

+0

爲了給你一些錯誤的提示,你可以嘗試開始將一些信息記錄到LogCat中。 我總是開始詳細說明所有步驟,以顯示可能出錯的地方。 '/ ** lookupWineID(String q)根據字符串q中wine的名稱返回一個ID數組。公共字符串[] lookupWineID(字符串q){ \t Log.v(「lookupWineID」,「Started」); \t //打開數據庫 \t openDataBase(); (「lookupWineID」,「數據庫已打開」);' – artens

+0

我不允許從我以前使用的活動中調用此方法。所以我從另一個活動中調用它,它的工作原理:)我已經寫在我的編輯 –