列_ID不存在错误虽然它存在于表中

Posted

技术标签:

【中文标题】列_ID不存在错误虽然它存在于表中【英文标题】:Column _ID doesn't exist error though it exists in table 【发布时间】:2014-03-14 21:31:13 【问题描述】:

尽管我在表格列和查询中包含_ID,但我反复收到java.lang.IllegalArgumentException: column '_id' does not exist 并且应用程序崩溃了。

这里我试图从数据库中提取数据并使用自定义光标适配器显示列表视图。

表格类

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 天都在努力解决这个问题。

【问题讨论】:

您的声明“_ID”中有一个空格。还没有看其他东西...这是故意的吗? 是的,它是故意没有空间它没有占用_不知道为什么 为什么不带下划线?如果您愿意,“_ID”应该可以作为 String column1 正常工作,一定是其他错误,请尝试 嗯,到底哪里出错了?你能给我一个我可以用 Control-F 找到的字符串吗?虽然我不确定为什么 _ 不起作用,这实际上可能会产生影响,并且可能是您问题的根源...... 好的,让我尝试删除空格,@TheOneWhoPrograms 错误是当我尝试使用自定义光标适配器填充列表视图时,它给了我列 _id 不存在 【参考方案1】:

android SQLite 而言,列名区分大小写。你需要_id 而不是_ID。 (在普通 SQL 中,标识符不区分大小写。)

【讨论】:

哇..你是超级巨星..谢谢它这么简单的事情我错过了......非常感谢......等待时间结束后将接受它作为答案。 呸,希望我是发现你的问题的人 D=...我太习惯于 ORACLE 和 mysql,我认为它们都不区分大小写,但我可能对 mySql 有误。很高兴你成功了! @TheOneWhoPrograms sqlite 也不区分大小写,它是 Android 的 Java 包装器,尤其是它的 getColumnIndex() 是区分大小写的。

以上是关于列_ID不存在错误虽然它存在于表中的主要内容,如果未能解决你的问题,请参考以下文章

错误:PostgreSQL 中不存在列

对第二个表中不存在 ID 的两个表的 MySQL 查询优化

在同一列中不存在某些 ID 的大表中选择数据。加快查询

QUERY DATABASE:如何从 2 个表中获取多个数据,其 id 不存在于表中

SQL:如何定义表中不存在的额外列? [关闭]

获取表中不存在的 ID 列表