【问题标题】:Android SQLite column _id error ,Android SQLite 列 _id 错误,
【发布时间】:2012-09-03 08:54:14
【问题描述】:

我正在尝试在数据库中查询。数据库不是在应用程序中创建的,我是在外部创建的,并且我正在使用 this tutorial 解释。但我有一个与列_id 相关的错误。 在 Class DatabaseHelper 中,我有以下代码:

public Cursor Search(Context context,String search){
        SQLiteDatabase db= getReadableDatabase();
        String cursorFactory = "SELECT * FROM words WHERE eng || ' ' || rus LIKE ?";
        Cursor cursor = db.rawQuery(cursorFactory, new String[]{"%" + search + "%"});
        return cursor;
                }

在Activity中,我写的代码是:

 public void search(View v){
            text2search= searchText.getText().toString();   
            cursor= myDbHelper.Search(mContext, text2search);
            adapter =new SimpleCursorAdapter(getBaseContext(),R.layout.list_item, 
                        cursor,
                        new String[]{"rusword","engword","kind"},
                        new int[]{R.id.rusWord,R.id.engWord,R.id.knd});
            wordsList.setAdapter(adapter);              
        }  

我得到了与 _id 相关的错误:(在 LogCat 中)

09-03 14:12:38.018: E/AndroidRuntime(16581): 由: java.lang.IllegalArgumentException:列“_id”不存在

但是我创建的数据库有“_id”列:(我不能上传图片,所以这里是链接https://www.dropbox.com/s/9a2ol1acrnxmzob/sql-db-rusWjpg.png

谢谢!

【问题讨论】:

  • 尝试在没有* 但使用"_id, rusword, engword, kind" 的情况下询问db ...如果没有_id 列,您应该得到错误...

标签: android sqlite


【解决方案1】:

所以问题不是太棘手。一些适配器,在你的情况下SimpleCursorAdapter 这个适配器在尝试选择你需要选择列 _id 的东西时需要。 所以试试这个:

new String[] {"_id", "rusword", "engword", "kind"}
String cursorFactory = "SELECT _id, [next columns] FROM ...;

现在应该可以了。

类似的问题在这里:

注意:如果您不想拥有 _id 列,您可以使用这个简单的技巧:

SELECT keyID AS _id FROM TableName

【讨论】:

  • 除了 Note ... keyID(如果您已定义键)或只是特殊的 SQLite 列,如 ROWID as _id
  • 你是对的人。我刚刚注意到他想要拥有名为 id 或 keyID 的列时,f.e. private static final String KEYID = "id {or idCustomer etc..}"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
相关资源
最近更新 更多