2015-07-20 54 views
-1

我已经在sqlite中编写了一个查询以从特定列中获取不同的值,但是我在里面的微调器中获取的值并不是独特的,当我删除_id从查询我得到一个错误,说“列_id不存在”,但是当我在查询中包含_id微调获取填充值但不明显。使用独特的特定列在sqlite查询中不显示不同的值

public Cursor getAccName(String fromdate,String todate){ 
    SQLiteDatabase db = helper.getWritableDatabase(); 
    Cursor cursor = db.rawQuery("Select DISTINCT 
    "+DbListHelper.ACCOUNT_NAME+","+DbListHelper.UID+ 
    " from "+DbListHelper.TABLE_NAME_FINALDATA+" where 
    "+DbListHelper.EFFECTIVE_DATE+" between '" + 
    fromdate + "' and '"+ todate +"'", null); 
    return cursor; 
} 

view_records.java

listHelper = new SqliteVehicleDetails(getBaseContext()); 
listHelper.open(getBaseContext()); 
etFromDate.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      showDialog(DATE_PICKER_ID); 
     } 
    }); 

    etTodate.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      showDialog(DATE_PICKER_ID_1); 

     } 
    }); 

@Override 
@Deprecated 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DATE_PICKER_ID: 
     return new DatePickerDialog(this, datePickerListener, year, month, 
     day); 

    case DATE_PICKER_ID_1: 
     return new DatePickerDialog(this, datePickerListener1, year1, 
     month1, day1); 
    } 
    return null; 

} 

private DatePickerDialog.OnDateSetListener datePickerListener = new 
    DatePickerDialog.OnDateSetListener() { 
    public void onDateSet(DatePicker view, int selectedYear, 
      int selectedMonth, int selectedDay) { 
     String dt; 
     year = selectedYear; 
     month = selectedMonth + 1; 
     day = selectedDay; 

     try { 
      dt = day + "/" + month + "/" + year; 

      SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
      Date currentDt = null;   
      currentDt = sdf.parse(dt); 
      String d = sdf.format(currentDt); 
      etFromDate.setText(d); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     }  
    } 
}; 

private DatePickerDialog.OnDateSetListener datePickerListener1 = new 
    DatePickerDialog.OnDateSetListener() { 
    public void onDateSet(DatePicker view, int selectedYear, 
      int selectedMonth, int selectedDay) { 
     String dt; 
     year1 = selectedYear; 
     month1 = selectedMonth + 1; 
     day1 = selectedDay; 

     try { 
      dt = day1 + "/" + month1 + "/" + year1; 

      SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
      Date currentDt = null;   
      currentDt = sdf.parse(dt); 
      String d = sdf.format(currentDt); 
      etTodate.setText(d); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     }  
    } 
}; 

btnShow.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      cursor = listHelper.getFinalData(); 
      if(cursor.moveToFirst()){ 
       fromDt = etFromDate.getText().toString(); 
       toDt = etTodate.getText().toString(); 
       cursor = listHelper.getAccName(fromDt,toDt); 
       int[] to5 = new int[] { android.R.id.text1 }; 
       String[] from5 = new String[] { DbListHelper.ACCOUNT_NAME }; 
       adapter5 = new SimpleCursorAdapter(
         getBaseContext(), 
         android.R.layout.simple_list_item_1, cursor, 
         from5, to5); 
       adapter5.setDropDownViewResource(
       android.R.layout.simple_spinner_dropdown_item); 
       spinnerAccountName.setAdapter(adapter5); 
    } 

我想知道为什么不同的关键字不工作,为什么它需要在查询中包括_id? 谢谢

+0

这是没有必要包括_id列,你可能得到错误,因为您将尝试从光标获取_id列的值。在选择查询中使用_id时,由于_id是主键,因此帐户名称和_id的组合总是不同的。 –

+0

我已经包含代码先生,我从btnshow点击光标获取值 –

回答

1

微调需要一个名为_id的唯一ID列,但是当您只是从数据库中取出此列时,所有结果行都是唯一的。

从数据库中,组对列中获取不同的名称,然后乘组中的行之一的_id值:

SELECT AccountName, 
     MIN(_id) AS _id 
FROM FinalData 
WHERE EffectiveDate BETWEEN ? AND ? 
GROUP BY AccountName