我在写你,因为我试图找出如何让这个查询在Android上工作,我知道sintaxis是好的,因为我曾在SQLite浏览器但我不知道为什么它不给我任何Android的结果,这是我在Android上使用的代码:查询适用于SQLite浏览器,但不适用于Android SQlLite
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;
}
我会在Android中调试应用程序,并检查传入方法的所有内容是否正确,并且构建的查询是您期望/在SQLite浏览器中测试过的。 –
你在哪里创建/定义你的表,在Android或Android之外使用SQLite浏览器?你能发表你的表格吗? – Tim
我当然已经这样做了,这就是我发布之前一直在做的事情,代码已经在查询类型下进行了测试(使用调试器),并且我已经尝试了SQLite Brower上调试器给出的sql语句,并且它在该应用程序上给出了期望的结果 – Andres