Android 从数据库获取数据时出错

Android 从数据库获取数据时出错,android,Android,我正试图从数据库中获取数据。我已经使用了50-60种方法在我的数据库上执行do操作,所有这些方法都很有效。今天我创造了另一种方法。。。但它不起作用!Idk可能是因为我使用了两次相同的光标。。Idk。。。这是生成错误的代码: public ArrayList<String> getValueFromTab(String tipoGrafico){ SQLiteDatabase sqlDB = null; Cursor data = null; String a

我正试图从数据库中获取数据。我已经使用了50-60种方法在我的数据库上执行do操作,所有这些方法都很有效。今天我创造了另一种方法。。。但它不起作用!Idk可能是因为我使用了两次相同的光标。。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;

}
public ArrayList getValueFromTab(字符串tipoGrafico){
SQLiteDatabase sqlDB=null;
游标数据=空;
字符串ascsa=null;
字符串tabella=null;
ArrayListdati=新的ArrayList();
试一试{
sqlDB=openDataBase(SQLiteDatabase.NO\u本地化\u COLLATORS);
data=sqlDB.rawQuery(“从cpm_分析中选择TABELLA、Ascsa,其中categia='“+tipoGrafico+””,abilita为“否”,为空);
if(data.getCount()==0){
数据=空;
}否则{
while(data.moveToNext()){
tabella=data.getString(0);
ascsa=data.getString(1);
}
数据=空;
}
data=sqlDB.rawQuery(“从“+tabella+”中选择DISTINCT”+ascissa+”,null);
if(data.getCount()==0){
数据=空;
}否则{
while(data.moveToNext()){
dati.add(data.getString(1));
}
数据=空;
}
返回dati;
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}最后{
如果(数据!=null)
data.close();
if(sqlDB!=null)
sqlDB.close();
}
返回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;

}
SQLiteDatabase sqlDB=null;
游标数据=空;
试一试{
sqlDB=openDataBase(SQLiteDatabase.NO\u本地化\u COLLATORS);
字符串[]posizioni=新字符串[]{“Grafici UL”、“Grafici UR”、“Grafici DL”、“Grafici DR”};
字符串[]分类=新字符串[posizioni.length];
字符串categorieTemp=“”;
对于(int i=0;i.<我快疯了

重新编辑


好的,我解决了它。Idk why,但我不能从一个活动调用此方法,所以我在之前的活动中调用了它。它没有打开db..Idk why@现在它可以工作了…Ty:)

在DISTINCT和column name之间提供适当的空格

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

在DISTINCT和列名之间提供适当的空格

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

这同样适用于
data=sqlDB.rawQuery(“从cpm_分析中选择TABELLA,ascsa,其中categia='“+tipoGrafico+”,abilita为'no',null);

这部分
…和ABILITATO'no',null);

之后也没有合适的空间。

同样适用于
data=sqlDB.rawQuery(“从cpm_分析中选择TABELLA,Ascsa,其中categia=”“+tipoGrafico+””,以及abilita to'no',null);

这部分
…和ABILITATO'no',null);

之后也没有适当的空间。

您可以发布该异常的日志吗?如果没有错误消息和/或stacktracesit是NullPointerException,则很难回答您的问题…==您可以发布该异常的日志吗?如果没有错误消息和/或stacktracesit是NullPointerExcept,则很难回答您的问题tion…==是的,这是一个错误,但我在第一个查询中出现异常,而不是在第二个查询中。我试图更正此错误,但仍得到异常。是的,这是一个错误,但我在第一个查询中出现异常,而不是在第二个查询中。我试图更正此错误,但仍得到异常。更正它…但同时出现异常行。我已经复制了我的查询,并直接在db上执行它,它可以工作…为了给您一些关于哪里出错的提示,您可以尝试将一些信息记录到LogCat。我总是开始过度指定所有步骤,以显示哪里出错。
/**lookupWineID(String q)基于字符串q.*/public string[]lookupWineID(字符串q){Log.v(“lookupWineID”,“Started”);//打开数据库openDataBase();Log.v(“lookupWineID”,“数据库已打开”);
我不允许从我正在使用的活动中调用此方法。因此,我从另一个活动中调用了它,它可以工作:)我已经在我的editCorrect中编写了它…但是它在同一行出现异常。我已经复制了我的查询,并且直接在db上执行了它,它可以工作…为您提供一些关于哪里出错的提示,您可以我会尝试将一些信息记录到LogCat中。我总是开始过度指定所有步骤,以显示哪里可能出错。
/**lookupWineID(String q)返回一个基于字符串q.*/public String[]lookupWineID(String q){Log.v(“lookupWineID”,“Started”)中葡萄酒名称的ID数组;//打开数据库openDataBase();Log.v(“lookupWineID”,“database Opened”);
我不允许从我正在使用的活动中调用此方法。因此,我从另一个活动中调用了它,它可以工作:)我在编辑中编写了它