2014-02-15 4 views
-2

Я постоянно получаю java.lang.IllegalArgumentException: column '_id' does not exist, и приложение становится разбитым, хотя я включил _ID в столбцы и запрос таблицы.Столбец _ID не существует ошибки, хотя он существует в таблице

Здесь я пытаюсь извлечь данные из базы данных и отобразить список с помощью пользовательского адаптера курсора.

Таблица класса

public class StockTable { 

    Context c1; 
    DatabaseObject d1; 
    Cursor c; 

    StockTable(Context mcontext){ 
     c1=mcontext; 
     //---------------objects---------------------------// 
     d1=new DatabaseObject(c1); 
     //---------------objects ends----------------------// 
    } 
    // d1=new DatabaseObject(c1); 
    //-----------General Decelerations-------------------// 
    private String selectID; 
    private int storeID=0; 
    //-----------General Decelerations ends--------------// 
    //-----------table name and columns-----------------// 
    final String tablename="StockTable"; 
    //public static final String _ID = "ID"; 
    public String column1=" _ID"; 
    public String column2="StockName"; 

    //-----------table name and columns end-----------------// 

    final String stocktable = "CREATE TABLE " + tablename + 
       " (" + column1 + " INTEGER PRIMARY KEY , " + column2 + " TEXT) "; 

    public ContentValues insert(String one){ 

     try{ 
     selectID="Select Max("+ column1 + ") from " + tablename; 
     System.out.println(selectID); 
     c=d1.d.db.rawQuery(selectID,null); 
     System.out.println(c.getCount()); 
     //System.out.println(c.getInt(0)); 
     if(c.moveToNext()) 
     { 

      System.out.println("Has Values"); 
     } 
     else 
     { 

      System.out.println("No Values"); 
     } 
     } 
     catch(Exception e) 
     { 

      System.out.println(e.getMessage()); 
     } 

     ContentValues cvi=new ContentValues(); 
    // for(int i=0;i<=1;i++) 
      cvi.put(column1, c.getInt(0)+1); 
      cvi.put(column2,one); 


     return cvi; 
    } 

    public void delete(){ 


    } 

    public void select(){ 


    } 

} 

Класс, где заполняется в виде списка.

public class stockmanager extends Activity{ 

    /*public stockmanager() { 
     // TODO Auto-generated constructor stub 
     populatelist pl=new populatelist(); 
     //pl.getView(position, getCurrentFocus(), null); 
    }*/ 
    String getentry; 
    private int storeID=0; 
    DatabaseObject d; 
    StockTable st; 
    private String getstocks; 
    public Cursor a1; 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.stockmanager); 
     d=new DatabaseObject(getApplicationContext()); 
     st=new StockTable(getApplicationContext()); 
    final Button AddStock=(Button) findViewById(R.id.button1); 
     final EditText entry=(EditText) findViewById(R.id.editText1); 
     final Button BroDetail=(Button) findViewById(R.id.button2); 
     final ListView popstocks=(ListView) findViewById(R.id.listView1); 

     AddStock.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       getentry=entry.getText().toString(); 
       //st.insert(getentry); 
       System.out.println(getentry); 
       //d.db.rawQuery(st.select(), null); 
       d.d.db.insert(st.tablename, null,st.insert(getentry)); 
       //populatelist populatestocks=new populatelist(); 

       getstocks="Select " + st.column1 + " as _ID, " + st.column2 + " From "+ st.tablename; 
       System.out.println(getstocks); 
       a1=d.d.db.rawQuery(getstocks, null); 
       if(a1.moveToNext()){ 

        System.out.println(a1.getCount()); 
       } 
       else{ 
        System.out.println("can't open database"); 
       } 

       poplist populatestocks=new poplist(getApplicationContext(),a1) ; 
       popstocks.setAdapter(populatestocks); 

      } 
     }); 
       } 


    public class poplist extends CursorAdapter{ 

     public poplist(Context context, Cursor c) { 
      super(context, c); 
      // TODO Auto-generated constructor stub 
     } 
     //StockTable st1=new StockTable(getApplicationContext()); 
     //Database d1=new Database(getApplicationContext()); 


     @Override 
     public void bindView(View view, Context context, Cursor c) { 
      // TODO Auto-generated method stub 
      final CheckBox cb=(CheckBox) view.findViewById(R.id.checkBox1); 
      final Button view1=(Button) view.findViewById(R.id.button1); 

      if(c.moveToFirst()){ 

       //cb.setText(a1.getString(a1.getColumnIndex(st1.column2))); 
        //do{ 
         //cb.setText(a1.getString(a1.getColumnIndexOrThrow(st.column2))); 
       cb.setText(c.getString(1)); 
       // }while (a1.moveToNext()); 

       } 

     } 

     @Override 
     public View newView(Context context, Cursor c, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      LayoutInflater inflater = LayoutInflater.from(context); 

      View v = inflater.inflate(R.layout.stocklist, parent, false); 
        bindView(v, context, c); 
        return v; 
//   return null; 
     } 


    } 

    public void Declerations(){ 


    } 


} 

Пожалуйста, помогите мне решить эту проблему, поскольку я борюсь с этим в течение последних 2 дней.

+1

theres в вашем объявлении «_ID». Больше не смотрел на что-то еще ... Это намеренно? – TheOneWhoPrograms

+0

Да, это намеренно без пространства, он не принимает '_', не знаю почему – Siva

+0

Зачем это не принимать подчеркивание? «_ID» должен работать нормально как столбец String1, если вы хотите, должна быть какая-то другая ошибка, попробуйте сделать это – user2450263

ответ

4

Что касается Android SQLite, имена столбцов чувствительны к регистру. Вам нужно _id не _ID. (В простом SQL идентификаторы не чувствительны к регистру.)

+1

Ух ты .. ты суперзвезда .. спасибо, что проделала такую ​​простую вещь, которую я пропустил ... большое спасибо ... примет это как ответ, как только время ожидания закончится. – Siva

+0

Бах, хотелось бы, чтобы я нашел вашу проблему. D = ... Я слишком привык к ORACLE и mySql, которые, как я считаю, нечувствительны к регистру, но я могу ошибаться в отношении mySql. Рад, что ты заработал! – TheOneWhoPrograms

+2

@TheOneWhoPrograms sqlite также не чувствителен к регистру, это оболочка Java для Android на вершине и особенно ее 'getColumnIndex()', которая чувствительна к регистру. – laalto

Смежные вопросы