列_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不存在错误虽然它存在于表中的主要内容,如果未能解决你的问题,请参考以下文章