tutorial not found español descargar create android sqlite3

not - Consultas de Android SQLite marcadas como Error por Android Studio



sqlite android tutorial español (1)

En una de mis aplicaciones de Android utilizo algunas consultas SQLite que están comenzando a dar problemas desde que actualicé a Android Studio 3.0 .

A pesar de que puedo compilar y ejecutar la aplicación, están marcados como error.

Estas son las consultas.

db.execSQL("INSERT INTO table1 (…) ... substr(replace(table2.field2, '','', ''''), table1.field1, 1) … FROM table1 … WHERE …");

da error en ''reemplazar'':

'')'' o expresión esperada, consiguió ''reemplazar''

Creo que esto funcionaría porque replace devuelve un String .

Y:

db.execSQL("DELETE FROM table1 WHERE table1.rowid IN (…)");

da error en ''rowid'':

el nombre de la columna o el nombre de la tabla esperado, obtuvo ''rowid''

Creo que esto también funcionaría porque SQLite agrega un rowid implícito a cada tabla.

Y:

db.execSQL("ATTACH DATABASE ? as newDB", new String[] { getDatabasePath(DATABASE_NAME_NEW).getPath() });

da error en ''?'':

expresión esperada, conseguida ''?''

Cambié esta consulta a esto:

db.execSQL("ATTACH DATABASE ''"+getDatabasePath(DATABASE_NAME_NEW).getPath()+"'' as newDB");

También:

db.execSQL("UPDATE table1 SET field1=0 WHERE field2 IN (SELECT field2 FROM table2 WHERE field3 LIKE ''%blablabla%'' OR field4 LIKE ''%blebleble%'' OR (field5 LIKE ''%bliblibli%'' AND field6 NOT LIKE ''%blobloblo%'') COLLATE NOCASE)");

Que da estos errores:

En ''field6 NOT LIKE'':

'')'' o ''.'' esperado, tengo ''NO''

En ningún caso)'':

ENTRE, IN o punto y coma esperado, got '')''

No sé lo que está mal con este.

¿Son estas preguntas correctas? En iOS son idénticos y están funcionando bien.

ACTUALIZAR:

Estas son las consultas completas (desafortunadamente debido a la política de seguridad de mi cliente, tengo que cambiar el nombre de las tablas y campos, pero espero que esté bien para detectar los errores).

db.execSQL("INSERT INTO table1 (field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14) " + "SELECT t6.field1, t7.field2, t3.field4, t3.field5, CASE WHEN t5.field1=''1'' THEN ''11'' " + "WHEN t5.field1=''2'' THEN ''22'' WHEN t5.field1=''3'' THEN ''33'' WHEN t5.field1=''4'' THEN ''44'' " + "ELSE t5.field1 END AS newfield1, t4.field1, CASE WHEN t2.field1 = ''0'' THEN t4.field2 " + "ELSE substr(replace(t4.field3, '','', ''''), t2.field1, 1) END AS newfield2, t2.field4, ''0'', -1, ''0'', ''1'', -1, t8.field1 " + "FROM table2 AS t2, table3 AS t3, table4 AS t4, table5 AS t5, table6 AS t6, table7 AS t7, table8 AS t8 " + "WHERE t2.field2=t3.field3 AND t2.field3=t4.field1 AND t2.field3=t5.field2 AND t3.field2=t7.field2 AND " + "t3.field1=t6.field1 AND substr(t5.field1, 1, 1) IN (''1'', ''2'', ''3'', ''4'') AND substr(t5.field1, 2, 1) IN (''1'', ''2'', ''3'', ''4'') AND t2.field5=t8.field2"); db.execSQL("DELETE FROM table1 WHERE table1.rowid IN (SELECT table1.rowid FROM table1, table4 AS t4 WHERE table1.field6=t4.field1 AND (((t4.field2 NOT LIKE ''%%'' || substr(table1.field5, 1,1) || ''%%'') AND (t4.field3 NOT LIKE ''%%'' || substr(table1.field5, 1,1) || ''%%'')) OR ((t4.field2 NOT LIKE ''%%'' || substr(table1.field5, 2,1) || ''%%'') AND (t4.field3 NOT LIKE ''%%'' || substr(table1.field5, 2,1) || ''%%''))))"); db.execSQL("ATTACH DATABASE ? as newDB", new String[] { getDatabasePath(DATABASE_NAME_NEW).getPath() }); Changed to: db.execSQL("ATTACH DATABASE ''"+getDatabasePath(DATABASE_NAME_NEW).getPath()+"'' as newDB"); And the error is gone. db.execSQL("UPDATE table1 SET field13=1 WHERE field2 IN (SELECT t7.field2 FROM table7 AS t7 WHERE t7.field1=''Text1'' OR t7.field1=''Text2'' OR t7.field1 LIKE ''%TEXT3%'' OR t7.field1 LIKE ''%TEXT4%'' OR t7.field1 LIKE ''%TEXT5%'' OR t7.field1 LIKE ''%TEXT6%'' OR (t7.field1 LIKE ''%TEXT7%'' AND t7.field1 NOT LIKE ''%TEXT8%'') COLLATE NOCASE)");


@Wonton Aquí hay una sugerencia sobre el uso del diseño de MVP. Aquí es donde tienes un Modelo de base de datos donde tienes un conjunto de get y set para cada elemento en la tabla de la base de datos. Luego maneje todo su CRUD en una actividad llamada DBHelper, luego puede hacer llamadas desde cualquier otra actividad con muchas menos posibilidades de errores. SÍ, uso db.execSQL, pero una vez que tiene la cadena para actualizar o insertar en DBHelper, la vida es buena. Aquí hay un ejemplo de código de una actividad de DBHelper. Pista HINT lea sobre MVP

/* Update Record in Database*/ public void updateDBRow(String rowid,String website, String username, String password, String question,String answer, String notes){ db = this.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put(Col_WS,website); cv.put(Col_UN,username); cv.put(Col_PW,password); cv.put(Col_SQ,question); cv.put(Col_SA,answer); cv.put(Col_NOTES,notes); /*NOTE WHERE THE quotation MARKS ARE */ db.update(TABLE_INFO,cv, Col_ID + " = ?",new String[] { rowid }); db.close(); }