Ошибка курсора SQL

1

Я использую блокнот SQLhelper (notesDBadapter) в качестве модели, некоторые из них работают, а некоторые нет. Я могу получить курсор для fetchallrecords(), но он сработает, если я попробую передать вызов аргументу и используя "WHERE". Аргумент передается, но курсор не работает. Мой код в действии;

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listselectedfile);    

    //Button ID clicked in previous activity
    Bundle bundle = getIntent().getExtras();
    int BtnId = bundle.getInt("ButtonID");
    Toast.makeText(this, "ButtonID selected in Main:= " + BtnId, Toast.LENGTH_LONG) .show(); 

    mDbHelper = new SectionsDbAdapter(this);
    mDbHelper.open();
    fillData();

}  
    private void fillData() {
        // Get all of the notes from the database and create the item list
        //Cursor c = mDbHelper.fetchAllRecords();       <=== works fine
        Cursor c = mDbHelper.fetchRecordsbySource("UK"); <=== fails in DBhelper
        startManagingCursor(c);

        String[] from = new String[] { SectionsDbAdapter.KEY_DESC };
        //String[] from = new String[] { SectionsDbAdapter.KEY_SOURCE }; <=== can fetch this column from table
        int[] to = new int[] { R.id.tv_full_width };  //the R.id.xxx= view in the .xml file

        // Now create an array adapter and set it to display using our row
        SimpleCursorAdapter records =
            new SimpleCursorAdapter(this, R.layout.section_row_full_width, c, from, to);  //the .xml file containing the R.id.xxxx
        setListAdapter(records);
    }

В DBhelper; Этот вызов работает и возвращает полную таблицу;

    public Cursor fetchAllRecords() {

    return mDb.query(DATABASE_TABLE, new String[] {
    KEY_ROWID, KEY_DESC, KEY_DEPTH, KEY_TWEB, 
    KEY_BF1, KEY_TF1, KEY_BF2, KEY_TF2, 
    KEY_IMAJOR, KEY_IMINOR, 
    KEY_PLMAJOR, KEY_PLMINOR, 
    KEY_JTORSION, KEY_AREA,  
    KEY_WARPING, KEY_CYCHANNEL, 
    KEY_SHAPE, KEY_SOURCE, 
    KEY_UNITS},null, null, null, null, null);
}

Этот вызов терпит неудачу в курсоре (аргумент успешно передается);

    public Cursor fetchRecordsbySource(String source) throws SQLException {
    Log.v("In fetchRecordsbySource", "source = " +source);      

    Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {
    KEY_ROWID, KEY_DESC}, KEY_SOURCE + " = " + source, null, null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

В отладке Eclipse нет ничего очевидного, но, как новый, я, вероятно, не получил необходимой перспективы.

Может ли кто-нибудь обнаружить ошибку?

  • 0
    Есть ли трассировка стека?
Теги:
cursor

1 ответ

0
Лучший ответ

В коде, который у вас есть, если источник является нечисловым значением, он должен быть окружен одинарными кавычками, например:

KEY_ROWID, KEY_DESC}, KEY_SOURCE + " = '" + source + "'", null, null, null, null, null)

Но вам будет лучше, если вы передадите аргументы фильтра как?; это позволяет избежать (среди прочего) атак SQL-инъекций

KEY_ROWID, KEY_DESC}, KEY_SOURCE + " = ?", new String[] { source }, null, null, null, null)
  • 0
    @nicholas. Я попытался получить трассировку стека (добавил try {...), но затем он запустился, но не вернул никаких записей. Затем я попробовал ответ antlersoft, и он сработал, вернув ожидаемые записи. Большое спасибо. Все, что мне нужно сделать сейчас, это понять аргументы фильтра .. подробнее ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню