0

データベースからデータを取得しようとしています。私はすでに 50 ~ 60 のメソッドを使用して、自分のデータベースで do 操作を行っていますが、それらはすべてうまく機能しています。今日、私は別の方法を作成しました...しかし、うまくいきません! 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;

}

間違いはどこですか?私の悪い英語で申し訳ありませんが、事前に感謝します

編集

助けてください >.< 気が狂いそうです...

再編集

わかりました私はそれを解決しました。理由はわかりませんが、このメソッドを 1 つのアクティビティから呼び出すことはできないため、以前にアクティビティで呼び出しました。それはdbを開きませんでした.. Idk なぜ@_@今は動作します... Tyはまったく:)

4

2 に答える 2

2

DISTINCT と列名の間に適切なスペースを入れてください。

 data=sqlDB.rawQuery("SELECT DISTINCT "+ascissa+" FROM "+tabella+"", null);
于 2012-09-11T13:35:25.140 に答える
1

同じことが言えますdata=sqlDB.rawQuery("SELECT TABELLA, ASCISSA FROM cpm_analysis WHERE CATEGORIA='"+tipoGrafico+"' AND ABILITATO <>'no'", null);

この部分 ... AND ABILITATO <>'no'", null); にも適切なスペースがありません<>。

于 2012-09-11T13:48:25.237 に答える