Cómo implementar la función recursiva de sqlite3 en dispositivos Android

Estoy tratando de implementar la función recursiva dentro de una aplicación para Android;

Primero, lo intento (función recursiva) de 'cmd' ventanas:

Creo una tabla:

CREATE TABLE tree( id_tree integer PRIMARY KEY AUTOINCREMENT, id_boss TEXT, id_child TEXT, answ TEXT); 

A continuación, inserte algunos valores:

  INSERT INTO tree(id_boss,id_child,answ) VALUES('1','2','T'); INSERT INTO tree(id_boss,id_child,answ) VALUES('1','3','F'); INSERT INTO tree(id_boss,id_child,answ) VALUES('2','P1','T'); INSERT INTO tree(id_boss,id_child,answ) VALUES('2','4','F'); INSERT INTO tree(id_boss,id_child,answ) VALUES('3','P2','T'); INSERT INTO tree(id_boss,id_child,answ) VALUES('3','8','F'); 

Luego ejecuto una consulta recursiva que ahora está disponible para sqlite 3.8:

  WITH RECURSIVE under_alice(name,level) AS ( VALUES('1','0') UNION ALL SELECT tree.id_child, under_alice.level+1 FROM tree, under_alice WHERE tree.id_boss=under_alice.name ORDER BY 2 DESC ) SELECT substr('..........',1,level*3) || name FROM under_alice; 

Está funcionando muy bien con resultado:

  1 ...2 ......4 ......P1 ...3 ......8 ......P2 

Luego selecciono id_child donde id_boss = '1' y answ = 'T' con esta consulta;

  WITH RECURSIVE under_alice(name,level) AS ( VALUES('1','0') UNION ALL SELECT tree.id_child, under_alice.level+1 FROM tree, under_alice WHERE tree.id_boss=under_alice.name and answ = 'T' and tree.id_boss='1' ORDER BY 2 DESC ) SELECT substr('..........',1,level*3) || name FROM under_alice; 

Está funcionando muy bien con este resultado:

  1 ...2 

Todo se puede ejecutar dentro de un prompt cmd, pero cuando estoy probarlo para implementarlo en mi aplicación android, me sale un error (por ejemplo, no se puede ejecutar):

Aquí está mi código para ejecutar la consulta desde mi aplicación Android:

  try { SQLiteDatabase db = dbHandler.getWritableDatabase(); String q = "WITH RECURSIVE under_alice(name,level) AS ( VALUES('1','0') UNION ALL SELECT tree.id_child, under_alice.level+1 FROM tree, under_alice WHERE tree.id_boss=under_alice.name and answ = 'T' and tree.id_boss='1' ORDER BY 2 DESC) SELECT max(name) as au FROM under_alice;"; Cursor eq = db.rawQuery(q, null); eq.moveToFirst(); int au = eq.getColumnIndex("au"); String sau = eq.getString(au); makeToast(""+sau); // if execute succes, create a toast message } catch (Exception e) { // TODO: handle exception makeToast("failed query"); // if query filed } } 

¿Cómo puedo hacer que esto funcione? ¿Hay algo malo en mi consulta?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.