查询工作在SQLite浏览器,但不是在Android SQLite



我写信给你,因为我试图找出如何得到这个查询在Android上工作,我知道sintaxis是OK的,因为我之前在SQLite浏览器上尝试过,但我不知道为什么它不给我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将数据库文件拉到我的pc上,并在SQLite浏览器上尝试相同的查询,这是有效的。那么,前面显示的代码的问题在哪里?

谢谢你在这个问题上的帮助,

Tim,给你:

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;
}

文档说明返回的游标对象位于第一个条目之前。我认为isFirst在这种情况下总是返回false。result.moveToFirst () ?检查返回条目计数

你得到一个错误或只是没有结果?您确定数据在数据库中吗?

您是否设置了您的sqlite数据库与android_metadata表?看看那篇帖子,可能会有帮助。对于我的应用程序,我使用的数据库助手类从那篇文章,它的工作就像一个魅力。

最新更新