2013-03-05 3 views
1

В настоящее время я испытываю очень неприятную проблему с моим приложением: цель состоит в том, чтобы читать в списке различные данные из базы данных в зависимости от кнопки, которую пользователь нажимает. К сожалению, мое приложение всегда сбой, и я не нашел рабочего решения среди похожих вопросов в stackoverflow (проверенные изменения версии базы данных, добавление некоторых строк относительно курсора и т. Д.).Logcat: column _id не существует (связанный с SQL)

Вот соответствующая часть моего кода:

класса А. DatabaseAdapter:

public class DatabaseAdapter { 

public static final String DATABASE_TABLE = "Restaurants"; 

public static final String COL_CAT1 = "cat1"; 
public static final String KEY_ROWID = "_id"; 
public static final String COL_CAT2 = "cat2"; 
public static final String COL_NAME = "name"; 
public static final String COL_COMMENTS = "comments"; 

private Context myContext; 
private SQLiteDatabase myDatabase; 
private DatabaseHelper dbHelper; 
private Cursor c; 

// Constructor 
public DatabaseAdapter(Context context) { 
    this.myContext = context; 

} 

public DatabaseAdapter open() throws SQLException { 
    dbHelper = new DatabaseHelper(myContext); 
    // TODO: or maybe? 
    // database = dbHelper.getWritableDatabase(); 
    try { 
     dbHelper.createDatabase(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    myDatabase = dbHelper.getReadableDatabase(); 
    return this; 
} 

public void close() { 
    if (c != null) { 
     c.close(); 
    } 
    try { 
     dbHelper.close(); 
     myDatabase.close(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 


public Cursor findNameInTable(int myVariable) { 
    c = myDatabase 
      .query(DATABASE_TABLE, new String[] { COL_NAME , COL_COMMENTS }, 
        COL_CAT1+"=?", 
        new String[] { Integer.toString(myVariable) }, null, 
        null, null); 
    return c; 
} 

}

B. ResultListViewActivity (результаты должны быть отображены с помощью этого деятельность в ListView):

public class ResultListViewActivity extends Activity { 

private SimpleCursorAdapter cursorAdapter; 
private DatabaseAdapter dbHelper; 
ListView listview; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_result_list_view); 

    dbHelper = new DatabaseAdapter(this); // open() method is in DatabaseAdapter 

    dbHelper.open(); 


    displayListView(); 
} 

private void displayListView() { 

    Bundle bundle = getIntent().getExtras(); 
    int myVariable = bundle.getInt("myVariable"); 

    Cursor c = dbHelper.findNameInTable(myVariable); 
    // the desired columns to be bound 
    String[] columns = new String[] { DatabaseAdapter.COL_NAME, 
      DatabaseAdapter.COL_COMMENTS, }; 
    // the XML defined views which the data will be bound to 
    int[] to = new int[] { R.id.name, R.id.comments, }; 
    // create the adapter using the cursor pointing to the desired data 
    // as well as the layout information 
    cursorAdapter = new SimpleCursorAdapter(this, R.layout.poi_info, c, 
      columns, to, 0); 

    ListView listView = (ListView) findViewById(R.id.listview); 
    // Assign adapter to ListView 
    listView.setAdapter(cursorAdapter); 
} 

Изображение моей базе данных: как вы можете видеть, есть на самом деле столбец _id: enter image description here

И, наконец, фотография моего LogCat в случае:
enter image description here

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

+1

Престола [это сообщение] (HTTP://stackoverflow.com/a/14617726/1365960). – StarPinkER

ответ

1

Каждый ListView нуждается столбец _id в это выбор query.you должен включать столбец _id в свой список запросов

изменения ваш запрос на:

c = myDatabase 
     .query(DATABASE_TABLE, new String[] { KEY_ROWID,COL_NAME , COL_COMMENTS }, 
       COL_CAT1+"=?", 
       new String[] { Integer.toString(myVariable) }, null, 
       null, null); 
+0

Спасибо @Arash, он работает хорошо! – Phalanx

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