Запрос работает в браузере SQLite, но не в Android SQlLite - PullRequest
0 голосов
/ 15 августа 2011

Я пишу вам, потому что я пытался выяснить, как заставить этот запрос работать на Android, я знаю, что с синтаксисом все в порядке, потому что я пробовал на SQLite Browser раньше, но я не знаю, почему он не ' Я не могу дать никакого результата на Android, вот код, который я использую на Android:

    public long getAdminOrMemberOrGroupID (String arg, char option){
    Cursor result = null;
    String[] selectionArgs = new String[] { arg };
    long idResult = 0;
    int idIndex=0;

    switch(option){
    case 'a':
        result = db.rawQuery("SELECT _id FROM Admins WHERE mac=?", selectionArgs);
        //result = db.rawQuery("SELECT _id FROM Admins WHERE mac= '"+ arg +"'", null);
        //result = db.query(DATABASE_TABLE_ADMINS, new String[]{KEY_ID}, KEY_MAC + "= '" + arg + "'" , null, null, null, null); 
    case 'm':
        result = db.rawQuery("SELECT _id FROM Members WHERE mac=?", selectionArgs);
        //result = db.rawQuery("SELECT _id FROM Members WHERE mac= '"+ arg +"'", null);
        //result = db.query(DATABASE_TABLE_MEMBERS, new String[]{KEY_ID}, KEY_MAC + "= '" + arg + "'", null, null, null, null);
    case 'g':
        result = db.rawQuery("SELECT _id FROM Groups WHERE name=?", selectionArgs);
        ////result = db.rawQuery("SELECT _id FROM Groups WHERE name= '"+ arg +"'", null);
        //result = db.query(DATABASE_TABLE_GROUPS, new String[]{KEY_ID}, KEY_NAME + "= '" + arg + "'", null, null, null, null);

    }

    idIndex = result.getColumnIndex(KEY_ID);

    if(result!=null){
        if (result.isFirst()){
             idResult= result.getLong(idIndex);
        }
    }

    return idResult;
}

Как вы видели, я пытался сделать это несколькими способами, но ни один из них не работает нормально, он не возвращает никакого результата. Я вытащил файл базы данных на свой компьютер, используя DDMS и пробуя тот же запрос в браузере SQLite, и это работает. Итак, где же проблема в коде, показанном ранее?

Спасибо за любую помощь по этому вопросу,

Тим, вот оно:

public static final String KEY_ID = "_id";
public static final String KEY_NAME = "name";
public static final int NAME_COLUMN = 1;
public static final String KEY_MAC = "mac";
public static final int MAC_COLUMN = 2;
public static final String KEY_GPS = "gps";
public static final int GPS_COLUMN = 3;
public static final String KEY_ID_ADMIN = "idAdmin";
public static final String KEY_ID_GROUP = "idGroup";

private static final String DATABASE_CREATE_ADMINS = "create table " + DATABASE_TABLE_ADMINS + 
"(" + KEY_ID + " integer primary key autoincrement, " + KEY_NAME + " text not null, " + KEY_MAC + " text not null);";
private static final String DATABASE_CREATE_GROUPS = "create table " + DATABASE_TABLE_GROUPS + 
"(" + KEY_ID + " integer primary key autoincrement, " + KEY_ID_ADMIN + " integer, " + KEY_NAME + " text not null);";
private static final String DATABASE_CREATE_MEMBERS = "create table " + DATABASE_TABLE_MEMBERS + 
"(" + KEY_ID + " integer primary key autoincrement, " + KEY_NAME + " text not null, " + KEY_MAC + " text not null, " 
    + KEY_GPS + " text, " + KEY_ID_GROUP + " integer);";

Метод создания таблиц

public void createDataBase() throws IOException{

    boolean dbExist = checkDataBase();

    if(dbExist){
        //do nothing - database already exist
    }else{
        db = context.openOrCreateDatabase(DATABASE_NAME, SQLiteDatabase.CREATE_IF_NECESSARY, null);
        db.execSQL(DATABASE_CREATE_ADMINS);
        db.execSQL(DATABASE_CREATE_MEMBERS);
        db.execSQL(DATABASE_CREATE_GROUPS);
    }

}

private boolean checkDataBase(){

    SQLiteDatabase checkDB = null;

    try{
        String myPath = DATABASE_PATH + DATABASE_NAME;
        checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

    }catch(SQLiteException e){

        //database does't exist yet.

    }

    if(checkDB != null){

        checkDB.close();

    }

    return checkDB != null ? true : false;
}

Ответы [ 3 ]

4 голосов
/ 15 августа 2011

Документация гласит, что возвращенный объект курсора располагается перед первым вводом. Я думаю, что isFirst в этом случае всегда будет возвращать false. result.moveToFirst ()? Проверьте количество возвращенных записей.

0 голосов
/ 15 августа 2011

Вы настроили свою базу данных sqlite с таблицей android_metadata?Смотрите этот пост , это может помочь.Для своего приложения я использую вспомогательный класс базы данных из этого поста, и он работает как шарм.

0 голосов
/ 15 августа 2011

Вы получаете ошибку или просто нет результатов? Вы уверены, что данные в базе данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...