虽然它在表中存在的列_ID不存在错误 [英] Column _ID doesn't exist error though it exists in table

查看:206
本文介绍了虽然它在表中存在的列_ID不存在错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我反复得到越来越 java.lang.IllegalArgumentException异常:列'_id'不存在和应用是越来越坠毁,虽然我已经包括 _ID在表中的列和查询

I am repeatedly getting getting java.lang.IllegalArgumentException: column '_id' does not exist and app is getting crashed though I have included _ID in table columns and query.

在这里,我试图从数据库extact数据和使用自定义光标适配器显示列表视图。

Here I am trying to extact the data from database and display the listview using custom cursor adapter.

表类

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(){


    }

}

类,其中列表视图被填充。

Class where list view is populated.

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天。

Please help me to solve this as I am fighting with this for the last 2 days.

推荐答案

至于Android的SQLite的来讲,列名是区分大小写的。您需要 _id 不是 _ID 。 (在普通的SQL标识符不区分大小写)。

As far as Android SQLite is concerned, column names are case sensitive. You need _id not _ID. (In plain SQL the identifiers are not case sensitive.)

这篇关于虽然它在表中存在的列_ID不存在错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆